我正在尝试恢复多个 .bak 文件,但是使用
RESTORE
命令但无法识别错误指出的 URL 选项的用法
编程错误:('42000',“[42000] [Microsoft][SQL Server 的 ODBC 驱动程序 17][SQL Server]'URL' 不是可识别的 RESTORE 选项。(155) (SQLExecDirectW)”)
有没有办法可以恢复多个 .bak 文件或解决我的代码?
import pyodbc
import pandas as pd
server = "[REDACTED]"
username = "[REDACTED]"
password = "[REDACTED]"
conn_str = "[REDACTED]"
# Establish connection
conn = pyodbc.connect(conn_str)
conn.autocommit = True
cursor = conn.cursor()
sas_token = '[REDACTED]'
url = 'https://[REDACTED]/PROD_2009_1round.bak'
url2 = 'https://[REDACTED]/PROD_2009_2round.bak'
# Define restore command using the credential object
restore_command = f"""
RESTORE DATABASE [PROD_2009]
FROM URL = '{url}'
WITH FILE = 1, NOUNLOAD, STATS = 10,
URL = '{url2}',
WITH FILE = 2;
"""
# Execute restore command
cursor.execute(restore_command)
# Close cursor and connection
cursor.close()
conn.close()
以前我使用此代码片段
RESTORE
,但我收到的错误是这样的:
restore_command = f"""
RESTORE DATABASE [PROD_2009]
FROM URL = '{url}', URL = '{url2}';
"""
ProgrammingError: ('42000', '[42000] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]“https:[REDACTED]/PROD_2009_1round.bak”上加载的媒体已格式化为支持 1 个媒体系列,但根据备份设备规范,预计有 2 个介质系列 (3231) (SQLExecDirectW)')
您不能在同一命令中指定多个
URL
选项。
相反,您需要使用单独的命令恢复每个备份文件。
# Restore 1st backup
cursor.execute(f"""
RESTORE DATABASE [PROD_2009]
FROM URL = '{url}'
WITH FILE = 1, NOUNLOAD, STATS = 10;
""")
# Restore 2nd backup
cursor.execute(f"""
RESTORE DATABASE [PROD_2009]
FROM URL = '{url2}'
WITH FILE = 1, NOUNLOAD, STATS = 10;
""")
或者你可以使用循环:
urls = [url, url2]
for i, url in enumerate(urls, start=1):
cursor.execute(f"""
RESTORE DATABASE [PROD_2009]
FROM URL = '{url}'
WITH FILE = {i}, NOUNLOAD, STATS = 10;
""")