我正在尝试在开发过程中自动化我的数据库恢复,在 SQL Server 2008 上使用 TSQL,使用 sqlalchemy 和 pyodbc 作为传输。
我正在执行的命令是:
"""创建数据库数据库名
从磁盘恢复数据库 dbname='C:\Backups\dbname.bak' WITH REPLACE,MOVE 'dbname_data' TO 'C:\Databases\dbname_data.mdf',MOVE 'dbname_log' TO 'C:\Databases\dbname_log .ldf'"""
不幸的是,在 SQL Management Studio 中,代码运行后,我看到数据库仍处于“正在恢复...”状态。
如果我通过 Management Studio 恢复,它就可以工作。如果我使用子进程调用“sqlcmd”,它就可以工作。 pymssql 在身份验证方面存在问题,甚至没有做到这一点。
可能出了什么问题?
最佳答案
BACKUP 和 RESTORE 语句异步运行,因此它们不会在继续执行其余代码之前终止。
使用 http://ryepup.unwashedmeme.com/blog/2010/08/26/making-sql-server-backups-using-python-and-pyodbc/ 中描述的 while 语句为我解决了这个问题:
# setup your DB connection, cursor, etc
cur.execute('BACKUP DATABASE ? TO DISK=?',
['test', r'd:\temp\test.bak'])
while cur.nextset():
pass
关于sql-server - 在 SQL Server 2008 上使用 sqlalchemy 等待数据库还原完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4254581/