复制遇到8630错误

来源:互联网 发布:威士忌用什么杯子 知乎 编辑:程序博客网 时间:2024/03/29 14:47

环境:SQL SERVER 2005 SP3

         Windows 2003 Eenterprise Server

 

      复制出现了一点小故障,复制监视器显示一个发布下的某个订阅一直在出错重试,错误信息如下:

 

Command attempted:
if @@trancount > 0 rollback tran
(Transaction sequence number: 0x0009CC1F0000109F000100000000, Command ID: 1)

Error messages:
内部查询处理器错误: 查询处理器在执行过程中遇到意外错误。 (Source: MSSQLServer, Error number: 8630)
Get help: http://help/8630
内部查询处理器错误: 查询处理器在执行过程中遇到意外错误。 (Source: MSSQLServer, Error number: 8630)
Get help: http://help/8630

 

 

代理作业的错误信息如下

 

消息
2011-04-23 03:57:12.091 Error executing a batch of commands. Retrying individual commands.
2011-04-23 03:57:44.013 Disconnecting from Subscriber 'DB192168001028'
2011-04-23 03:57:44.013 Connecting to Subscriber 'DB192168001028'
2011-04-23 03:57:44.013 Error executing a batch of commands. Retrying individual commands.
2011-04-23 03:59:06.779 Disconnecting from Subscriber 'DB192168001028'
2011-04-23 03:59:06.779 Connecting to Subscriber 'DB192168001028'
2011-04-23 03:59:06.779 Error executing a batch of commands. Retrying individual commands.

查看下订阅端的系统日志,发现有异常,在SQLDUMP中查看发现一个表的数据页有存在不一致的问题。

 

DBCC CHECKTABLE结果如下,

Msg 8933, Level 16, State 1, Line 1
表错误: 对象 ID 111039877,索引 ID 15,分区 ID 72057598626103296,分配单元 ID 72057598631215104 (类型为 In-row data)。页 (3:6035092) 上的低键值(级别 2)不 == 父代 (3:6035107) 槽 0 中的键值。
Msg 8934, Level 16, State 2, Line 1
表错误: 对象 ID 111039877,索引 ID 15,分区 ID 72057598626103296,分配单元 ID 72057598631215104 (类型为 In-row data)。页 (3:9325720) 上的高键值(级别 0)不小于下一页 (3:6033495) 的父代 (3:6035177) 槽 0 中的低键值。
Msg 8934, Level 16, State 3, Line 1
表错误: 对象 ID 111039877,索引 ID 15,分区 ID 72057598626103296,分配单元 ID 72057598631215104 (类型为 In-row data)。页 (3:9325720) 上的高键值(级别 0)不小于下一页 (3:6033495) 的父代 (3:6035177) 槽 0 中的低键值。
对象 'Bizoffersearchby010F' 的 107715 页中有 600381 行。
CHECKTABLE 在表 'Bizoffersearchby010F' (对象 ID 111039877)中发现 0 个分配错误和 3 个一致性错误。
对于由 DBCC CHECKTABLE (searchoffer2010.dbo.Bizoffersearchby010F)发现的错误,repair_rebuild 是最低的修复级别。
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。

 

删除ID=15 的索引,问题解决。

 

PS:如果是在线的数据库且不能下线,不推荐在线checktable,可以做备份,也可以仔细分析SQLDUMP,用其它方式定位问题点。

 

SQLDUMP 文件中给出的有相应的页号,可以使用DBCC PAGE 查出相关的信息

dbcc page(7,1,1441203,3) with tableresults
.....

PAGE HEADER: Page @0x0000000A604DE000 Metadata: IndexId 0
PAGE HEADER: Page @0x0000000A604DE000 Metadata: ObjectId 111039877

.....

 

依据OBJECTID 和 indexid 查出对象和索引信息。