每小時日誌傳送文件的備用恢復選項策略
我正在嘗試使用“備用”還原模式來跟上每日數據庫更新過程的策略。
我從第三方的 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”
您可以從
NORECOVERY
to更改,STANDBY
反之亦然,例如:-- From norecovery to standby RESTORE DATABASE DbName WITH STANDBY = N'C:\StandbyFiles\DbName.sby'; -- From standby to norecovery RESTORE DATABASE DbName WITH NORECOVERY;
您無需從更改
STANDBY
為NORECOVERY
應用下一組日誌備份。一旦數據庫恢復 (
WITH RECOVERY
),您將無法返回,必須重新開始整個恢復序列。在你的場景中你永遠不會這樣做。下一個還原步驟將自動刪除(或重新使用)備用文件,但當還原命令未主動使用該文件時,SQL Server 不會鎖定該文件。像對待任何其他數據庫文件一樣小心處理該文件——如果它失去了,數據庫也會失去。
推薦閱讀:
- Kendra Little從 STANDBY 模式下的日誌傳送輔助節點報告。
- Paul Randal 的日誌傳送性能問題