Sql-Server

我可以在沒有備用文件的情況下從 Standby/Read-Only 恢復 SQL 數據庫嗎?

  • November 30, 2015

如果“備用文件”失去,有什麼方法可以從備用/只讀模式恢復 SQL 數據庫?

(我看到一些引用在日誌傳送場景中將此稱為 TUF 文件,但在我的情況下,它只是手動恢復,備用文件具有 BAK 副檔名。)

執行“RESTORE DATABASE foo WITH RECOVERY”會導致致命錯誤:

During startup of warm standby database 'foo', its standby file
('path\filename.bak') was inaccessible to the RESTORE statement.
The operating system error was '5(Access is denied.)'. Diagnose the
operating system error, correct the problem, and retry startup.

恢復是不久前完成的,不幸的是,備用文件位於備份文件夾中,並被我們的文件夾清理常式刪除。任何其他媒體上都不存在該文件的副本。用於恢復到這一點的原始備份也早已不復存在。

幸運的是,這對我們來說沒什麼大不了的(這是一個臨時恢復),但除了“不要刪除那個文件”之外,我在這個問題上找不到任何其他有用的參考資料。

如果歸根結底,我想我可以編寫整個數據庫的腳本,或者使用 SSIS 將所有對象複製到一個新的數據庫容器中,因為我面前有一個 db 的只讀副本。

有什麼辦法可以解決這個問題?我當然不希望我能夠將其翻轉回“恢復”並繼續進行後續恢復或其他任何操作,我只是想在目前狀態下強制它進入正常線上模式,這樣我就可以做到諸如更改權限,更改恢復模式,或進行新的完整備份之類的事情。

事實證明,如果您使用 CONTINUE_AFTER_ERROR 可以完成

RESTORE DATABASE foo WITH RECOVERY, CONTINUE_AFTER_ERROR

當我嘗試它時,我仍然收到警告,但後來做了一個 CHECKDB 並且沒有收到任何錯誤。

RESTORE WITH CONTINUE_AFTER_ERROR was successful but some damage was encountered. Inconsistencies in the database are possible.
RESTORE DATABASE successfully processed 0 pages in 4.180 seconds (0.000 MB/sec).
Msg 3441, Level 17, State 1, Line 13
During startup of warm standby database 'foo' (database ID 46), its standby file ('C:\MSSQL\Backup\foo_standby') was inaccessible to the RESTORE statement. The operating system error was '2(The system cannot find the file specified.)'. Diagnose the operating system error, correct the problem, and retry startup.

鑑於警告,我不能 100% 確定我是否會在沒有良好備份的生產數據庫上嘗試它。鑑於這是一個臨時恢復,可能值得試一試。

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