確保正在恢復的頁面沒有損壞的 SQL 伺服器機制是什麼?
假設 dbcc checkdb 在 1 頁上顯示損壞。
假設我只想通過恢復損壞的頁面來解決這個問題。
於是我去Restore page UI,點擊按鈕找到損壞的頁面,輸入完整和日誌備份文件並恢復。
我的問題是 - sql 伺服器在給定的完整備份中檢查頁面是否損壞的方式是什麼?
它不會。如果您在備份文件中有損壞的頁面並且您恢復它,SQL 將恢復它(並且它不會引發任何錯誤)。
經常執行 checkdb 並確保不備份損壞的頁面是您的工作。
現在,您可以嘗試恢復最新的完整備份 + diff/log 並執行 checkdb 以查看這是否修復了您的損壞。
如果沒有,那麼您可以獲取之前的完整備份並將所有日誌應用到最後一個(這可能需要一些時間,因為您可能需要恢復很多日誌)並再次執行 checkdb。
*您可以通過僅在其他地方恢復完整併在那裡執行 checkdb 來節省時間。如果頁面未完全損壞,則在應用日誌後從技術上講應該保持未損壞。
DBA 有責任制定適當的維護計劃並確保正在執行的數據庫和數據庫備份的完整性。
DBCC CHECKDB()
是檢查生產執行數據庫中的損壞的工具。
BACKUP DATABASE ... WITH CHECKSUM...
將是一個足夠的設置,以確保寫入備份位置的數據與從正在執行的數據庫中檢索到的數據相同。指定備份操作驗證每個頁面的校驗和和損壞頁面(如果啟用且可用),並為整個備份生成校驗和。
在 GUI 中設置選項驗證備份或對數據庫備份文件執行手動操作
RESTORE VERIFYONLY...
,也會檢查創建的備份文件的有效性。
RESTORE DATABASE ... WITH CHECKSUM ...
是將數據庫還原到備用位置/伺服器所要執行的。預設情況下,遇到無效校驗和時,RESTORE 會報告校驗和錯誤並停止。但是,如果您指定 CONTINUE_AFTER_ERROR,則 RESTORE 在返回校驗和錯誤以及包含無效校驗和的頁數(如果損壞允許)後繼續。
還原後,您將再次執行
DBCC CHECKDB()
以確保還原的數據庫沒有損壞。回答你的問題
確保正在恢復的頁面沒有損壞的 SQL 伺服器機制是什麼?
空無一人。DBA 只需執行幾個步驟(如上所述)即可確保數據庫備份不損壞。頁面可能包含損壞但仍可恢復。只有在執行 a 之後,
DBCC CHECKDB()
您才能知道頁面是否損壞。參考閱讀
- 意外 DBA(第 10 天,共 30 天):備份:用於驗證的備份測試(SQLSkills.com / Paul Randal - DBCC 開發人員)
- DBCC CHECKDB(微軟 | SQL 文件)
- 備份數據庫(Microsoft | SQL Docs)
- 恢復數據庫(Microsoft | SQL 文件)
- 僅還原驗證(Microsoft | SQL 文件)