none
SQL Server2000 查询分析器中用select查询时会报错服务器:消息 823,级别 24,状态2,行1,连接中断 如何解决? RRS feed

  • 问题

  • 安装SQL Server 2000的服务器有次突然宕机了,重启后select *查询某张表时出现报错信息“服务器:消息 823,级别 24,状态2,行1”,请问该如何解决?现在web应用页面查询报错,无法显示数据。

    日志中错误信息:

    2013-07-16 10:34:58.46 server    错误: 17883,严重度: 1,状态: 0
    2013-07-16 10:34:58.46 server    调度程序 0 似乎已被挂起。SPID 0,ECID 0,UMS 上下文 0x00CD2870。
    2013-07-16 10:42:36.16 spid59    使用 'xpstar.dll' 版本 '2000.80.760' 来执行扩展存储过程 'sp_MSgetversion'。
    2013-07-16 10:47:39.06 spid62    错误: 823,严重度: 24,状态: 2。
    2013-07-16 10:47:39.08 spid62    错误: 823,严重度: 24,状态: 2
    2013-07-16 10:47:39.08 spid62    I/O error 23(数据错误(循环冗余检查)。) detected during read at offset 0x00000000398000 in file 'D:\MSSQL8\MSSQL\Data\vehicle_Data.MDF'.。
    2013-07-16 10:49:08.08 spid60    错误: 823,严重度: 24,状态: 2。
    2013-07-16 10:49:08.08 spid60    错误: 823,严重度: 24,状态: 2
    2013-07-16 10:49:08.08 spid60    I/O error 23(数据错误(循环冗余检查)。) detected during read at offset 0x00000000392000 in file 'D:\MSSQL8\MSSQL\Data\vehicle_Data.MDF'.。

    dbcc checktable信息:

    服务器: 消息 8966,级别 16,状态 2,行 1
    未能读取并闩锁页 (1:456)(用闩锁类型 UP)。23(数据错误(循环冗余检查)。) 失败。
    服务器: 消息 8966,级别 16,状态 1,行 1
    未能读取并闩锁页 (1:457)(用闩锁类型 UP)。23(数据错误(循环冗余检查)。) 失败。
    服务器: 消息 8966,级别 16,状态 1,行 1
    未能读取并闩锁页 (1:458)(用闩锁类型 UP)。23(数据错误(循环冗余检查)。) 失败。
    服务器: 消息 8966,级别 16,状态 1,行 1
    未能读取并闩锁页 (1:459)(用闩锁类型 UP)。23(数据错误(循环冗余检查)。) 失败。
    服务器: 消息 8966,级别 16,状态 1,行 1
    未能读取并闩锁页 (1:461)(用闩锁类型 UP)。23(数据错误(循环冗余检查)。) 失败。
    服务器: 消息 8966,级别 16,状态 1,行 1
    未能读取并闩锁页 (1:462)(用闩锁类型 UP)。23(数据错误(循环冗余检查)。) 失败。
    服务器: 消息 8966,级别 16,状态 1,行 1
    未能读取并闩锁页 (1:463)(用闩锁类型 UP)。23(数据错误(循环冗余检查)。) 失败。
    服务器: 消息 2533,级别 16,状态 1,行 1
    表错误: 未发现页 (1:456),该页分配给了对象 ID 1013578649,索引 ID 0。可能页无效或页首结构中的对象 ID 信息不正确。
    服务器: 消息 2533,级别 16,状态 1,行 1
    表错误: 未发现页 (1:457),该页分配给了对象 ID 1013578649,索引 ID 0。可能页无效或页首结构中的对象 ID 信息不正确。
    服务器: 消息 2533,级别 16,状态 1,行 1
    表错误: 未发现页 (1:458),该页分配给了对象 ID 1013578649,索引 ID 0。可能页无效或页首结构中的对象 ID 信息不正确。
    服务器: 消息 2533,级别 16,状态 1,行 1
    表错误: 未发现页 (1:459),该页分配给了对象 ID 1013578649,索引 ID 0。可能页无效或页首结构中的对象 ID 信息不正确。
    服务器: 消息 2533,级别 16,状态 1,行 1
    表错误: 未发现页 (1:461),该页分配给了对象 ID 1013578649,索引 ID 0。可能页无效或页首结构中的对象 ID 信息不正确。
    服务器: 消息 2533,级别 16,状态 1,行 1
    表错误: 未发现页 (1:462),该页分配给了对象 ID 1013578649,索引 ID 0。可能页无效或页首结构中的对象 ID 信息不正确。
    服务器: 消息 2533,级别 16,状态 1,行 1
    表错误: 未发现页 (1:463),该页分配给了对象 ID 1013578649,索引 ID 0。可能页无效或页首结构中的对象 ID 信息不正确。
    服务器: 消息 8978,级别 16,状态 1,行 1
    表错误: 对象 ID 1013578649,索引 ID 1。页 (1:455) 缺少上一页 (1:456) 对它的引用。可能是因为链的链接有问题。
    服务器: 消息 8980,级别 16,状态 1,行 1
    表错误: 对象 ID 1013578649,索引 ID 1。索引节点页 (1:147),槽 124 指向子页 (1:456) 和上一子页 (1:457),但未遇到这些页。
    服务器: 消息 8976,级别 16,状态 1,行 1
    表错误: 对象 ID 1013578649,索引 ID 1。在扫描操作中未发现页 (1:457),而其父代 (1:147) 和上一页 (1:453) 指向了该页。请检查先前的错误。
    服务器: 消息 8976,级别 16,状态 1,行 1
    表错误: 对象 ID 1013578649,索引 ID 1。在扫描操作中未发现页 (1:458),而其父代 (1:147) 和上一页 (1:455) 指向了该页。请检查先前的错误。
    服务器: 消息 8980,级别 16,状态 1,行 1
    表错误: 对象 ID 1013578649,索引 ID 1。索引节点页 (1:147),槽 127 指向子页 (1:459) 和上一子页 (1:458),但未遇到这些页。
    服务器: 消息 8980,级别 16,状态 1,行 1
    表错误: 对象 ID 1013578649,索引 ID 1。索引节点页 (1:147),槽 128 指向子页 (1:461) 和上一子页 (1:459),但未遇到这些页。
    服务器: 消息 8976,级别 16,状态 1,行 1
    表错误: 对象 ID 1013578649,索引 ID 1。在扫描操作中未发现页 (1:462),而其父代 (1:147) 和上一页 (1:522) 指向了该页。请检查先前的错误。
    服务器: 消息 8976,级别 16,状态 1,行 1
    表错误: 对象 ID 1013578649,索引 ID 1。在扫描操作中未发现页 (1:463),而其父代 (1:147) 和上一页 (1:472) 指向了该页。请检查先前的错误。
    服务器: 消息 8978,级别 16,状态 1,行 1
    表错误: 对象 ID 1013578649,索引 ID 1。页 (1:472) 缺少上一页 (1:461) 对它的引用。可能是因为链的链接有问题。
    服务器: 消息 8978,级别 16,状态 1,行 1
    表错误: 对象 ID 1013578649,索引 ID 1。页 (1:473) 缺少上一页 (1:463) 对它的引用。可能是因为链的链接有问题。
    CHECKTABLE 发现了 0 个分配错误和 7 个一致性错误,这些错误并不与任何单个的对象相关联。
    'jdo_vehicle_info' 的 DBCC 结果。
    对象 'jdo_vehicle_info' 有 3066 行,这些行位于 147 页中。
    CHECKTABLE 发现了 0 个分配错误和 17 个一致性错误(在表 'jdo_vehicle_info' 中,该表的对象 ID 为 1013578649)。
    repair_allow_data_loss 是最低的修复级别(对于由 DBCC CHECKTABLE (vehicle.dbo.jdo_vehicle_info ) 发现的错误而言)。

    • 已编辑 IT陌生人 2013年7月16日 3:01 补充错误信息
    2013年7月11日 8:05

答案

全部回复

  • 823表示数据文件中某些页被损坏。可以运行dbcc checktable进行检查,可以考虑REPAIR_ALLOW_DATA_LOSS 进行修复。不一定能够修复

    如果不能修复,可以重建该表。

    可以select top N * from ...,看能否导出部分数据。


    想不想时已是想,不如不想都不想。

    2013年7月11日 8:35
    版主
  • 楼上说的没错,先运行一下DBCC CHECHTABLE,看看是否可以修复。这种问题一般是由于IO问题导致的,可以检查一下磁盘。

    如果不能修复的话尽可能的将数据导出重建表。


    Please Mark As Answer if it is helpful.

    2013年7月12日 1:09
  •  在读取过程中对页检查逻辑一致性,在错误日志中就可以看到类似下面的信息:

    2004-06-25 11:29:04.11 spid51 错误: 823,严重性: 24 状态:2
    2004-06-25 11:29:04.11 spid51 I/O 错误(审核失败)
     在读取过程中检测到的偏移量 SQL Server\MSSQL\data\pubs.mdf e:\Program 文件中的 0x000000000b0000.

    可以尝试用下面sql语句修复

    USE nmgbt_hcxuexipos (数据库名)
    GO
    DBCC CHECKTABLE  ('表名',REPAIR_ALLOW_DATA_LOSS)
    GO
    
    

    2013年7月12日 1:15
  • 尝试修复

    拿备份准备。。


    Try SQL Server 2008 QQ:315054403 dgdba@hotmail.com

    2013年7月12日 1:17
  • 建议先把数据尽可能倒出来然后再尝试REPAIR_ALLOW_DATA_LOSS,因为REPAIR_ALLOW_DATA_LOSS即使可以修复也表示有数据的损失。这样你可以拿修复后的数据跟到处的数据合并获得更多的数据。

    另外如果有少的PAGE有问题可以尝试RESTORE PAGE。


    Please Mark As Answer if it is helpful.

    2013年7月12日 1:18
  • Can't restore page in sql2k.
    2013年7月12日 2:17
  • 延伸一下:

    --SQLSERVER常见错误解读

    --823错误
    --823错误是发出一个页面读写请求时发生的,和读写的内容没有关系
    ---,所以823错误和SQL本身没有关系。通常是物理数据文件损坏或者
    --硬件出现问题。

    --修复方法:DBCC CHECKDB很难修复


    --824错误 原因基本是I/O子系统的问题,可以负责任地说SQLSERVER自己绝少会导致824错误的
    --此错误表明Windows已经从磁盘成功读取页,但SQLSERVER检测到页中存在逻辑错误

    2013年7月12日 2:46
  • Can't restore page in sql2k.
    sql2000确实不支持页面还原
    2013年7月12日 2:53
  • 运行dbcc checktable信息如下:

    服务器: 消息 8966,级别 16,状态 2,行 1
    未能读取并闩锁页 (1:456)(用闩锁类型 UP)。23(数据错误(循环冗余检查)。) 失败。
    服务器: 消息 8966,级别 16,状态 1,行 1
    未能读取并闩锁页 (1:457)(用闩锁类型 UP)。23(数据错误(循环冗余检查)。) 失败。
    服务器: 消息 8966,级别 16,状态 1,行 1
    未能读取并闩锁页 (1:458)(用闩锁类型 UP)。23(数据错误(循环冗余检查)。) 失败。
    服务器: 消息 8966,级别 16,状态 1,行 1
    未能读取并闩锁页 (1:459)(用闩锁类型 UP)。23(数据错误(循环冗余检查)。) 失败。
    服务器: 消息 8966,级别 16,状态 1,行 1
    未能读取并闩锁页 (1:461)(用闩锁类型 UP)。23(数据错误(循环冗余检查)。) 失败。
    服务器: 消息 8966,级别 16,状态 1,行 1
    未能读取并闩锁页 (1:462)(用闩锁类型 UP)。23(数据错误(循环冗余检查)。) 失败。
    服务器: 消息 8966,级别 16,状态 1,行 1
    未能读取并闩锁页 (1:463)(用闩锁类型 UP)。23(数据错误(循环冗余检查)。) 失败。
    服务器: 消息 2533,级别 16,状态 1,行 1
    表错误: 未发现页 (1:456),该页分配给了对象 ID 1013578649,索引 ID 0。可能页无效或页首结构中的对象 ID 信息不正确。
    服务器: 消息 2533,级别 16,状态 1,行 1
    表错误: 未发现页 (1:457),该页分配给了对象 ID 1013578649,索引 ID 0。可能页无效或页首结构中的对象 ID 信息不正确。
    服务器: 消息 2533,级别 16,状态 1,行 1
    表错误: 未发现页 (1:458),该页分配给了对象 ID 1013578649,索引 ID 0。可能页无效或页首结构中的对象 ID 信息不正确。
    服务器: 消息 2533,级别 16,状态 1,行 1
    表错误: 未发现页 (1:459),该页分配给了对象 ID 1013578649,索引 ID 0。可能页无效或页首结构中的对象 ID 信息不正确。
    服务器: 消息 2533,级别 16,状态 1,行 1
    表错误: 未发现页 (1:461),该页分配给了对象 ID 1013578649,索引 ID 0。可能页无效或页首结构中的对象 ID 信息不正确。
    服务器: 消息 2533,级别 16,状态 1,行 1
    表错误: 未发现页 (1:462),该页分配给了对象 ID 1013578649,索引 ID 0。可能页无效或页首结构中的对象 ID 信息不正确。
    服务器: 消息 2533,级别 16,状态 1,行 1
    表错误: 未发现页 (1:463),该页分配给了对象 ID 1013578649,索引 ID 0。可能页无效或页首结构中的对象 ID 信息不正确。
    服务器: 消息 8978,级别 16,状态 1,行 1
    表错误: 对象 ID 1013578649,索引 ID 1。页 (1:455) 缺少上一页 (1:456) 对它的引用。可能是因为链的链接有问题。
    服务器: 消息 8980,级别 16,状态 1,行 1
    表错误: 对象 ID 1013578649,索引 ID 1。索引节点页 (1:147),槽 124 指向子页 (1:456) 和上一子页 (1:457),但未遇到这些页。
    服务器: 消息 8976,级别 16,状态 1,行 1
    表错误: 对象 ID 1013578649,索引 ID 1。在扫描操作中未发现页 (1:457),而其父代 (1:147) 和上一页 (1:453) 指向了该页。请检查先前的错误。
    服务器: 消息 8976,级别 16,状态 1,行 1
    表错误: 对象 ID 1013578649,索引 ID 1。在扫描操作中未发现页 (1:458),而其父代 (1:147) 和上一页 (1:455) 指向了该页。请检查先前的错误。
    服务器: 消息 8980,级别 16,状态 1,行 1
    表错误: 对象 ID 1013578649,索引 ID 1。索引节点页 (1:147),槽 127 指向子页 (1:459) 和上一子页 (1:458),但未遇到这些页。
    服务器: 消息 8980,级别 16,状态 1,行 1
    表错误: 对象 ID 1013578649,索引 ID 1。索引节点页 (1:147),槽 128 指向子页 (1:461) 和上一子页 (1:459),但未遇到这些页。
    服务器: 消息 8976,级别 16,状态 1,行 1
    表错误: 对象 ID 1013578649,索引 ID 1。在扫描操作中未发现页 (1:462),而其父代 (1:147) 和上一页 (1:522) 指向了该页。请检查先前的错误。
    服务器: 消息 8976,级别 16,状态 1,行 1
    表错误: 对象 ID 1013578649,索引 ID 1。在扫描操作中未发现页 (1:463),而其父代 (1:147) 和上一页 (1:472) 指向了该页。请检查先前的错误。
    服务器: 消息 8978,级别 16,状态 1,行 1
    表错误: 对象 ID 1013578649,索引 ID 1。页 (1:472) 缺少上一页 (1:461) 对它的引用。可能是因为链的链接有问题。
    服务器: 消息 8978,级别 16,状态 1,行 1
    表错误: 对象 ID 1013578649,索引 ID 1。页 (1:473) 缺少上一页 (1:463) 对它的引用。可能是因为链的链接有问题。
    CHECKTABLE 发现了 0 个分配错误和 7 个一致性错误,这些错误并不与任何单个的对象相关联。
    'jdo_vehicle_info' 的 DBCC 结果。
    对象 'jdo_vehicle_info' 有 3066 行,这些行位于 147 页中。
    CHECKTABLE 发现了 0 个分配错误和 17 个一致性错误(在表 'jdo_vehicle_info' 中,该表的对象 ID 为 1013578649)。
    repair_allow_data_loss 是最低的修复级别(对于由 DBCC CHECKTABLE (vehicle.dbo.jdo_vehicle_info ) 发现的错误而言)。

    请看看是否只能通过DBCC CHECKTABLE  ('表名',REPAIR_ALLOW_DATA_LOSS)命令来尝试修复?

    2013年7月16日 2:57
  • You have good backup?
    2013年7月16日 3:18
  • 你可以试试。至少会丢失数据。


    想不想时已是想,不如不想都不想。

    2013年7月16日 5:17
    版主
  • 有备份最好,你可以把备份还原到另一个库,然后把这个表导过来。

    想不想时已是想,不如不想都不想。

    2013年7月16日 5:18
    版主