SQL Server附加数据库失败,823错误。
服务器在正常运行的情况下突然断电,导致数据库文件严重损坏。附加或还原数据库无果,在附加数据库过程中出现823字样的错误。
查阅SQL server 联机丛书中关于823错误的解释:
错误编号 : 823
严重级别 : 24
消息正文 :
在文件 '%ls' 中、偏移量为 %#016I64x 的位置执行 %S_MSG 期间,操作系统已经向 SQL Server 返回了错误 %ls。SQL Server 错误日志和系统事件日志中的其他消息中可能提供了更详细信息。这是一个威胁数据库完整性的严重系统级错误条件,必须立即纠正。请执行完整的数据库一致性检查(DBCC CHECKDB)。
说明 :
Windows 读取或写入请求失败。将 Windows 返回的错误代码和相应的文本插入到消息中。对于读取操作,SQL Server 已经重试读取请求四次。通常是硬件错误导致此错误,但也可能是设备驱动程序导致的。
----------------------------------------------------------------------------------------------------------------------------------------------------------
解决办法:
1. 在企业管理器中,新建同名数据库(data_db);
2. 停止SQL Server服务,将损坏的数据库文件 data_db.mdf 替换掉刚刚新建好的数据库文件,并删除该数据库的日志文件 data_db.mdf _log.ldf;
3. 重新启动SQL Server服务,此时再打开企业管理器,发现该数据库有“置疑”字样;
4. 接下来打开SQL自带查询分析器,执行如下SQL语句:
(1)选择master系统库,打开修改系统表的开关
EXEC sp_configure 'allow updates',1 RECONFIGURE WITH OVERRIDE
(2)选择master系统库,设置数据库状态为紧急修复模式
UPDATE sysdatabases set status=32768 where name='data_db'
(3)选择master系统库,执行重建data_db_log.ldf文件命令
DBCC REBUILD_LOG ('data_db', 'D:\database_fix\data_db_Log.LDF')
(4)选择master系统库,关闭数据库紧急修复模式
UPDATE sysdatabases set status=0 where name='data_db'
(5)选择data_db,执行恢复数据库命令
RESTORE database data_db WITH RECOVERY
(6)选择master系统库,关闭打开修改系统表的开关
EXEC sp_configure 'allow updates',0 RECONFIGURE WITH OVERRIDE
----------------------------------------------------------------------------------------------------------------------------------------------------------
通过以上六个步骤把数据库恢复后,数据库表里还有损坏的表(tb_damage),将坏表导出或修改的时候可能会无响或者不成功。可以尝试 DBCC CHECKTABLE 命令,例 :
DBCC CHECKTABLE ('tb_damage' , REPAIR_ALLOW_DATA_LOSS)
以上内容谨供本人日后查阅