如何使用 databricks 恢复多个 .bak 文件?

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

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

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.