异常关机后,金蝶帐套突然无法访问,发现数据库置疑,使用此方案解决:
一般情况下这样可以解决:
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