数据页逻辑错误的检查及处理方法

前言:数据库越大,使用时间越长,貌似稳定性也在逐步下降。数据页逻辑错误,可能是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)失败。值为 01 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))失败。值为 00 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))失败。值为 08192 9         修复此错误要求首先修正其他错误。
10 消息 8909,级别 16,状态 1,第 211 表错误: 对象 ID 0,索引 ID -1,分区 ID 0,分配单元 ID 0 (类型为 Unknown),页 ID (6:49413777) 在其页头中包含错误的页 ID。页头中的 PageId 为 (0:0)。
12         DBCC 语句的修复级别导致避开了此修复。
13 消息 8909,级别 16,状态 1,第 214 表错误: 对象 ID 0,索引 ID -1,分区 ID 0,分配单元 ID 0 (类型为 Unknown),页 ID (6:49430702) 在其页头中包含错误的页 ID。页头中的 PageId 为 (0:0)。
15         DBCC 语句的修复级别导致避开了此修复。
16 消息 8909,级别 16,状态 1,第 217 表错误: 对象 ID 0,索引 ID -1,分区 ID 0,分配单元 ID 0 (类型为 Unknown),页 ID (6:49478961) 在其页头中包含错误的页 ID。页头中的 PageId 为 (0:0)。
18         DBCC 语句的修复级别导致避开了此修复。
19 消息 8909,级别 16,状态 1,第 220 表错误: 对象 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,第 225 对象 ID 300580159,索引 ID 1,分区 ID 72057594125221888,分配单元 ID 72057594134265856 (类型为 In-row data): 无法处理页 (6:49413777)。有关详细信息,请参阅其他错误消息。
26         DBCC 语句的修复级别导致避开了此修复。
27 消息 8976,级别 16,状态 1,第 228 表错误: 对象 ID 300580159,索引 ID 1,分区 ID 72057594125221888,分配单元 ID 72057594134265856 (类型为 In-row data)。在扫描过程中未发现页 (6:49413777),但该页的父级 (7:49486993) 和上一页 (6:49413776) 都引用了它。请检查以前的错误消息。
29         修复此错误要求首先修正其他错误。
30 消息 8978,级别 16,状态 1,第 231 表错误: 对象 ID 300580159,索引 ID 1,分区 ID 72057594125221888,分配单元 ID 72057594134265856 (类型为 In-row data)。页 (6:49413778) 缺少上一页 (6:49413777) 对它的引用。可能是链链接有问题。
32         修复此错误要求首先修正其他错误。
33 消息 8928,级别 16,状态 1,第 234 对象 ID 300580159,索引 ID 1,分区 ID 72057594125221888,分配单元 ID 72057594134265856 (类型为 In-row data): 无法处理页 (6:49478961)。有关详细信息,请参阅其他错误消息。
35         修复此错误要求首先修正其他错误。
36 消息 8976,级别 16,状态 1,第 237 表错误: 对象 ID 300580159,索引 ID 1,分区 ID 72057594125221888,分配单元 ID 72057594134265856 (类型为 In-row data)。在扫描过程中未发现页 (6:49478961),但该页的父级 (7:49537707) 和上一页 (6:49478960) 都引用了它。请检查以前的错误消息。
38         修复此错误要求首先修正其他错误。
39 消息 8978,级别 16,状态 1,第 240 表错误: 对象 ID 300580159,索引 ID 1,分区 ID 72057594125221888,分配单元 ID 72057594134265856 (类型为 In-row data)。页 (6:49478962) 缺少上一页 (6:49478961) 对它的引用。可能是链链接有问题。
41         修复此错误要求首先修正其他错误。
42 消息 8928,级别 16,状态 1,第 243 对象 ID 300580159,索引 ID 1,分区 ID 72057594125221888,分配单元 ID 72057594134265856 (类型为 In-row data): 无法处理页 (6:49841633)。有关详细信息,请参阅其他错误消息。
44         修复此错误要求首先修正其他错误。
45 消息 8939,级别 16,状态 98,第 246 表错误: 对象 ID 300580159,索引 ID 1,分区 ID 72057594125221888,分配单元 ID 72057594134265856 (类型为 In-row data),页 (6:49841633)。测试(IS_OFF (BUF_IOERR, pBUF->bstat))失败。值为 2057-447         修复此错误要求首先修正其他错误。
48 消息 8976,级别 16,状态 1,第 249 表错误: 对象 ID 300580159,索引 ID 1,分区 ID 72057594125221888,分配单元 ID 72057594134265856 (类型为 In-row data)。在扫描过程中未发现页 (6:49841633),但该页的父级 (7:49917538) 和上一页 (6:49841632) 都引用了它。请检查以前的错误消息。
50         修复此错误要求首先修正其他错误。
51 消息 8978,级别 16,状态 1,第 252 表错误: 对象 ID 300580159,索引 ID 1,分区 ID 72057594125221888,分配单元 ID 72057594134265856 (类型为 In-row data)。页 (6:49841634) 缺少上一页 (6:49841633) 对它的引用。可能是链链接有问题。
53         修复此错误要求首先修正其他错误。
54 消息 8928,级别 16,状态 1,第 255 对象 ID 300580159,索引 ID 1,分区 ID 72057594125221888,分配单元 ID 72057594134265856 (类型为 In-row data): 无法处理页 (6:49895141)。有关详细信息,请参阅其他错误消息。
56         修复此错误要求首先修正其他错误。
57 消息 8976,级别 16,状态 1,第 258 表错误: 对象 ID 300580159,索引 ID 1,分区 ID 72057594125221888,分配单元 ID 72057594134265856 (类型为 In-row data)。在扫描过程中未发现页 (6:49895141),但该页的父级 (6:49912485) 和上一页 (6:49895140) 都引用了它。请检查以前的错误消息。
59         修复此错误要求首先修正其他错误。
60 消息 8978,级别 16,状态 1,第 261 表错误: 对象 ID 300580159,索引 ID 1,分区 ID 72057594125221888,分配单元 ID 72057594134265856 (类型为 In-row data)。页 (6:49895142) 缺少上一页 (6:49895141) 对它的引用。可能是链链接有问题。
62         修复此错误要求首先修正其他错误。
63 消息 8928,级别 16,状态 1,第 264 对象 ID 300580159,索引 ID 2,分区 ID 72057594132299776,分配单元 ID 72057594142720000 (类型为 In-row data): 无法处理页 (6:16320656)。有关详细信息,请参阅其他错误消息。
65         DBCC 语句的修复级别导致避开了此修复。
66 消息 8976,级别 16,状态 1,第 267 表错误: 对象 ID 300580159,索引 ID 2,分区 ID 72057594132299776,分配单元 ID 72057594142720000 (类型为 In-row data)。在扫描过程中未发现页 (6:16320656),但该页的父级 (7:16360354) 和上一页 (7:50019300) 都引用了它。请检查以前的错误消息。
68         修复此错误要求首先修正其他错误。
69 消息 8978,级别 16,状态 1,第 270 表错误: 对象 ID 300580159,索引 ID 2,分区 ID 72057594132299776,分配单元 ID 72057594142720000 (类型为 In-row data)。页 (6:49412182) 缺少上一页 (6:49430702) 对它的引用。可能是链链接有问题。
71         修复此错误要求首先修正其他错误。
72 消息 8928,级别 16,状态 1,第 273 对象 ID 300580159,索引 ID 2,分区 ID 72057594132299776,分配单元 ID 72057594142720000 (类型为 In-row data): 无法处理页 (6:49430702)。有关详细信息,请参阅其他错误消息。
74         修复此错误要求首先修正其他错误。
75 消息 8976,级别 16,状态 1,第 276 表错误: 对象 ID 300580159,索引 ID 2,分区 ID 72057594132299776,分配单元 ID 72057594142720000 (类型为 In-row data)。在扫描过程中未发现页 (6:49430702),但该页的父级 (6:49434625) 和上一页 (6:49433061) 都引用了它。请检查以前的错误消息。
77         修复此错误要求首先修正其他错误。
78 消息 8978,级别 16,状态 1,第 279 表错误: 对象 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 输出了错误信息,请与系统管理员联系。
View Code

 

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)失败。值为 01  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))失败。值为 00  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))失败。值为 08192  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 输出了错误信息,请与系统管理员联系。
View Code

 

 

结论:

  1、建议对写库搭建同步的镜像或alwayson环境(优先选用同步模式),以最大限度的保证数据不丢失;

  2、如读库遇到此类问题,先重启服务器,让存储设备自检,确认无法修复的,再进行脱离负载、通知研发切串的操作;

  3、尽量避免直接DBCC CHECKTABLE的修复操作,因为这样的操作需要在单用户模式下执行;首选通过复制对异常的表进行更名的初始化,实现数据页的修复;

  4、即便定位到哪些记录存在于损坏页中,也无法通过重新导入数据或重建聚集索引实现修复功能;

 

posted @ 2014-04-30 15:53  我是大菠萝  Views(2378)  Comments(4Edit  收藏  举报