Sql-Server-2012

如果我使用 CONTINUE_AFTER_ERROR,我會收到 BACKUP 遇到 CHECKSUM 錯誤的通知嗎?

  • May 13, 2019

我正在為WITH CHECKSUM我們的日常 SQL 備份添加標誌,以更好地確保數據完整性。

我當然想知道是否曾經遇到過校驗和錯誤,但我也不希望我的工作在半夜陷入困境;我希望它完成備份“壞”數據庫,然後繼續備份伺服器上的其他數據庫。

如果我使用BACKUP WITH CHECKSUM, CONTINUE_AFTER_ERROR,它是否仍會拋出適當的錯誤(SEV 22Error 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 發出警報

一些額外的閱讀和資源:

是的,它將繼續並完成,這篇較早的博文中有一個範例。它還包含一個損壞的數據庫文件(對於舊版本)可以使用:

https://blogs.msdn.microsoft.com/sqlserverstorageengine/2007/04/17/example-corrupt-database-to-play-with-and-some-backuprestore-things-to-try/

我認為作為 dba 模擬所有這些情況實際上非常重要,我從與客戶的經驗中知道,如果您必須在停機時間研究這些方法,這是有風險且耗時的。所以很感謝你的提問。這是使用 SQL 進行破壞的一種瘋狂/巧妙的方法:

https://sqlblogcasts.com/blogs/tonyrogerson/archive/2007/03/10/how-to-create-a-corrupt-database-using-bulk-insert-update-and-bcp-sql-server-as-a-hex-editor.aspx

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