Я использую sqlalchemy
с pyodbc
для восстановления файла mssql
.bak.Я следовал советам из предыдущих сообщений относительно обхода транзакций, но, похоже, это ничего не меняет.Любая помощь будет оценена.
from urllib.parse import quote_plus
from sqlalchemy import create_engine
params = quote_plus("Driver={SQL Server Native Client 11.0};"
"Server=Computer\SQLEXPRESS;"
"Database=master;"
"Trusted_Connection=yes;")
engine = create_engine("mssql+pyodbc:///?odbc_connect=%s" % params)
connection = engine.raw_connection()
db_path = r"C:\\Path\\to\\OutputDB.bak"
move_path = r"C:\\Path\\to\\backup\\db.mdf"
move_log_path = r"C:\\Path\\to\\backup\\db_Log.ldf"
sql_cmd = f"""
RESTORE DATABASE [db]
FROM DISK = N'{db_path}'
WITH FILE = 1,
MOVE N'db'
TO N'{move_path}',
MOVE N'test_log'
TO N'{move_log_path}',
RECOVERY,
NOUNLOAD,
REPLACE,
STATS = 5
"""
connection.autocommit = True
cursor = connection.cursor()
cursor.execute(sql_cmd)
while cursor.nextset():
pass
connection.autocommit = False
Я получаю следующее сообщение об ошибке:
ProgrammingError: ('42000', '[42000] [Microsoft] [Собственный клиент SQL Server11.0] [SQL Server] Невозможно выполнить операцию резервного копирования или восстановления в транзакции. (3021) (SQLExecDirectW); [42000] [Microsoft] [Собственный клиент SQL Server 11.0] [SQL Server] RESTORE DATABASE прерывается ненормально. (3013)')