SQL|SQL 错误 823 I/O error (bad page ID) detected during read【修复方法】
今天一个数据库损坏了,不管对 该表 查询、修改、添加 都会出错, 错误信息如下:
I/O error (bad page ID) detected during read at offset 0x0000000171a000 in file “路径\文件”
连接中断
导致错误的可能性有:
1:服务器在正常运行的情况下突然断电,导致数据库文件损坏。
2:对某设备进行读或写请求时遇到 I/O 错误。该错误通常表明磁盘问题。
但对于以上问题都是无法避免的,庆幸的时,网上找到了解决方法(如下)
当出现这个问题的时候,可能有2种情况:
1 :附加数据库时,提示 错误:823
2:能成功附加数据库,但查询、修改 某个指定表时,出现I/O error (bad page ID) detected during 错误。
解决方法:
第一个 附加数据库问题,可以参考:http://blog.csdn.net/shazhuyubaichi/article/details/6696031
第二个问题:
sp_dboption '数据库名','single user','true'
Go
DBCC CHECKDB('数据库名', REPAIR_ALLOW_DATA_LOSS)
Go
sp_dboption '数据库名', 'single user','false'
Go
我比较庆幸,通过以上语句就可以修复了。
以下是网上的一段摘要,我没有测试,先记录下来,以后或许有用。
方案1:调用DBCCCHECKDB(‘db_name’,repair_rebuild)修复 方案2:若方案1失败,采用下面的方法试一试:
首先,在企业管理器中新建一数据库(如数据库名为test),建好数据库后,停止SQL Server Service Manager,
并将客户数据库的MDF文件更名为test_data.mdf(即新建数据库的主文件名),
然后用更名后的文件覆盖新建数据库同名文件,
接着,启动企业管理器。对Master数据库将系统表设置为可更改状态UseMaster
Gosp_configure 'allow updates ', 1
reconfigure with override
Go将数据库设为紧急状态:
update sysdatabases set status = 32768 where name = 'database'
停止并重新启动SQL Server Service Manager,并重建Log文件:
DBCC TRACEON(3604)
DBCC REBUILD_LOG( 'test', 'test_log_ldf ')将数据库设置为单用户模式,然后进行检测:
sp_dboption'test', 'single user ', 'true'
DBCCCHECKDB( 'test')
Go此数据库执行CHECKDB的过程中发现一些表的索引被破坏,于是针对具体的表进行重建索引的操作:
DBCCDBREINDEX(表名)方案3:若无法修复,则只能重备份中进行恢复.
【SQL|SQL 错误 823 I/O error (bad page ID) detected during read【修复方法】】
推荐阅读
- 唱歌教学(导致嗓音损坏的几个常见的错误唱歌方法!)
- 调取接口时报404错误(ID:16)
- py连接mysql
- 2019-01-18Mysql中主机名的问题
- MySql数据库备份与恢复
- mysql|InnoDB数据页结构
- 数据库|SQL行转列方式优化查询性能实践
- 接口|axios接口报错-参数类型错误解决
- mysql中视图事务索引与权限管理
- MYSQL主从同步的实现