亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > 綜合 > 正文

當數據庫出現頁損壞或校驗和出錯時如何處理

2024-07-21 02:44:46
字體:
來源:轉載
供稿:網友

當數據庫出現頁損壞或校驗和出錯時如何處理

作者:nzperfect / perfectaction

日期:2009.09.27

Email:nzperfect@Gmail.com

最近一直在進一步學習數據庫故障的處理方面的知識,做為一個數據庫維護人員,我即期望遇到所有的數據庫出錯的案例,以增加自己的經驗,但同時又擔心遇到這樣或那樣無法處理的數據庫故障而導致數據丟失。

前幾天看到一個文章,是說一個網站管理員在招聘DBA時,提出一個問題:“如果在sql server 日志里發現一個頁損壞或是校驗和錯誤應該如何處理?”網站管理員描述,大概有90%的應聘者都會采用一個方案,用DBCC CHECKDB加上其中的一個修復選項,但其中也基本沒有人能具體解釋DBCC CHECKDB修復的過程或是工作原理及能修復到什么程度。

借助聯機文檔以及個人的一些理解和經歷,解釋一下如何面對這個問題:"當數據庫出現頁損壞或校驗和出錯時如何處理?"

首先,需要先了解DBCC CHECKDB,聯機文檔url:
http://technet.microsoft.com/zh-cn/library/ms176064.aspx

通過聯機文檔,可以得知有REPAIR_ALLOW_DATA_LOSS | REPAIR_FAST | REPAIR_REBUILD三個修復選項,而提供實際功能的只有REPAIR_ALLOW_DATA_LOSS和REPAIR_REBUILD兩個,其中REPAIR_ALLOW_DATA_LOSS 嘗試修復報告的所有錯誤,這些修復可能會導致一些數據丟失;而且REPAIR_REBUILD執行不會丟失數據的修復,包括快速修復(如修復非聚集索引中缺少的行)以及更耗時的修復(如重新生成索引);可見REPAIR_REBUILD是我們期望的。
當你從sql server log里或是在程序查詢數據庫或是定期通過DBCC CHECKDB為數據庫做體檢的時候,出現了頁損壞或校驗和出錯信息時,如:

---------------------------------------------------------------------------------------------------------------------------------
M8928sg , Level 16, State 1, Line 1
Object ID 2088535921, index ID 0, partition ID 72345201021503994, alloc unit ID 72345201051571606 (type In-row data): Page (1:94299) could not be PRocessed.  See other errors for details.
Msg 8939, Level 16, State 98, Line 1
Table error: Object ID 2088535921, index ID 0, partition ID 72345201021503994, alloc unit ID 72345201051571606 (type In-row data), page (1:94299). Test (IS_OFF (BUF_IOERR, pBUF->bstat)) failed.
CHECKDB found 0 allocation errors and 2 consistency errors in table 'yourtable' (object ID 2088535921).
CHECKDB found 0 allocation errors and 2 consistency errors in database 'yourdb'.
repair_allow_data_loss is the minimum repair level for the errors found by DBCC CHECKDB (yourdb).
---------------------------------------------------------------------------------------------------------------------------------

現在我們應該如何做?

1.通過上面的提示,告訴我們:對象 2088535921出錯,它是一個表,頁面為1:94299
2.接下來,我們判斷損壞的頁在堆上還是聚集索引還是非聚集索引,sql server方法為:

    dbcc traceon (3604, -1)
    go
    dbcc page('yourdb', 1, 94299, 3)
    go

  在輸出的結果里(會報錯,但可以看到頁頭信息),可以看到

    Metadata: IndexId = n 


  如果n是0而表示是堆,1表示是聚集索引,>1是表示非聚集索引
  ps:其實從提示信息的Object ID 2088535921, index ID 0 ,也可以簡單判斷是堆.
3.根據上面的第2步,我們知道這個頁面是堆,這對我們來講,不是好消息,因為如果是>1,我們可以刪除該非聚集索引,再重建索引,不會丟失數據,而0或1則是元數據受損,這意味著有丟失元數據的可能性。
  那么如何僅僅修復這個數據頁呢,這里我們假設該庫是full模式,并且有良好的備份策略,有全備和日志備份。
  那么我們可以進行頁面級還原操作,步驟如下:

  a.首先進行一次日志備份,如果你不放心,還可以再做一個全備;
    backup log yourdb to disk='D:/DBBak/yourdb_a.trn'
  b.通過完整備份來恢復該page. (yourdb.bak是一個全備。);
    restore database yourdb page= '1:94299' from disk='D:/DBBak/yourdb.bak' with norecovery
  c.恢復這個全備之后的差異(假設有差異yourdb.dif),如果沒有差異備,直接到d步驟;
    restore database yourdb from disk='d:/DBBak/yourdb.dif'  with norecovery
  d.恢復之后的log備份,可能有多個(假設為yourdb_1.trn,yourdb_2.trn);
    restore log yourdb from disk='d:/DBBak/yourdb_1.trn' with norecovery
    restore log yourdb from disk='d:/DBBak/yourdb_2.trn' with norecovery
    restore log yourdb from disk='d:/DBBak/yourdb_a.trn' with norecovery
  e.做一個最新的日志備;
    backup log yourdb to disk='D:/DBBak/yourdb_e.trn'
  f.還原最后的(e步驟)日志備份;
    restore log yourdb from disk='d:/DBBak/yourdb_e.trn' with recovery
  g.結束
4.經過步驟三之后,我們再來檢查一下該表是否還有錯,從提示信息Object ID 2088535921里,我們查出表名tbname;
    tbname: select object_name(2088535921)
    然后 dbcc checktable('yourtable')檢測,如果沒有報錯,則表示修復完成
5.最后,對整個庫再做一次dbcc checkdb檢查;

 

ps:需要注意的是,sql server 的page級恢復在企業版和開發版中,支持聯機恢復page數據,在標準版只能脫機修復;
在dbcc checkdb修復選項里,用repair_rebuild修復數據,聯機文檔稱是不丟失數據,但在某些環境下可能也會丟失數據,不過,我沒遇到過:)
用repair_allow_data_loss 選項時,聯機文檔稱可能會丟失數據,而對于堆或聚集索引的頁損壞,sql server 會釋放該頁面,造成數據的丟失,但repair_allow_data_loss選項有兩種情況是不會丟失數據,一種是非聚集索引上的頁錯誤,另外是 lob頁數據錯誤。

總紹:
一定要有良好的數據庫備份策略,備份重于一切;
要有異機備份,并且時時同步該備份文件;
當數據庫出現故障時,不要過于心急,冷靜分析一下錯誤;
如果不能確定如何做,可以借助google,如果你的錯誤信息里中文的,請翻譯成英文后再google,這樣搜到解決方案的可能性更大;
做修復時,一定要再備一次數據庫;
dbcc checkdb的repair_allow_data_loss選項永遠是最后的選擇。

結束,如有錯誤,請指正。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲精品久久久久久久久久久久久| 亚洲视频777| 亚洲精品网站在线播放gif| 日本成熟性欧美| 亚洲字幕在线观看| 2019日本中文字幕| 欧美成人午夜激情视频| 色综合五月天导航| 成人写真视频福利网| 亚洲国产成人精品一区二区| 欧美最近摘花xxxx摘花| 国产精品视频内| 在线播放国产一区中文字幕剧情欧美| 久久97精品久久久久久久不卡| 91精品视频在线| 上原亚衣av一区二区三区| 久久久精品一区| 亚洲欧美日韩国产成人| 国产精品久久久久久久久久小说| 成人444kkkk在线观看| 欧美激情aaaa| 国产精品第二页| 亚洲精品98久久久久久中文字幕| 国内精品美女av在线播放| 久久午夜a级毛片| 欧美人成在线视频| 欧美性高潮床叫视频| 国产91色在线| 欧美日韩国产丝袜美女| 亚洲色图激情小说| 亚洲第一色在线| 国产精品久久久久久久久久久久久久| 韩日精品中文字幕| 欧美插天视频在线播放| 久久国产精品视频| 欧美性xxxxx极品娇小| 91在线观看免费高清| 欧洲亚洲免费在线| 亚洲精品成人网| 欧美激情一区二区三区高清视频| 日韩精品在线免费| 欧美三级xxx| 亚洲精品动漫久久久久| 久久99久久99精品中文字幕| 91精品成人久久| 国产69精品久久久久9| 日韩激情视频在线播放| 粉嫩老牛aⅴ一区二区三区| 欧美激情一二区| 亚洲第一区中文字幕| 77777亚洲午夜久久多人| 久久人人爽人人爽人人片亚洲| 一区二区三区美女xx视频| 亚洲精品日韩av| 日韩视频―中文字幕| 91精品国产色综合久久不卡98口| 91亚洲va在线va天堂va国| 欧美高清视频在线| 少妇久久久久久| 91嫩草在线视频| 国产成人精品一区二区在线| 亚洲精品suv精品一区二区| 亚洲影院高清在线| 精品国产一区二区在线| 精品成人久久av| 久久免费视频在线观看| 日韩av一区二区在线| 国产精品免费一区二区三区都可以| 91精品国产色综合久久不卡98| 欧美xxxx综合视频| 国产精品成人播放| 热久久这里只有精品| 亚洲最大的免费| 久久亚洲电影天堂| 精品久久国产精品| 亚洲香蕉av在线一区二区三区| 欧美一区二区三区免费观看| 欧美电影免费播放| 国产精品国产三级国产专播精品人| 欧美精品一区三区| 成人激情视频在线观看| 亚洲综合在线中文字幕| 日韩暖暖在线视频| 久久精品国产视频| 精品视频久久久久久久| 51精品在线观看| 欧美精品国产精品日韩精品| 性色av一区二区三区在线观看| 久久综合久久美利坚合众国| 91在线网站视频| 国产精品久久久久久久久久久久久| 亚洲另类激情图| 中文字幕在线亚洲| 日韩中文字幕视频在线观看| 伊人久久五月天| 成人444kkkk在线观看| 色综合91久久精品中文字幕| 国产成人高清激情视频在线观看| 色综合91久久精品中文字幕| 亚洲国产成人在线视频| 一区二区三区视频观看| 欧美视频在线观看 亚洲欧| 欧美www视频在线观看| 久久视频在线观看免费| 中文字幕日韩在线观看| 国产精品91久久| 久久这里只有精品视频首页| 国产一区二区香蕉| 久久99国产精品自在自在app| 国产日韩视频在线观看| 欧美性猛交xxxx黑人猛交| 国产一区二区在线播放| 日本高清久久天堂| 国产精品男女猛烈高潮激情| 亚洲国产99精品国自产| 国产精品视频一区二区三区四| 麻豆成人在线看| 亚洲人成电影在线播放| 亚洲男人第一网站| 91精品国产91久久久久久| 欧美理论在线观看| 午夜精品久久久久久99热| 久久精品国产亚洲精品| 97**国产露脸精品国产| 久久中文字幕视频| 欧美一区深夜视频| 一本大道亚洲视频| 日本一区二三区好的精华液| 91精品国产免费久久久久久| 亚洲欧美日韩在线高清直播| 久久久久久久久网站| 国产精品久久久久久久久久三级| 成人精品网站在线观看| 国产精品嫩草影院久久久| 精品福利一区二区| 81精品国产乱码久久久久久| 欧美孕妇孕交黑巨大网站| 亚洲美女视频网| 俺去亚洲欧洲欧美日韩| 日韩中文字幕在线视频| 欧美视频一区二区三区…| 国产日韩在线一区| 欧美久久久精品| 在线视频国产日韩| www.精品av.com| 国产视频久久久久久久| 日韩欧美大尺度| 久久久久久九九九| 国产精品扒开腿做爽爽爽的视频| 在线观看国产成人av片| 日韩av黄色在线观看| 日韩av电影在线免费播放| 91精品久久久久| 日韩毛片中文字幕| 国产日韩专区在线| 亚洲图片在线综合| 91精品国产色综合| 孩xxxx性bbbb欧美| 欧美一级淫片videoshd| 国产日韩欧美日韩| 粉嫩av一区二区三区免费野| 国产欧美一区二区三区在线| 日产精品久久久一区二区福利| 亚洲国产高潮在线观看|