SQLSERVER2008R2 数据库可疑的解决步骤

异常关机后,金蝶帐套突然无法访问,发现数据库置疑,使用此方案解决:

一般情况下这样可以解决:

1、将数据库设置为应急状态

  ALTER DATABASE AIS20150723104254 SET emergency

2、将数据库设置为单用户模式

  ALTER DATABASE AIS20150723104254 SET SINGLE_USER

3、对数据库进行检查修复

  DBCC CheckDB (AIS20150723104254, REPAIR_ALLOW_DATA_LOSS)

REPAIR_ALLOW_DATA_LOSS代表,若此错误不能修复时,系统将直接删除相关数据。

  DBCC  checkdb (AIS20150723104254, REPAIR_REBUILD)

尝试直接修复数据库错误


使用上面两个语句进行数据库检查修复,如果返回结果中没有了红色的提示文字,说明修复成功


此数据库执行CHECKDB的过程中发现一些表的索引被破坏,于是针对具体的表进行重建索引的操作: 

  DBCC DBREINDEX(表名) 

完成后可以运行dbcc checkdb(db_name)检查数据库的完整性.


4、最后,取消单用户模式即可。

  exec sp_dboption AIS20150723104254, N'single', N'false'

  ALTER DATABASE AIS20151130094910 SET MULTI_USER


日志文件损坏或丢失时,可以尝试此方法:

1、把问题数据库文件备份到其它目录

  停掉SQLSERVER服务,把服务器上出问题的数据库, 假设名称为 ErrorDB的数据库文件及日志文件备份复制到其他目录,然后直接将其删除,把其数据库文件及日志文件也删除

2、新建同名数据库

  启动SQLSERVER服务,新建同名数据库ErrorDB,文件目录和文件名和原来一致

3、用备份的数据库文件替换新的数据库文件

  停掉SQLSERVER服务,把备份的数据库文件替换新的数据库文件(只替换数据库文件,不替换日志文件)

  启动SQLSERVER服务,打开数据库,这时数据库应该是不能访问的

-------------------设置应急模式、单用户模式、检查修复数据,取消单用户模式----------------------

4、将数据库设置为应急状态

  alter database ErrorDB set emergency

  执行后,为了保险起见,重新停止、开启的SQLSERVER服务

  再打开数据库,已经可以看到里面的内容了,如表,视图,存储过程等

  数据库名称后有紧急标志,能看到数据库结构,但无法进行备份等操作

5、将数据库设置为单用户模式

  ALTER DATABASE ErrorDB SET SINGLE_USER

6、对数据库进行检查修复

  dbcc checkdb(ErrorDB,REPAIR_ALLOW_DATA_LOSS)

  dbcc checkdb(ErrorDB,REPAIR_REBUILD)

  操作后,仍然停止启动SQLSERVER服务(不确定是否需要,我只是为了想无干扰查看执行后的数据库状况)

 

7、取消单用户模式即可

  exec sp_dboption ErrorDB, N'single', N'false'

  ALTER DATABASE ErrorDB SET MULTI_USER


你可能感兴趣的:(服务器,用户,修复,数据库文件)