12月头一日一大早就被告知系统不能登录,用户描述的错误信息是弹出了一个设置数据库连接的对话框,连接服务器一看数据库被置疑了,此状态下只有脱机/联机正常操作可以执行其他都报错,sp_attach_single_file_db、dbcc等命令也没法进行。
网上提供的解决办法中只有替换MDF的方法可用,当然服务器上运行着其他的数据库,不允许停止服务来修复数据,所以我的处理方法稍有不同:
1、删除数据库,但保留数据库文件MDF。
2、移走数据库文件。
3、建立同名数据库,生成同名的数据库文件(路径也一样)
4、将新数据库置为脱机。
5、复制旧MDF文件替换新生成的MDF文件
6、将数据库置为联机,此时数据库被置疑。
7、运行alter database dbname set emergency
8、运行以下语句修复数据库:
use master
declare @databasename varchar(255)
set @databasename='数据库名'
exec sp_dboption @databasename, N'single', N'true'--将目标数据库置为单用户状态
dbcc checkdb(@databasename,REPAIR_ALLOW_DATA_LOSS)
dbcc checkdb(@databasename,REPAIR_REBUILD)
exec sp_dboption @databasename, N'single', N'false'--将目标数据库置为多用户状态
至此,数据库内数据已经找回了,但发现强制约束不正确,不过能找到数据已经不错了。要彻底修复可以手工重建强制约束或建立新数据库导入旧数据,我选择后者。
http://blog.csdn.net/nhconch/archive/2008/12/01/3420032.aspx