當資料庫的交易紀錄檔已經毀損且也沒有可用的備份檔案來還原時,就可以使用緊急模式(EMERGENCY mode)進行修復或還原.在這個交易紀錄檔毀損的案例中,正常的修復是沒辦法成功的,因為交易紀錄檔已經毀損導致修復無法完整記錄.

在SQL Server 2000 和更早的版本,緊急模式(EMERGENCY mode)中使用 DBCC REBUILD_LOG 命令沒有相關文件說明驗證該如何重建交易紀錄檔.但這個程序在網際網路上公開流傳,且不幸的事沒有完整又正確步驟.基於這原因,開發團隊決定再SQL Server 2005增加如何重建交易紀錄黨並還原資料庫相關文件和方法.這特性就叫緊急模式修復而且相關機制在SQL Server 2008 也沒有任何更改.

當資料庫處於緊急模式和單一使用者模式下,且執行 DBCC CHECKDB並附加 REPAIR_ALLOW_DATA_LOSS 選項,將採取以下步驟:

1.強制還原交易紀錄檔(如果交易紀錄檔存在的話).

這還原本質上和使用備份或還原並附加CONTINUE_AFTER_ERROR很類似.

這主意背後是因為資料庫已經不一致,無法使用正常方法還原資料庫,因為交易紀錄檔已經毀損或其他物件發生問題.

由於資料庫是不一致的,所以交易紀錄檔必須要重新建立,它盡可能從毀損的交易紀錄中取得之前相關交易紀錄資訊,然後丟棄毀損交易紀錄檔案並新建立新的.

執行DBCC CHECKDB 才有可能附加CONTINUE_AFTER_ERROR功能來還原.

2.如果交易紀錄檔毀損就重建它.

3.REPAIR_ALLOW_DATA_LOSS選項將在資料庫上執行完整的一致性檢查.

4.使資料庫上線.

來源出處: Microsoft Press book Microsoft SQL Server 2008 Administrator’s Pocket Consultant, Second Edition by William R. Stanek.

你可以在 Paul’s 部落格CHECKDB From Every Angle: EMERGENCY mode repair – the very, very last resort 一文中發現透過緊急模式修復的更多資訊.