資料頁邏輯錯誤的檢查及處理方法
前言:資料庫越大,使用時間越長,貌似穩定性也在逐漸下降。資料頁邏輯錯誤,可能是DBA遇到比較棘手的問題之一,本文将基于實戰模式給出一些檢查及處理的方法。當然,任何方法都是受制于環境的限制,本文中介紹的方法也隻适用于某些特定環境,僅供參考;
===================華麗麗的分割線========================
前幾天碰到一個錯誤,具體資訊如下:
SQL Server 檢測到基于一緻性的邏輯 I/O 錯誤 pageid 不正确(應為 6:49413777,但實際為 0:0)。在檔案 'M:\SQLDATA\Pk_4.ndf' 中、偏移量為 0x00005e3fd22000 的位置對資料庫 ID 5 中的頁 (6:49413777) 執行 讀取 期間,發生了該錯誤。SQL Server 錯誤日志或系統事件日志
或許這是DBA遇到比較棘手的問題之一了。萬幸的是,發生錯誤的資料庫是一個事務複制環境中的訂閱庫,而且有負載均衡扛着,基本上對業務沒有影響;
1、發現該錯誤後,第一反應是存儲(樓主的土豪公司用的是IO卡)出現邏輯錯誤,嘗試手動重新開機伺服器,讓IO卡進行自檢;進入系統後,發現問題沒有解決;
這一步,在IO卡自檢完成進入系統後,需要進一步使用廠商提供的監控程式檢查IO卡是否有實體壞塊,并收集相關日志。經過其他同僚檢查,IO卡沒有異常報錯;
2、通過我們的監控工具定位到publication是位于Publisher_A的pk_order_BEQ_new,該publication中涉及3個表
Order_A \ Order_B \ Order_C
3、在出現問題的機器上(以下稱為subscriber_A)通過select count(1) from table_name(nolock)的方式快速檢測具體是哪個表有問題;
此處的檢測方法有局限性,初步分析如下:
a) 如果是小表,可能在頁損壞之前有類似操作,導緻全部頁還在緩存區中,因而select count(1)是可以擷取結果的,無法判斷出該表是否存頁損壞;
b) 如果IAM頁中還有6:49413777的資訊,且該頁還在緩存區中,也是無法判斷出該表是否存頁損壞;
c) 如果IAM頁中沒有6:49413777的資訊,則select count(1)的時候會跳過已損壞的頁,仍然可以擷取結果,也是無法判斷出該表是否存頁損壞;
隻有當IAM頁中有6:49413777的資訊,而該頁又被交換出緩存區,需要進行實體讀的時候,才會導緻select count(1)無法擷取結果,具體情況如下:
此處檢測 Order_A正常,Order_B報錯;但這隻能證明Order_B表确實存在損壞的頁,而Order_A卻不能斷定一定是正常的;
當時的檢測辦法隻是按照select count(1)的方式,判斷出Order_B表存在壞頁;但實際上,可以從Publisher_A的distribution.dbo.msrepl_errors中擷取目前由複制引起的無法寫入損壞頁的XACT_Seqno,進而通過sp_browsereplcmds ‘XACT_Seqno’,’ XACT_Seqno’,及command_id定位到具體引起該錯誤的對象名、操作類型和主鍵值;
但此方法也有弊端,由于頁中可能存在多條記錄,如果是頁頭損壞,将導緻該頁中的所有記錄都無法讀取,而msrepl_errors重試間隔大約1分鐘,是以通過此方法确定損壞的資料頁較慢;
4、通過distribution.dbo.msrepl_errors定位到orderexpend_pop表也存在損壞頁,并定位到是由delete操作發現異常,是以修改subscriber_A上相應的複制存儲過程;
之前采用的僅屏蔽掉IF部分的做法在此處并不适用,因為delete時的傳回資訊并不再是“影響0行記錄”,而是由于頁損壞導緻記錄無法找到并删除;
delete [dbo].[Order_A]
where [Id] = @pkc1
--if @@rowcount = 0
-- if @@microsoftversion>0x07320000
-- exec sp_MSreplraiserror 20598
此處為了友善後面定位可能出現的損壞頁,修改存儲過程如下:
先建立記錄表monitor.dbo.tmp_byxl_Order_A_20140428
--CREATE TABLE monitor.dbo.tmp_byxl_Order_A_20140428 (id BIGINT,checkdate DATETIME DEFAULT GETDATE())
--再修改存儲過程
INSERT INTO monitor.dbo.tmp_byxl_Order_A_20140428(id) VALUES(@pkc1)
RETURN;
-- delete [dbo].[Order_A]
--where [Id] = @pkc1
--if @@rowcount = 0
-- if @@microsoftversion>0x07320000
-- exec sp_MSreplraiserror 20598
此處修改的目的:盡快跳過相應的删除操作,使Publisher_A的複制指令不緻于積壓的過多;
對于update和insert操作也應進行相應的修改,否則将導緻後續指令延遲;
5、考慮到DBCC checktable在執行修複時需要将資料庫改為單使用者模式,影響使用者通路,是以不作為首選修複方案;
由于subscriber_A是負載中的讀庫,是以首先将該伺服器脫離負載環境,同時檢查是否有通過IP直連資料庫的應用,協調切串;
如果直連的應用較多,短期内無法将連接配接串切走,可以先從上級分發重新複制一份不更名的表到subscriber_A,待資料同步後添加索引及相應的權限,再從Publisher_A上停止這個表的寫入,摘除複制後交換subscriber_A的表名,重新搭建不初始化訂閱的複制關系;這樣可以在繼續讀取舊表大部分資料的同時完成新表的初始化工作,唯一受影響的除了磁盤空間外,還有初始過程中的IO開銷;
需要注意的是,如果publication中包含多個表,且上級釋出伺服器Publisher_A為SQLSERVER 2008 R2,則需要這個publication下所有的表都要重新初始化到新表;
由于08 R2版本在删除article時會導緻複制事務丢失的BUG,是以,隻能按publication整體删除訂閱,是以需要以publication為機關進行資料初始化;
關于如何實作複制訂閱端更名的表,可以看一下我之前的blog《Replication的犄角旮旯(一)--變更訂閱端表名的應用場景》
6、繼續對損壞頁進行定位,一種方法是通過DBCC CHECKTABLE,另一種方法是通過DBCC IND檢索頁的連續性;
create table dbcc_ind
(
PageFID numeric(20),
PagePID numeric(20),
IAMFID numeric(20),
IAMPID numeric(20),
ObjectID numeric(20),
IndexID numeric(20),
PartitionNumber numeric(20),
PartitionID numeric(20),
iam_chain_type nvarchar(100),
PageType numeric(20),
IndexLevel numeric(20),
NextPageFID numeric(20),
NextPagePID numeric(20),
PrevPageFID numeric(20),
PrevPagePID numeric(20)
)
INSERT dbcc_ind
EXEC ('DBCC IND(Pk,Order_A,1)')
View Code
從上圖可以看出
第一行:PagePID=49413776,NextPagePID=49413777
第二行:PagePID=49413778,PrevPagePID=49413777
從49413776~49413778是本應該是連續的3個頁,但由于49413777頁損壞,無法讀取其資訊,是以缺少PagePID=49413777的記錄;
7、使用DBCC PAGE對6:49413777檢查,頁頭部資訊已無法正确讀取;注意下圖中紅色框内的資訊
8、建立資料庫快照并備份資料庫(為了後續測試),使用DBCC CHECKTABLE(添加noindex 、with physical_only參數提高檢查效率)檢查Order_A表;用時4分鐘(2KW行記錄,資料+索引約60G),檢測結果如下:
以下測試是基于我們的一種假設,如果頁損壞發生在寫庫上(沒有其他的資料副本),想要不丢失資料的修複變得十分困難;
另外,就是我們剛更新的SQL 2012的寫庫由于有windows 2012的跨子網群集的支援,配合某C的儲存設備(基于存儲底層的block級鏡像),可實作跨機房的災備;
但對于上述問題,資料是否就安全呢?
9、将資料備份恢複到某C裝置,通過其磁盤塊的鏡像機制同步到備用端,再啟用備用節點,發現并不能使邏輯錯誤消除;
分析原因:基于存儲底層的block級鏡像隻是從底層對塊進行複制,而無法驗證資料邏輯級别的錯誤,是以損壞的頁并不能是以得到修複;
是以,建議對使用C裝置的庫還需要使用alwayson或鏡像做一級保護,alwayson和鏡像中的頁修複功能可以最大限度修複此類錯誤;
10、對subscriber_A做DBCC CHECKTABE,注意修改為single_user模式,先選用repair_rebuilt模式,執行15分鐘後,提示無法進行修複;
1 消息 8939,級别 16,狀态 5,第 2 行
2 表錯誤: 對象 ID 0,索引 ID -1,分區 ID 0,配置設定單元 ID 0 (類型為 Unknown),頁 (6:16320656)。測試(m_headerVersion == HEADER_7_0)失敗。值為 0 和 1。
3 DBCC 語句的修複級别導緻避開了此修複。
4 消息 8939,級别 16,狀态 6,第 2 行
5 表錯誤: 對象 ID 0,索引 ID -1,分區 ID 0,配置設定單元 ID 0 (類型為 Unknown),頁 (6:16320656)。測試((m_type >= DATA_PAGE && m_type <= UNDOFILE_HEADER_PAGE) || (m_type == UNKNOWN_PAGE && level == BASIC_HEADER))失敗。值為 0 和 0。
6 修複此錯誤要求首先修正其他錯誤。
7 消息 8939,級别 16,狀态 7,第 2 行
8 表錯誤: 對象 ID 0,索引 ID -1,分區 ID 0,配置設定單元 ID 0 (類型為 Unknown),頁 (6:16320656)。測試(m_freeData >= PageHeaderOverhead () && m_freeData <= (UINT)PAGESIZE - m_slotCnt * sizeof (Slot))失敗。值為 0 和 8192。
9 修複此錯誤要求首先修正其他錯誤。
10 消息 8909,級别 16,狀态 1,第 2 行
11 表錯誤: 對象 ID 0,索引 ID -1,分區 ID 0,配置設定單元 ID 0 (類型為 Unknown),頁 ID (6:49413777) 在其頁頭中包含錯誤的頁 ID。頁頭中的 PageId 為 (0:0)。
12 DBCC 語句的修複級别導緻避開了此修複。
13 消息 8909,級别 16,狀态 1,第 2 行
14 表錯誤: 對象 ID 0,索引 ID -1,分區 ID 0,配置設定單元 ID 0 (類型為 Unknown),頁 ID (6:49430702) 在其頁頭中包含錯誤的頁 ID。頁頭中的 PageId 為 (0:0)。
15 DBCC 語句的修複級别導緻避開了此修複。
16 消息 8909,級别 16,狀态 1,第 2 行
17 表錯誤: 對象 ID 0,索引 ID -1,分區 ID 0,配置設定單元 ID 0 (類型為 Unknown),頁 ID (6:49478961) 在其頁頭中包含錯誤的頁 ID。頁頭中的 PageId 為 (0:0)。
18 DBCC 語句的修複級别導緻避開了此修複。
19 消息 8909,級别 16,狀态 1,第 2 行
20 表錯誤: 對象 ID 0,索引 ID -1,分區 ID 0,配置設定單元 ID 0 (類型為 Unknown),頁 ID (6:49895141) 在其頁頭中包含錯誤的頁 ID。頁頭中的 PageId 為 (0:0)。
21 DBCC 語句的修複級别導緻避開了此修複。
22 CHECKTABLE 發現有 0 個配置設定錯誤和 7 個一緻性錯誤與任何單個的對象都沒有關聯。
23 Order_A的 DBCC 結果。
24 消息 8928,級别 16,狀态 1,第 2 行
25 對象 ID 300580159,索引 ID 1,分區 ID 72057594125221888,配置設定單元 ID 72057594134265856 (類型為 In-row data): 無法處理頁 (6:49413777)。有關詳細資訊,請參閱其他錯誤消息。
26 DBCC 語句的修複級别導緻避開了此修複。
27 消息 8976,級别 16,狀态 1,第 2 行
28 表錯誤: 對象 ID 300580159,索引 ID 1,分區 ID 72057594125221888,配置設定單元 ID 72057594134265856 (類型為 In-row data)。在掃描過程中未發現頁 (6:49413777),但該頁的父級 (7:49486993) 和上一頁 (6:49413776) 都引用了它。請檢查以前的錯誤消息。
29 修複此錯誤要求首先修正其他錯誤。
30 消息 8978,級别 16,狀态 1,第 2 行
31 表錯誤: 對象 ID 300580159,索引 ID 1,分區 ID 72057594125221888,配置設定單元 ID 72057594134265856 (類型為 In-row data)。頁 (6:49413778) 缺少上一頁 (6:49413777) 對它的引用。可能是鍊連結有問題。
32 修複此錯誤要求首先修正其他錯誤。
33 消息 8928,級别 16,狀态 1,第 2 行
34 對象 ID 300580159,索引 ID 1,分區 ID 72057594125221888,配置設定單元 ID 72057594134265856 (類型為 In-row data): 無法處理頁 (6:49478961)。有關詳細資訊,請參閱其他錯誤消息。
35 修複此錯誤要求首先修正其他錯誤。
36 消息 8976,級别 16,狀态 1,第 2 行
37 表錯誤: 對象 ID 300580159,索引 ID 1,分區 ID 72057594125221888,配置設定單元 ID 72057594134265856 (類型為 In-row data)。在掃描過程中未發現頁 (6:49478961),但該頁的父級 (7:49537707) 和上一頁 (6:49478960) 都引用了它。請檢查以前的錯誤消息。
38 修複此錯誤要求首先修正其他錯誤。
39 消息 8978,級别 16,狀态 1,第 2 行
40 表錯誤: 對象 ID 300580159,索引 ID 1,分區 ID 72057594125221888,配置設定單元 ID 72057594134265856 (類型為 In-row data)。頁 (6:49478962) 缺少上一頁 (6:49478961) 對它的引用。可能是鍊連結有問題。
41 修複此錯誤要求首先修正其他錯誤。
42 消息 8928,級别 16,狀态 1,第 2 行
43 對象 ID 300580159,索引 ID 1,分區 ID 72057594125221888,配置設定單元 ID 72057594134265856 (類型為 In-row data): 無法處理頁 (6:49841633)。有關詳細資訊,請參閱其他錯誤消息。
44 修複此錯誤要求首先修正其他錯誤。
45 消息 8939,級别 16,狀态 98,第 2 行
46 表錯誤: 對象 ID 300580159,索引 ID 1,分區 ID 72057594125221888,配置設定單元 ID 72057594134265856 (類型為 In-row data),頁 (6:49841633)。測試(IS_OFF (BUF_IOERR, pBUF->bstat))失敗。值為 2057 和 -4。
47 修複此錯誤要求首先修正其他錯誤。
48 消息 8976,級别 16,狀态 1,第 2 行
49 表錯誤: 對象 ID 300580159,索引 ID 1,分區 ID 72057594125221888,配置設定單元 ID 72057594134265856 (類型為 In-row data)。在掃描過程中未發現頁 (6:49841633),但該頁的父級 (7:49917538) 和上一頁 (6:49841632) 都引用了它。請檢查以前的錯誤消息。
50 修複此錯誤要求首先修正其他錯誤。
51 消息 8978,級别 16,狀态 1,第 2 行
52 表錯誤: 對象 ID 300580159,索引 ID 1,分區 ID 72057594125221888,配置設定單元 ID 72057594134265856 (類型為 In-row data)。頁 (6:49841634) 缺少上一頁 (6:49841633) 對它的引用。可能是鍊連結有問題。
53 修複此錯誤要求首先修正其他錯誤。
54 消息 8928,級别 16,狀态 1,第 2 行
55 對象 ID 300580159,索引 ID 1,分區 ID 72057594125221888,配置設定單元 ID 72057594134265856 (類型為 In-row data): 無法處理頁 (6:49895141)。有關詳細資訊,請參閱其他錯誤消息。
56 修複此錯誤要求首先修正其他錯誤。
57 消息 8976,級别 16,狀态 1,第 2 行
58 表錯誤: 對象 ID 300580159,索引 ID 1,分區 ID 72057594125221888,配置設定單元 ID 72057594134265856 (類型為 In-row data)。在掃描過程中未發現頁 (6:49895141),但該頁的父級 (6:49912485) 和上一頁 (6:49895140) 都引用了它。請檢查以前的錯誤消息。
59 修複此錯誤要求首先修正其他錯誤。
60 消息 8978,級别 16,狀态 1,第 2 行
61 表錯誤: 對象 ID 300580159,索引 ID 1,分區 ID 72057594125221888,配置設定單元 ID 72057594134265856 (類型為 In-row data)。頁 (6:49895142) 缺少上一頁 (6:49895141) 對它的引用。可能是鍊連結有問題。
62 修複此錯誤要求首先修正其他錯誤。
63 消息 8928,級别 16,狀态 1,第 2 行
64 對象 ID 300580159,索引 ID 2,分區 ID 72057594132299776,配置設定單元 ID 72057594142720000 (類型為 In-row data): 無法處理頁 (6:16320656)。有關詳細資訊,請參閱其他錯誤消息。
65 DBCC 語句的修複級别導緻避開了此修複。
66 消息 8976,級别 16,狀态 1,第 2 行
67 表錯誤: 對象 ID 300580159,索引 ID 2,分區 ID 72057594132299776,配置設定單元 ID 72057594142720000 (類型為 In-row data)。在掃描過程中未發現頁 (6:16320656),但該頁的父級 (7:16360354) 和上一頁 (7:50019300) 都引用了它。請檢查以前的錯誤消息。
68 修複此錯誤要求首先修正其他錯誤。
69 消息 8978,級别 16,狀态 1,第 2 行
70 表錯誤: 對象 ID 300580159,索引 ID 2,分區 ID 72057594132299776,配置設定單元 ID 72057594142720000 (類型為 In-row data)。頁 (6:49412182) 缺少上一頁 (6:49430702) 對它的引用。可能是鍊連結有問題。
71 修複此錯誤要求首先修正其他錯誤。
72 消息 8928,級别 16,狀态 1,第 2 行
73 對象 ID 300580159,索引 ID 2,分區 ID 72057594132299776,配置設定單元 ID 72057594142720000 (類型為 In-row data): 無法處理頁 (6:49430702)。有關詳細資訊,請參閱其他錯誤消息。
74 修複此錯誤要求首先修正其他錯誤。
75 消息 8976,級别 16,狀态 1,第 2 行
76 表錯誤: 對象 ID 300580159,索引 ID 2,分區 ID 72057594132299776,配置設定單元 ID 72057594142720000 (類型為 In-row data)。在掃描過程中未發現頁 (6:49430702),但該頁的父級 (6:49434625) 和上一頁 (6:49433061) 都引用了它。請檢查以前的錯誤消息。
77 修複此錯誤要求首先修正其他錯誤。
78 消息 8978,級别 16,狀态 1,第 2 行
79 表錯誤: 對象 ID 300580159,索引 ID 2,分區 ID 72057594132299776,配置設定單元 ID 72057594142720000 (類型為 In-row data)。頁 (7:50019299) 缺少上一頁 (6:16320656) 對它的引用。可能是鍊連結有問題。
80 修複此錯誤要求首先修正其他錯誤。
81 對象 'Order_A' 的 4214698 頁中有 200428357 行。
82 CHECKTABLE 在表 'Order_A' (對象 ID 300580159)中發現 0 個配置設定錯誤和 19 個一緻性錯誤。
83 對于由 DBCC CHECKTABLE (Pk.dbo.Order_A, repair_rebuild)發現的錯誤,repair_allow_data_loss 是最低的修複級别。
84 DBCC 執行完畢。如果 DBCC 輸出了錯誤資訊,請與系統管理者聯系。
11、繼續通過repair_allow_data_loss模式進行修複,執行約1小時後修複完畢,丢失記錄10條;
1 消息 8939,級别 16,狀态 5,第 1 行
2 表錯誤: 對象 ID 0,索引 ID -1,分區 ID 0,配置設定單元 ID 0 (類型為 Unknown),頁 (6:16320656)。測試(m_headerVersion == HEADER_7_0)失敗。值為 0 和 1。
3 該錯誤已修複。
4 消息 8939,級别 16,狀态 6,第 1 行
5 表錯誤: 對象 ID 0,索引 ID -1,分區 ID 0,配置設定單元 ID 0 (類型為 Unknown),頁 (6:16320656)。測試((m_type >= DATA_PAGE && m_type <= UNDOFILE_HEADER_PAGE) || (m_type == UNKNOWN_PAGE && level == BASIC_HEADER))失敗。值為 0 和 0。
6 該錯誤已修複。
7 消息 8939,級别 16,狀态 7,第 1 行
8 表錯誤: 對象 ID 0,索引 ID -1,分區 ID 0,配置設定單元 ID 0 (類型為 Unknown),頁 (6:16320656)。測試(m_freeData >= PageHeaderOverhead () && m_freeData <= (UINT)PAGESIZE - m_slotCnt * sizeof (Slot))失敗。值為 0 和 8192。
9 該錯誤已修複。
10 消息 8909,級别 16,狀态 1,第 1 行
11 表錯誤: 對象 ID 0,索引 ID -1,分區 ID 0,配置設定單元 ID 0 (類型為 Unknown),頁 ID (6:49413777) 在其頁頭中包含錯誤的頁 ID。頁頭中的 PageId 為 (0:0)。
12 該錯誤已修複。
13 消息 8909,級别 16,狀态 1,第 1 行
14 表錯誤: 對象 ID 0,索引 ID -1,分區 ID 0,配置設定單元 ID 0 (類型為 Unknown),頁 ID (6:49430702) 在其頁頭中包含錯誤的頁 ID。頁頭中的 PageId 為 (0:0)。
15 該錯誤已修複。
16 消息 8909,級别 16,狀态 1,第 1 行
17 表錯誤: 對象 ID 0,索引 ID -1,分區 ID 0,配置設定單元 ID 0 (類型為 Unknown),頁 ID (6:49478961) 在其頁頭中包含錯誤的頁 ID。頁頭中的 PageId 為 (0:0)。
18 該錯誤已修複。
19 消息 8909,級别 16,狀态 1,第 1 行
20 表錯誤: 對象 ID 0,索引 ID -1,分區 ID 0,配置設定單元 ID 0 (類型為 Unknown),頁 ID (6:49895141) 在其頁頭中包含錯誤的頁 ID。頁頭中的 PageId 為 (0:0)。
21 該錯誤已修複。
22 CHECKTABLE 發現有 0 個配置設定錯誤和 7 個一緻性錯誤與任何單個的對象都沒有關聯。
23 CHECKTABLE 修複了 0 個配置設定錯誤和 7 個一緻性錯誤,這些錯誤不與任何單個對象相關聯。
24 Order_A的 DBCC 結果。
25 修複: 已為資料庫 'Pk' 中的對象 'dbo.Order_A' 成功地重新生成了 Clustered 索引。
26 修複: 頁 (6:49413777) 已從對象 ID 300580159,索引 ID 1,分區 ID 72057594125221888,配置設定單元 ID 72057594134265856 (類型為 In-row data)釋放。
27 修複: 頁 (6:49478961) 已從對象 ID 300580159,索引 ID 1,分區 ID 72057594125221888,配置設定單元 ID 72057594134265856 (類型為 In-row data)釋放。
28 修複: 頁 (6:49841633) 已從對象 ID 300580159,索引 ID 1,分區 ID 72057594125221888,配置設定單元 ID 72057594134265856 (類型為 In-row data)釋放。
29 修複: 頁 (6:49895141) 已從對象 ID 300580159,索引 ID 1,分區 ID 72057594125221888,配置設定單元 ID 72057594134265856 (類型為 In-row data)釋放。
30 修複: 已為資料庫 'Pk' 中的對象 'dbo.Order_A, idx_Order_A_ck_new_orderid' 成功地重新生成了 Nonclustered 索引。
31 修複: 頁 (6:16320656) 已從對象 ID 300580159,索引 ID 2,分區 ID 72057594132299776,配置設定單元 ID 72057594142720000 (類型為 In-row data)釋放。
32 修複: 頁 (6:49430702) 已從對象 ID 300580159,索引 ID 2,分區 ID 72057594132299776,配置設定單元 ID 72057594142720000 (類型為 In-row data)釋放。
33 修複: 已為資料庫 'Pk' 中的對象 'dbo.Order_A, idx_Order_A_venderid_orderid' 成功地重新生成了 Nonclustered 索引。
34 消息 8945,級别 16,狀态 1,第 1 行
35 表錯誤: 将重新生成對象 ID 300580159,索引 ID 1。
36 該錯誤已修複。
37 消息 8928,級别 16,狀态 1,第 1 行
38 對象 ID 300580159,索引 ID 1,分區 ID 72057594125221888,配置設定單元 ID 72057594134265856 (類型為 In-row data): 無法處理頁 (6:49413777)。有關詳細資訊,請參閱其他錯誤消息。
39 該錯誤已修複。
40 消息 8976,級别 16,狀态 1,第 1 行
41 表錯誤: 對象 ID 300580159,索引 ID 1,分區 ID 72057594125221888,配置設定單元 ID 72057594134265856 (類型為 In-row data)。在掃描過程中未發現頁 (6:49413777),但該頁的父級 (7:49486993) 和上一頁 (6:49413776) 都引用了它。請檢查以前的錯誤消息。
42 該錯誤已修複。
43 消息 8978,級别 16,狀态 1,第 1 行
44 表錯誤: 對象 ID 300580159,索引 ID 1,分區 ID 72057594125221888,配置設定單元 ID 72057594134265856 (類型為 In-row data)。頁 (6:49413778) 缺少上一頁 (6:49413777) 對它的引用。可能是鍊連結有問題。
45 該錯誤已修複。
46 消息 8928,級别 16,狀态 1,第 1 行
47 對象 ID 300580159,索引 ID 1,分區 ID 72057594125221888,配置設定單元 ID 72057594134265856 (類型為 In-row data): 無法處理頁 (6:49478961)。有關詳細資訊,請參閱其他錯誤消息。
48 該錯誤已修複。
49 消息 8976,級别 16,狀态 1,第 1 行
50 表錯誤: 對象 ID 300580159,索引 ID 1,分區 ID 72057594125221888,配置設定單元 ID 72057594134265856 (類型為 In-row data)。在掃描過程中未發現頁 (6:49478961),但該頁的父級 (7:49537707) 和上一頁 (6:49478960) 都引用了它。請檢查以前的錯誤消息。
51 該錯誤已修複。
52 消息 8978,級别 16,狀态 1,第 1 行
53 表錯誤: 對象 ID 300580159,索引 ID 1,分區 ID 72057594125221888,配置設定單元 ID 72057594134265856 (類型為 In-row data)。頁 (6:49478962) 缺少上一頁 (6:49478961) 對它的引用。可能是鍊連結有問題。
54 該錯誤已修複。
55 消息 8928,級别 16,狀态 1,第 1 行
56 對象 ID 300580159,索引 ID 1,分區 ID 72057594125221888,配置設定單元 ID 72057594134265856 (類型為 In-row data): 無法處理頁 (6:49841633)。有關詳細資訊,請參閱其他錯誤消息。
57 該錯誤已修複。
58 消息 8939,級别 16,狀态 98,第 1 行
59 表錯誤: 對象 ID 300580159,索引 ID 1,分區 ID 72057594125221888,配置設定單元 ID 72057594134265856 (類型為 In-row data),頁 (6:49841633)。測試(IS_OFF (BUF_IOERR, pBUF->bstat))失敗。值為 2057 和 -4。
60 該錯誤已修複。
61 消息 8976,級别 16,狀态 1,第 1 行
62 表錯誤: 對象 ID 300580159,索引 ID 1,分區 ID 72057594125221888,配置設定單元 ID 72057594134265856 (類型為 In-row data)。在掃描過程中未發現頁 (6:49841633),但該頁的父級 (7:49917538) 和上一頁 (6:49841632) 都引用了它。請檢查以前的錯誤消息。
63 該錯誤已修複。
64 消息 8978,級别 16,狀态 1,第 1 行
65 表錯誤: 對象 ID 300580159,索引 ID 1,分區 ID 72057594125221888,配置設定單元 ID 72057594134265856 (類型為 In-row data)。頁 (6:49841634) 缺少上一頁 (6:49841633) 對它的引用。可能是鍊連結有問題。
66 該錯誤已修複。
67 消息 8928,級别 16,狀态 1,第 1 行
68 對象 ID 300580159,索引 ID 1,分區 ID 72057594125221888,配置設定單元 ID 72057594134265856 (類型為 In-row data): 無法處理頁 (6:49895141)。有關詳細資訊,請參閱其他錯誤消息。
69 該錯誤已修複。
70 消息 8976,級别 16,狀态 1,第 1 行
71 表錯誤: 對象 ID 300580159,索引 ID 1,分區 ID 72057594125221888,配置設定單元 ID 72057594134265856 (類型為 In-row data)。在掃描過程中未發現頁 (6:49895141),但該頁的父級 (6:49912485) 和上一頁 (6:49895140) 都引用了它。請檢查以前的錯誤消息。
72 該錯誤已修複。
73 消息 8978,級别 16,狀态 1,第 1 行
74 表錯誤: 對象 ID 300580159,索引 ID 1,分區 ID 72057594125221888,配置設定單元 ID 72057594134265856 (類型為 In-row data)。頁 (6:49895142) 缺少上一頁 (6:49895141) 對它的引用。可能是鍊連結有問題。
75 該錯誤已修複。
76 消息 8945,級别 16,狀态 1,第 1 行
77 表錯誤: 将重新生成對象 ID 300580159,索引 ID 2。
78 該錯誤已修複。
79 消息 8928,級别 16,狀态 1,第 1 行
80 對象 ID 300580159,索引 ID 2,分區 ID 72057594132299776,配置設定單元 ID 72057594142720000 (類型為 In-row data): 無法處理頁 (6:16320656)。有關詳細資訊,請參閱其他錯誤消息。
81 該錯誤已修複。
82 消息 8976,級别 16,狀态 1,第 1 行
83 表錯誤: 對象 ID 300580159,索引 ID 2,分區 ID 72057594132299776,配置設定單元 ID 72057594142720000 (類型為 In-row data)。在掃描過程中未發現頁 (6:16320656),但該頁的父級 (7:16360354) 和上一頁 (7:50019300) 都引用了它。請檢查以前的錯誤消息。
84 該錯誤已修複。
85 消息 8978,級别 16,狀态 1,第 1 行
86 表錯誤: 對象 ID 300580159,索引 ID 2,分區 ID 72057594132299776,配置設定單元 ID 72057594142720000 (類型為 In-row data)。頁 (6:49412182) 缺少上一頁 (6:49430702) 對它的引用。可能是鍊連結有問題。
87 該錯誤已修複。
88 消息 8928,級别 16,狀态 1,第 1 行
89 對象 ID 300580159,索引 ID 2,分區 ID 72057594132299776,配置設定單元 ID 72057594142720000 (類型為 In-row data): 無法處理頁 (6:49430702)。有關詳細資訊,請參閱其他錯誤消息。
90 該錯誤已修複。
91 消息 8976,級别 16,狀态 1,第 1 行
92 表錯誤: 對象 ID 300580159,索引 ID 2,分區 ID 72057594132299776,配置設定單元 ID 72057594142720000 (類型為 In-row data)。在掃描過程中未發現頁 (6:49430702),但該頁的父級 (6:49434625) 和上一頁 (6:49433061) 都引用了它。請檢查以前的錯誤消息。
93 該錯誤已修複。
94 消息 8978,級别 16,狀态 1,第 1 行
95 表錯誤: 對象 ID 300580159,索引 ID 2,分區 ID 72057594132299776,配置設定單元 ID 72057594142720000 (類型為 In-row data)。頁 (7:50019299) 缺少上一頁 (6:16320656) 對它的引用。可能是鍊連結有問題。
96 該錯誤已修複。
97 消息 8945,級别 16,狀态 1,第 1 行
98 表錯誤: 将重新生成對象 ID 300580159,索引 ID 7。
99 該錯誤已修複。
100 對象 'Order_A' 的 4214698 頁中有 200428357 行。
101 CHECKTABLE 在表 'Order_A' (對象 ID 300580159)中發現 0 個配置設定錯誤和 19 個一緻性錯誤。
102 CHECKTABLE 在表 'Order_A' (對象 ID 300580159)中修複了 0 個配置設定錯誤和 19 個一緻性錯誤。
103 DBCC 執行完畢。如果 DBCC 輸出了錯誤資訊,請與系統管理者聯系。
結論:
1、建議對寫庫搭建同步的鏡像或alwayson環境(優先選用同步模式),以最大限度的保證資料不丢失;
2、如讀庫遇到此類問題,先重新開機伺服器,讓儲存設備自檢,确認無法修複的,再進行脫離負載、通知研發切串的操作;
3、盡量避免直接DBCC CHECKTABLE的修複操作,因為這樣的操作需要在單使用者模式下執行;首選通過複制對異常的表進行更名的初始化,實作資料頁的修複;
4、即便定位到哪些記錄存在于損壞頁中,也無法通過重新導入資料或重建聚集索引實作修複功能;