如何恢复多个.bak文件?

问题描述 投票:0回答:1

我正在尝试恢复多个 .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)')

python sql-server
1个回答
0
投票

您不能在同一命令中指定多个

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;
    """)
© www.soinside.com 2019 - 2024. All rights reserved.