SQL Server 检测到基于一致性的逻辑 I/O 错误 校验和不正(转载)

本文记录了在SQLServer2008环境下,运行特定SQL语句时遇到的一致性逻辑I/O错误,并详细描述了使用DBCCCHECKDB命令修复未果后的最终解决方案:通过在临时数据库中执行修复命令,再将数据导入原数据库,成功解决了问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

引用:http://luowei1371984.blog.163.com/blog/static/44041589201491844323885/

SQL2008
运行select count(*) from produce
出现以下的错误(所在数据库暂以test命名)
================================
消息 824,级别 24,状态 2,第 1 行
SQL Server 检测到基于一致性的逻辑 I/O 错误 校验和不正确(应为: 0xca242b1f,但实际为: 0xfb9fb1b9)。在文件 ‘C:\Program Files\Microsoft SQL Server\MSSQL10.SQL2008\MSSQL\DATA\test.MDF’ 中、偏移量为 0x0000000441e000 的位置对数据库 ID 25 中的页 (1:8719) 执行 读取 期间,发生了该错误。SQL Server 错误日志或系统事件日志中的其他消息可能提供了更详细信息。这是一个威胁数据库完整性的严重错误条件,必须立即纠正。请执行完整的数据库一致性检查 (DBCC CHECKDB)。此错误可以由许多因素导致;有关详细信息,请参阅 SQL Server 联机丛书。
=================================

所用到的解决方法有:

1、
use test

go

ALTER DATABASE test SET SINGLE_USER

DBCC CHECKDB (‘test’, repair_allow_data_loss) with NO_INFOMSGS

go

ALTER DATABASE test SET MULTI_USER

go

失败!
 

2、尝试着新建了个数据库temp,并把发现数据库错误时所备份的文件还原到temp中,然后删除test数据库中的produce表。之后把temp中的produce表导入到test中,当运行后出错的那几行时导入动作自动停止。失败!

3、最终的解决方法:把第一方法中的SQL语句放到temp数据库进行运行,只花了几秒钟时间就提示修复成功,接着再把temp中的produce导入test中,成功!

PS:第一个方法中的语句确实有效,但不懂为什么在出问题的数据库中运行不了,要借助临时的数据库才行。不知网络上的其他朋友是否也是这样的操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值