如果我使用 CONTINUE_AFTER_ERROR,我會收到 BACKUP 遇到 CHECKSUM 錯誤的通知嗎?
我正在為
WITH CHECKSUM
我們的日常 SQL 備份添加標誌,以更好地確保數據完整性。我當然想知道是否曾經遇到過校驗和錯誤,但我也不希望我的工作在半夜陷入困境;我希望它完成備份“壞”數據庫,然後繼續備份伺服器上的其他數據庫。
如果我使用
BACKUP WITH CHECKSUM, CONTINUE_AFTER_ERROR
,它是否仍會拋出適當的錯誤(SEV 22
或Error 825
其他錯誤)來觸發我的相關警報?或者完全CONTINUE_AFTER_ERROR
抑制這一點,如果我解析作業步驟輸出,我只會知道這個問題?我只是對其進行測試,但我沒有已知
CHECKSUM
不一致的數據庫。
通過對Brent Ozar 的說明(我使用
SET PAGE_VERIFY CHECKSUM
而不是)稍作更改SET PAGE_VERIFY NONE
,我能夠在實驗室環境中創建一個帶有損壞頁面(因此校驗和不匹配)的小型數據庫,以全面測試所有可能的備份選項。這給了我問題的答案:是的,如果你做 a
BACKUP WITH CHECKSUM, CONTINUE_AFTER_ERROR
,它仍然會拋出一個錯誤,但那個錯誤不會是Error: 824, Severity: 24
,它會是Error: 3043, Severity: 16
。我目前不會對所有
Sev 16
錯誤發出警報(不想每次有人在查詢中輸入錯字時都得到一個頁面),所以我必須添加一個新警報,Error 3043
以便在發生此問題時得到通知。那麼,我最後的收穫是:如果您啟用備份校驗和,請確保您也對 Error 3043 發出警報。
一些額外的閱讀和資源:
- 備份和還原期間可能出現的介質錯誤 (SQL Server)有關備份校驗和的 MS 參考詳細資訊
- 範例損壞的數據庫和一些備份/恢復的東西要嘗試:最初由@eckes 連結,這篇 Paul Randal 文章有很好的內容,但範例是 SQL 2005。
- Brent Ozar:讓我們一起破壞 SQL Server 數據庫,第 1 部分:聚集索引。清晰的例子,感謝布倫特發布這個。如果你喜歡那個,不要錯過第 2 部分:非聚集索引和第 3 部分:檢測腐敗!
- Steve Stedman 的數據庫損壞挑戰:診斷和修復數據庫損壞方面的挑戰越來越大。發布了每個解決方案。
- DBA SE:DBCC CheckDB 會漏掉哪些類型的損壞?我可以在這裡找到最相關的相關問題。
是的,它將繼續並完成,這篇較早的博文中有一個範例。它還包含一個損壞的數據庫文件(對於舊版本)可以使用:
我認為作為 dba 模擬所有這些情況實際上非常重要,我從與客戶的經驗中知道,如果您必須在停機時間研究這些方法,這是有風險且耗時的。所以很感謝你的提問。這是使用 SQL 進行破壞的一種瘋狂/巧妙的方法: