今天碰到一个数据库问题,查询一张表的时候报错:
select top 100 * from table 没有问题;
select * from table 报下面的错误:服务器: 消息 7987,级别 22,状态 3,行 1
在数据库 'xinning' 中检测到一个可能的数据库一致性问题。应该对数据库 'xinning' 运行 DBCC CHECKDB 和 DBCC CHECKCATALOG。
再执行:dbcc checkdb(xinning) 语句报下面的提示信息:服务器: 消息 8909,级别 16,状态 1,行 1
表错误: 对象 ID -997982209,索引 ID 232,页 ID (1:4666)。页首结构中的 PageId = (34056:1972051435)。
服务器: 消息 8928,级别 16,状态 1,行 1
对象 ID 85575343,索引 ID 255: 未能处理页 (1:1632)。详细信息请参阅其它错误。
CHECKDB 发现了 0 个分配错误和 1 个一致性错误(在表 '(Object ID -997982209)' 中,该表的对象 ID 为 -997982209)。
...............................................'ipms_measure_baseinfo' 的 DBCC 结果。
服务器: 消息 8944,级别 16,状态 12,行 1
表错误: 对象 ID 85575343,索引 ID 255,页 (1:1632),行 4。测试(ColumnOffsets <= (nextRec - pRec))失败。值为 12353 和 84。
对象 'ipms_measure_baseinfo' 有 1347 行,这些行位于 52 页中。
CHECKDB 发现了 0 个分配错误和 2 个一致性错误(在表 'ipms_measure_baseinfo' 中,该表的对象 ID 为 85575343)。
数据库
select top 100 * from table 没有问题;
select * from table 报下面的错误:服务器: 消息 7987,级别 22,状态 3,行 1
在数据库 'xinning' 中检测到一个可能的数据库一致性问题。应该对数据库 'xinning' 运行 DBCC CHECKDB 和 DBCC CHECKCATALOG。
再执行:dbcc checkdb(xinning) 语句报下面的提示信息:服务器: 消息 8909,级别 16,状态 1,行 1
表错误: 对象 ID -997982209,索引 ID 232,页 ID (1:4666)。页首结构中的 PageId = (34056:1972051435)。
服务器: 消息 8928,级别 16,状态 1,行 1
对象 ID 85575343,索引 ID 255: 未能处理页 (1:1632)。详细信息请参阅其它错误。
CHECKDB 发现了 0 个分配错误和 1 个一致性错误(在表 '(Object ID -997982209)' 中,该表的对象 ID 为 -997982209)。
...............................................'ipms_measure_baseinfo' 的 DBCC 结果。
服务器: 消息 8944,级别 16,状态 12,行 1
表错误: 对象 ID 85575343,索引 ID 255,页 (1:1632),行 4。测试(ColumnOffsets <= (nextRec - pRec))失败。值为 12353 和 84。
对象 'ipms_measure_baseinfo' 有 1347 行,这些行位于 52 页中。
CHECKDB 发现了 0 个分配错误和 2 个一致性错误(在表 'ipms_measure_baseinfo' 中,该表的对象 ID 为 85575343)。
数据库
alter database xinning set single_user
正常吗?
表错误: 对象 ID -997982209,索引 ID 232,页 ID (1:4666)。页首结构中的 PageId = (34056:1972051435)。
服务器: 消息 8929,级别 16,状态 1,行 1
对象 ID 85575343: 在文本 ID 1376321536 中发现错误,该文本的所有者是由 RID = (1:937:0) ipm_code = '127077b-133f4d0e3f5-d984a05fa268b7cc6ac052a38960aeb2' 标识的数据记录。
服务器: 消息 8929,级别 16,状态 1,行 1
对象 ID 85575343: 在文本 ID 1376518144 中发现错误,该文本的所有者是由 RID = (1:937:1) ipm_code = '127077b-133f4d23f4f-d984a05fa268b7cc6ac052a38960aeb2' 标识的数据记录。
服务器: 消息 8929,级别 16,状态 1,行 1
对象 ID 85575343: 在文本 ID 1376714752 中发现错误,该文本的所有者是由 RID = (1:937:2) ipm_code = '127077b-133f4d92cb0-d984a05fa268b7cc6ac052a38960aeb2' 标识的数据记录。
服务器: 消息 8929,级别 16,状态 1,行 1
对象 ID 85575343: 在文本 ID 1376911360 中发现错误,该文本的所有者是由 RID = (1:937:3) ipm_code = '127077b-133f4da3e3f-d984a05fa268b7cc6ac052a38960aeb2' 标识的数据记录。
服务器: 消息 8929,级别 16,状态 1,行 1
对象 ID 85575343: 在文本 ID 1377107968 中发现错误,该文本的所有者是由 RID = (1:937:4) ipm_code = '127077b-133f4db54cf-d984a05fa268b7cc6ac052a38960aeb2' 标识的数据记录。
服务器: 消息 8929,级别 16,状态 1,行 1
对象 ID 85575343: 在文本 ID 1377304576 中发现错误,该文本的所有者是由 RID = (1:937:5) ipm_code = '127077b-133f4dc380b-d984a05fa268b7cc6ac052a38960aeb2' 标识的数据记录。
服务器: 消息 8929,级别 16,状态 1,行 1
对象 ID 85575343: 在文本 ID 1377501184 中发现错误,该文本的所有者是由 RID = (1:937:6) ipm_code = '127077b-133f4dd1656-d984a05fa268b7cc6ac052a38960aeb2' 标识的数据记录。
服务器: 消息 8929,级别 16,状态 1,行 1
对象 ID 85575343: 在文本 ID 1007484928 中发现错误,该文本的所有者是由 RID = (1:938:11) ipm_code = '81ee8b-13401e7abb4-2bff88ffdc7daddac77f9ceb0ed3ec33' 标识的数据记录。
DBCC 语句的修复级别导致回避了此修复。
CHECKDB 发现了 0 个分配错误和 1 个一致性错误(在表 '(Object ID -997982209)' 中,该表的对象 ID 为 -997982209)。
'xinning' 的 DBCC 结果。
dbcc checkdb('xinning',repair_allow_data_loss)
alter database xinning set multi_user
select * from
ipms_measure_baseinfo a, ipms_measure_data b
where a.ipcc_code=b.ipcc_code
and a.ipm_code=b.ipm_code报错:
Location: recbase.cpp:1378
Expression: m_offBeginVar < m_SizeRec
SPID: 52
Process ID: 3144连接中断
看错误信息应该是C++程序的问题吧.
select * from ipms_measure_baseinfo
select * from ipms_measure_data
看有没问题咯? 有问题的话,再执行一次dbcc checkdb('xinning')
我从新执行了多遍 dbcc checkdb('xinning') 没有问题之后再连接查询
结果报错:
SqlDumpExceptionHandler: 进程 53 发生了严重的异常 c0000005 EXCEPTION_ACCESS_VIOLATION。SQL Server 将终止该进程。连接中断
Microsoft SQL Server 2000 - 8.00.2066
修复了这个问题:在数据库 'xinning' 中检测到一个可能的数据库一致性问题。应该对数据库 'xinning' 运行 DBCC CHECKDB 和 DBCC CHECKCATALOG。修复了这个问题:SqlDumpExceptionHandler: 进程 53 发生了严重的异常 c0000005 EXCEPTION_ACCESS_VIOLATION。SQL Server 将终止该进程。
我另外建了一个数据库,把有问题的两张表复制过去,然后删除这两张原表,再从新建的数据库中把这两张表复制过来。问题解决。