sql2008数据库一致性错误恢复

今天突然数据库中有几张表查询不了,一查询出现错误。
提示错误:
1 当前命令发生了严重错误。应放弃任何可能产生的结果
SQL Server 检测到基于一致性的逻辑 I/O 错误 pageid 不正确(应为 1:21802,但实际为 34049:134765344)。在文件 'F:\Program Files (x86)\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\test.MDF' 中、偏移量为 0x0000000aa54000 的位置对数据库 ID 7 中的页 (1:21802) 执行 读取 期间,发生了该错误。SQL Server 错误日志或系统事件日志中的其他消息可能提供了更详细信息。这是一个威胁数据库完整性的严重错误条件,必须立即纠正。请执行完整的数据库一致性检查(DBCC CHECKDB)。此错误可以由许多因素导致;有关详细信息,请参阅 SQL Server 联机丛书。

提示: 一般情况下,引起分配错误的原因是磁盘损坏或突然停电;一致性错误可能是数据库中的表或索引坏,一般都可修复

按照修复提示执行 DBCC CHECKDB,步骤如下:
1  设置成单用户模式  EXEC sp_dboption '数据库名称', 'single user', 'TRUE'
2   修复数据库    dbcc checkdb('数据库名称',repair_allow_data_loss)
执行完命令2提示如下:(红色字部分)因为发现对象名称 'dbo.table' 和索引名称 'PK_table' 有重复的键,所以 CREATE UNIQUE INDEX 语句终止。重复的键值为 (796121)。
根据提示说明索引损坏了,主键出现重复值, 解决方法就是删除重复主键记录。
此时发现执行查询命令不会出错了,于是我利用sql语句查询 重复记录。
select [id] from tablename group by [id] having COUNT(1)>1 可是查询结果显示为空,纳闷了?于是打算先取消id的索引,不要设置成主键试试看,在执行相同命令重复id记录出现了。于是执行delete命令,重复记录被删除干净了。 
3   在次执行    dbcc checkdb('数据库名称',repair_allow_data_loss) 
执行完命令3提示如下: CHECKDB 在数据库 'test' 中发现 0 个分配错误和 0 个一致性错误。问题解决了高兴啊!!!
4  恢复成多用户模式   EXEC sp_dboption ' 数据库名称 ', 'single user', 'false'
5   回复索引,再次把id设置成主键,由于记录达到百万条,保存时出错,提示创建索引超时。于是百度,找到解决方法:
在更改数据量大的表格数据结构时,不要点“保存”按钮,而是在表结构编辑框左侧点右键===》选择“生成更改脚本”,这时出来了文本对话框,把里面的内容全选并复制,并关闭这个表,选择不保存,右击该表所属的数据库,选“新建查询”,之后Ctrl+V把刚复制的脚本粘进来,并运行。这样就再也不会弹出超时的提示了,如果数据量相当大,我们只需要耐心等待即可了!  
sql2008数据库一致性错误恢复 - chy2z - 黑暗行动
 
至此 sql2008数据库出现的一致性错误恢复了。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值