我正在尝试恢复多个 .bak 文件,但是使用
RESTORE
命令但无法识别 URL 选项的使用,错误状态为 ProgrammingError: ('42000', "[42000] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]'URL' is not a recognized RESTORE option. (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]The media loaded on "https:[REDACTED]/PROD_2009_1round.bak" is formatted to support 1 media families, but 2 media families are expected according to the backup device specification. (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;
""")