Sql-Server-2014

從外部程序執行後,數據庫卡在 SSMS 中的“恢復”中

  • July 12, 2018

我正在從外部程序(使用 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 呼叫儲存過程。

引用自:https://dba.stackexchange.com/questions/203367