Sql-Server-2014
從外部程序執行後,數據庫卡在 SSMS 中的“恢復”中
我正在從外部程序(使用 Python 腳本的 Windows Batch)執行帶有 RECOVERY 和 REPLACE 的 RESTORE DATABASE 過程,當我這樣做時,它會使我的數據庫每次都停留在“正在恢復…”模式。但是,如果我手動執行該過程,它就可以正常工作。關於可能導致這種情況的任何想法?我的研究出現了空白
$$ I wasn’t sure whether to put this here or the Python community, so I started here $$. 例如:
Python 執行這個:
exec DB_RESTORE 'MyDatabase','MyDatabase_BACKUP'
執行這個:
USE [master] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE DB_RESTORE @FROMDB VARCHAR(MAX) = '', @TODB VARCHAR(MAX) = '' AS BEGIN DECLARE @SQL VARCHAR(MAX) DECLARE @FILENAME VARCHAR(MAX) DECLARE @PATH VARCHAR(MAX) SET @PATH = 'C:\temp\' SET @FILENAME = @PATH + @FROMDB + '_' + 'backup.bak' SET @SQL = '' SET @SQL ='RESTORE DATABASE ' + @TODB SET @SQL = @SQL + ' FROM DISK = ''' + @FILENAME + '''' + ' WITH RECOVERY, REPLACE, STATS=10' PRINT @SQL EXECUTE(@SQL) END GO
問題是您需要給它時間以便數據庫恢復。
當你執行你的python程式碼來執行儲存過程時,不要立即關閉連接,而是
time.sleep(10)
在它之後彈出一個。這將給數據庫一些時間來準備它進入線上狀態(您需要休眠的時間將根據數據庫大小而有所不同)。
我永遠無法直接解決這個問題。我能想到的最好的結果是 pyodbc 驅動程序有問題。我的解決方法是使用 sqlcmd cli,而不是嘗試直接從 Python 呼叫儲存過程。