Sql-Server

每小時日誌傳送文件的備用恢復選項策略

  • May 14, 2021

我正在嘗試使用“備用”還原模式來跟上每日數據庫更新過程的策略。

我從第三方的 FTP 站點獲得了 24 個日誌傳送文件(前一天的每小時事務日誌文件)。我會在每晚執行時更新這 24 個文件。我最初以 SQB 文件格式獲取這些文件,然後我有一個工具和腳本將這些 SQB 文件轉換為 BAK 文件格式。

現在,我正在嘗試制定一個持續備份計劃的策略。

數據庫不必更新或修改,只需讀取即可。 我是否一直將每個事務日誌文件恢復為“備用”並將它們保留為“備用”模式?

我計劃創建一個單獨的數據庫,以便從這個“只讀”數據庫的某些表中只檢索必要的數據。

我還有一個問題。如果我不小心執行了一個腳本將此數據庫恢復為“NoRecovery or Recovery”模式,有沒有辦法通過執行腳本將模式更改回“Standby”,或者我是否必須再次將完整的 bak 文件恢復為“Standby”(做整個過程再次)?

我是否一直將每個事務日誌文件恢復為“備用”並將它們保留為“備用”模式?

兩者都可以,但是使用NORECOVERY. 最後一個應用使用STANDBY,使數據庫可用於只讀訪問。SQL Server 必須做額外的工作才能使數據庫在事務一致的狀態下可供讀取。然後,當您要求它應用下一個日誌備份時,它必須撤消該工作(使用備用文件)。簡而言之,STANDBY不必要的指定確實會減慢速度,因為您最終會執行和撤消部分恢復過程(請參閱下面的 Paul Randal 連結)。

在您的情況下,這意味著應用 23 個事務日誌備份NORECOVERY,然後應用 24個STANDBY。第二天,你做同樣的事情。

請注意,當您開始下一個恢復序列時,您需要確保在待機模式下沒有任何東西連接到數據庫。在您的情況下,這應該不是問題,因為您控制了對數據庫的所有訪問。如果確實需要強制斷開其他使用者:

ALTER DATABASE DbName 
SET SINGLE_USER 
WITH ROLLBACK IMMEDIATE;

不要忘記稍後再次使數據庫對其他使用者可用:

ALTER DATABASE DbName 
SET MULTI_USER;

如果我不小心執行腳本將此數據庫恢復為“NoRecovery or Recovery”模式,有沒有辦法將模式改回“Standby”

您可以從NORECOVERYto更改,STANDBY反之亦然,例如:

-- From norecovery to standby
RESTORE DATABASE DbName
WITH STANDBY = N'C:\StandbyFiles\DbName.sby';

-- From standby to norecovery
RESTORE DATABASE DbName
WITH NORECOVERY;

您無需從更改STANDBYNORECOVERY應用下一組日誌備份。

一旦數據庫恢復 ( WITH RECOVERY),您將無法返回,必須重新開始整個恢復序列。在你的場景中你永遠不會這樣做。

下一個還原步驟將自動刪除(或重新使用)備用文件,但當還原命令未主動使用該文件時,SQL Server 不會鎖定該文件。像對待任何其他數據庫文件一樣小心處理該文件——如果它失去了,數據庫也會失去。

推薦閱讀:

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