日期:2014-05-18  浏览次数:20574 次

关于sql server的一个奇怪问题
数据库中的fid数据类型为bigint

当我执行如下语句的时候:
select fid from bg000084.dbo.kankong where fid=29127835412 正常
select fid from bg000084.dbo.kankong where fid=29127835412 正常

select fid from bg000084.dbo.kankong where fid=39127835412 错误
select fid from bg000084.dbo.kankong where fid=49127835412 错误

错误的信息如下:

消息 605,级别 21,状态 3,第 1 行
尝试在数据库 87 中提取逻辑页 (1:3152) 失败。该逻辑页属于分配单元 281474980642816,而非 72057594047889408。

我一开始认为是由于数据太小,但是看了下bigint是64位的,这个数据远远小于bigint的范围。真的不知道是什么原因造成了。所以这里来求助大家!请问各位大侠这可能是什么原因造成的呢?

------解决方案--------------------
数据库或者表已损坏,需要修复
------解决方案--------------------
参考http://www.cnblogs.com/yank/archive/2009/05/23/1487779.html
这类错误的官方解释
------解决方案--------------------
有可能你的表部分损坏了。使用 DBCC CHECKTABLE 修复一下表(建议先备份)
------解决方案--------------------
数据库损坏了 


http://www.cnblogs.com/yank/archive/2009/05.html
------解决方案--------------------
数据库损坏了 


http://www.cnblogs.com/yank/archive/2009/05.html
------解决方案--------------------
SQL code

先运行
DBCC CHECKALLOC('mydb') --检查你的数据库的磁盘空间分配是否一致,找到分配不一致的表
然后
将数据库该为单用户模式:ALTER DATABASE [mydb] SET  SINGLE_USER WITH ROLLBACK IMMEDIATE
接着执行
DBCC CHECKTABLE('mytable')--修复你的表
最后将数据库改为多用户模式:
ALTER DATABASE [mydb] SET  MULTI_USER WITH ROLLBACK IMMEDIATE