SQL SERVER 運維日記 資料庫備份

2022-02-08 21:04:47 字數 1653 閱讀 9339

昨天下午突然看到,《爐石傳說》遊戲資料庫發生宕機並引發資料丟失事故的新聞。剛看到時,滿滿的不可思議。暴雪啊,網易啊。

都是很牛叉的公司。他們出的遊戲我都是很喜歡的。

當我看到,第一時間著手搶修,重啟伺服器,並嘗試資料恢復時,我的想法是他們的高可用方案呢?為什麼不馬上切換?

當我看到相關備份資料庫也出現故障時,就更無語了。其實這樣的事情在我們的客戶每年都會遇到很多。前不久就有乙個醫院, 資料庫和備份都同時損壞,而且沒有高可用的方案。

雖然最終幫他們修復了好資料庫,但還是丟失部分資料,而且中間1天時間,業務都是手動操作,嚴重影響業務。

對於爐石這樣的大公司,對應的方案應該是做得很全的,本次事故也可能是有其他的原因。

1.缺乏高可用方案

2.制定更好的備份的策略

1.本地的備份,放置於和資料庫檔案不同的物理磁碟

2.異機備份。使用自動同步軟體實時把備份同步到專門的nas

3.異地備份(可選)

首先,恢復模式強烈建議使用完整模式。為了保證資料庫損壞時,能最快速度恢復業務。

1.每週全備  

2.每天差異

3.每半小時日誌

備份的頻率根據具體的業務情況可自行調整。

到目前為止我們的備份策略看上去很完美了。可事實是這樣的嗎?答案是否定的。

我們做好了看似完美的備份。但是如果我們的資料庫本身已經存在頁損壞,那麼我們的做再多備份也是徒勞。因為備份的檔案也是損壞的。

那我們如何解決呢?最好的方法就是定期還原備份,然後立即執行dbcc checkdb。如果當時條件不允許持續還原和檢查,那麼使用restore verifyonly命令就是你另乙個最好的選擇了。但是restore verifyonly並不是單獨使用的。它必須配合with checksum.意思就是,在backup 的使用使用with checksum 引數,然後定期對備份的檔案執行restore verifyonly 來驗證備份檔案的有效性。如果資料庫中的某些頁面損壞,使用with checksum 去備份的作業會馬上失敗。這可以讓我們第一時間發現資料庫頁損壞的問題。

舉個栗子:

backup database adventureworks to disk = 'g:/backups/adventureworks_full.bak' with checksum

server: msg 3189, level 16, state 1, line 1 

damage to the backup set was detected. 

server: msg 3013, level 16, state 1, line 1 

verify database is terminating abnormally.

裝置 'd:\tttttt.bak' 上的介質簇的結構不正確。sql server 無法處理此介質簇。

備份有可能因為各種原因而失敗,比如備份磁碟的空間滿了,等資料庫損壞的時候,突然發現備份任務失敗了,再完美備份策略 百搭。所以對備份任務,增加郵件報警機制,如果備份失敗了,可以第一時間知道並解決。

不好的備份策略,可能導致災難性的後果。 相反好的備份策略可以讓我們高枕無憂。看到這裡的小夥伴們趕緊去檢查下,自家的備份做好了嗎?否則請自習下面武功秘籍:

SQL SERVER 運維日記 資料庫備份

昨天下午突然看到,爐石傳說 遊戲資料庫發生宕機並引發資料丟失事故的新聞。剛看到時,滿滿的不可思議。暴雪啊,網易啊。都是很牛叉的公司。他們出的遊戲我都是很喜歡的。當我看到,第一時間著手搶修,重啟伺服器,並嘗試資料恢復時,我的想法是他們的高可用方案呢?為什麼不馬上切換?當我看到相關備份資料庫也出現故障時...

SQLSERVER 運維日記 資料庫狀態

新年伊始,小夥伴是不是還處於假期綜合症的狀態。我們在日常運維資料庫的時候,會時常檢視資料庫的狀態,檢查資料庫是否正常執行。對於這些狀態的熟悉對於我們處理資料庫無法訪問的 問題非常重要。當資料庫突然變成乙個你沒有見到過的狀態時,你就會非常慌亂,手足無措。這裡給小夥伴普及下資料庫的各個狀態。已經他們是怎...

SQL SERVER運維日記 收縮資料庫

先檢查下,有沒有可以刪除的不用的檔案,結果都是重要的或者拿不準的。先收縮下資料庫吧,點選執行。等收縮完成就可以繼續去根hr妹妹聊天了。突然 座機和手機齊鳴,小王心裡一種不祥的預感呢?好像這個場景在 見過。不會是資料庫阻塞了吧?手忙腳亂的先接起手機,因為來電顯示是某業務部門主管 小王啊,現在系統卡死了...