Sql-Server

sp_DatabaseRestore 消息 50000

  • January 2, 2019

我使用 Ola 的腳本來備份我的數據庫(SQL Server 2017),現在我正在嘗試使用 Brent 的 sp_DatabaseRestore 來恢復它。目前僅嘗試進行完全還原。這是我的程式碼,根據網頁編寫:

EXEC dbo.sp_DatabaseRestore 
 @Database = 'LOTR_recovery', 
 @BackupPathFull = 'C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\MSSQL\OlaBackup\MY-PC\LOTR\FULL\', 
 @ContinueLogs = 0, 
 @RunRecovery = 1;

我將 SP 放在目標數據庫以及 Ola 的腳本上。除了這兩個,數據庫是空的。我收到以下錯誤:

Getting default data drive for @MoveDataDrive
Getting default log drive for @MoveLogDrive
Setting default data drive for @MoveFilestreamDrive
@ExistingDBAction 0 so do nothing
@ContinueLogs set to 0
Msg 50000, Level 16, State 1, Procedure dbo.CommandExecute, Line 98 [Batch Start Line 0]
The value for the parameter @Command is not supported.

Date and time: 2019-01-02 13:18:32
Command: RESTORE DATABASE [LOTR_recovery] WITH RECOVERY

Msg 3153, Level 16, State 2, Line 1
The database is already fully recovered.
Msg 3013, Level 16, State 1, Line 1
RESTORE DATABASE is terminating abnormally.
Outcome: Failed
Duration: 00:00:00
Date and time: 2019-01-02 13:18:32

我試圖搜尋 msg 50000 和 @command 但沒有成功。

此外,是否必須在我要還原的目標伺服器上創建 sp_DatabaseRestore 才能正常工作?

我可以在此過程中找到的文件有些不完整,尤其是關於輸入參數的含義。

以下是一些猜測。

查看問題中的輸出消息並檢查實際的儲存過程程式碼,我懷疑您嘗試還原的數據庫已經存在。儲存過程有一個名為的參數@ExistingDBAction,它似乎控制如果數據庫已經存在,該過程應該做什麼。此參數的預設值為零 (0),表示什麼都不做。您實際上可以在輸出中看到這一點。

@ExistingDBAction 0 so do nothing

因此,該過程嘗試將備份恢復到現有數據庫並接收

Msg 3153, Level 16, State 2, Line 1
The database is already fully recovered.
Msg 3013, Level 16, State 1, Line 1
RESTORE DATABASE is terminating abnormally.
Outcome: Failed

該過程顯然接受值 1、2 和 3,但該過程並沒有關於這些參數的確切作用的良好文件。

選項 1 似乎將現有數據庫設置為單使用者模式。選項 2 嘗試終止與現有數據庫的所有現有連接 選項 3 嘗試刪除現有數據庫。

我建議執行該過程並包含@ExistingDBAction值為 3 的參數。這應該會終止與數據庫的所有現有連接,然後嘗試刪除它。

您還可以在 SQL Server Management Studio debug下執行您的程序。單步執行儲存過程程式碼可能會讓您更深入地了解遇到的問題。

至於你的最後一個問題

必須在我要還原的目標伺服器上創建 sp_DatabaseRestore 才能正常工作嗎?

情況似乎確實如此。


我也想知道您問題中的原始命令。具體來說,您為@Database = 'LOTR_recovery'. 根據文件sp_DatabaseRestore,該參數應指定數據庫。那是源數據庫的實際名稱。如果要為恢復的數據庫指定與數據庫不同的名稱,則應包含@RestoreDatabaseName具有恢復的數據庫名稱值的參數。

這些附加點可能感興趣也可能不感興趣。我只是想確保您了解這些參數及其含義。

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