暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

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

SQLServer走起 2020-09-06
3942

前言:数据库越大,使用时间越长,貌似稳定性也在逐步下降。数据页逻辑错误,可能是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)的方式快速检测具体是哪个表有问题;

   此处的检测方法有局限性,初步分析如下:

  1.     如果是小表,可能在页损坏之前有类似操作,导致全部页还在缓存区中,因而select count(1)是可以获取结果的,无法判断出该表是否存页损坏;

  2.     如果IAM页中还有6:49413777的信息,且该页还在缓存区中,也是无法判断出该表是否存页损坏;

  3.     如果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)')

          

        从上图可以看出

          第一行: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、即便定位到哪些记录存在于损坏页中,也无法通过重新导入数据或重建聚集索引实现修复功能;

            文章转载自:

            https://www.cnblogs.com/diabloxl/p/3701511.html

            文章经作者授权转载,版权归原文作者所有

            图片来源于网络,侵权必删!


            文章转载自SQLServer走起,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

            评论