日期:2014-05-17  浏览次数:20444 次

sql查询出问题?
数据库是sql2000,有张表数据60多个字段,数据有250万条左右,这几天已通过sql查询分析器来查询就出问题了。查数据少点好像是可以的。
报错是:
服务器: 消息 7987,级别 22,状态 3,行 1
在数据库 'A-bus' 中检测到一个可能的数据库一致性问题。应该对数据库 'A-bus' 运行 DBCC CHECKDB 和 DBCC CHECKCATALOG。

连接中断

我看到网上的方法做
alter database [A-bus] set single_user
 
dbcc checkdb('A-bus',repair_rebuild)
 
alter database [A-bus] set multi_user

但运行了30多分钟了还没有反应。
还有我把A-bus这个数据库里的一张表数据导出到时大概导到240万条时就不动了,一直是这个界面。那可怎么办啊?我把那张表里的某个字段的数据类型从nvarchar 32 改成varchar 10也不行,有提示:
- 无法修改表。  
ODBC 错误: [Microsoft][ODBC SQL Server Driver][SQL Server]SqlDumpExceptionHandler: 进程 51 发生了严重的异常 c0000005 EXCEPTION_ACCESS_VIOLATION。SQL Server 将终止该进程。

[Microsoft][ODBC SQL Server Driver][SQL Server] 
[Microsoft][ODBC SQL Server Driver][SQL Server]Location:  logrec.cpp:501
Expression:  FALSE
SPID:  51
Process ID:  2812
Description:  Invalid switch value

------解决方案--------------------
先看看
dbcc checkdb('A-bus') WITH PHYSICAL_ONLY
 

------解决方案--------------------
改成这样试试:
alter database [A-bus] set single_user with rollback immediate
 
dbcc checkdb('A-bus',repair_rebuild)
 
alter database [A-bus] set multi_user

------解决方案--------------------
上面的代码,可能只能在2005及以上的版本运行,你再试试这个呢:
alter database [A-bus] set single_user
 
dbcc checkdb('A-bus',repair_rebuild) with tablock
 
alter database [A-bus] set multi_user

------解决方案--------------------
导出来一个新库是比较好的选择
------解决方案--------------------
引用:
我用dts和bcp导数据都少了4万多条数据,初步分析少了最近一个多月的数据。但在错误表里精确查询最近的数据是有的,现在怎么把这个4万多条数据导出来。
还有我用dbcc checkdb('A-bus') WITH PHYSICAL_ONLY执行后有报错如下:

服务器: 消息 8928,级别 16,状态 1,行 1
对象 ID 2057058364,索引 ID 0: 未能处理页 (1:346127)。详细信息请参阅其它错误。
服务器: 消息 8944,级别 16,状态 1,行 1
表错误: 对象 ID 2057058364,索引 ID 0,页 (1:346127),行 0。测试(columnOffsets->offTbl [varColumnNumber] <= (nextRec - pRec))失败。值为 517 和 501。
服务器: 消息 8928,级别 16,状态 1,行 1
对象 ID 2057058364,索引 ID 0: 未能处理页 (1:346128)。详细信息请参阅其它错误。
服务器: 消息 8939,级别 16,状态 1,行 1
表错误: