记录SQL Server2008日志文件损坏的恢复过程:
环境:系统Windows Server2003
数据库SQL Server2008
故障原因:通过mstsc链接同一服务器时,用户界面不一致。决定重启服务器,未正确关闭应用程序的情况下(程序在访问数据库),导致数据库日志文件损坏,自然也就无法访问mdf文件!(都是微软自家的产品,重启服务器为什么不能检查数据库的状态,将数据库设置在安全状态后在重启呢??所以,要养成良好的习惯。关闭现有数据库链接,再重启服务器)
故障表现:无法访问数据文件,就像下面JD_2数据库一样。
解决方案:
1:将数据库JD_2删除、或者分离(这里可能会提示无法删除或分离数据库,可以重启对应的数据库实例后再次尝试)
2:新建数据库,日志文件和数据文件名称和要恢复对应文件一样命名。
3:将新建的数据库设置为脱机模式,找到新建数据库的物理路径,将要恢复的mdf文件拷贝覆盖现有的mdf文件。
4:设置数据库为联机模式,刷新数据库,可以看到并没有什么卵用。
5:执行alter database JD_2 set emergency 将数据库设置为紧急模式。
执行:
use master
declare @databasename varchar(255)
set @databasename=‘JD_2‘
ALTER DATABASE WisdomAgriculturePlatform SET SINGLE_USER //将目标数据库置为单用户状态
dbcc checkdb(@databasename,REPAIR_ALLOW_DATA_LOSS)
dbcc checkdb(@databasename,REPAIR_REBUILD)
ALTER DATABASE WisdomAgriculturePlatform SET MULTI_USER //将目标数据库置为多用户状态
6:刷新后数据库处于紧急模式,数据基本恢复。当前数据局处于紧急模式,无法对数据库备份。所以我们要恢复紧急模式为正常模式
7:执行 select * from sys.master_files 查看数据库基本信息和状态信息
8:执行 select * from sysdatabases 查看所有数据库的信息如下:
Status状态码含义:http://blog.csdn.net/nemo2011/article/details/9233777
执行:
方案1:
sp_configure ‘allow updates‘,1
reconfigure with override
update sysdatabases set status=0 where name=‘JD_New‘
更改数据库状态码,提示不允许更改=>sql server2008不支持对系统表的修改
方案2:
对于正常未损坏的数据库可以使用
ALTER DATABASE dbname SET EMERGENCY
ALTER DATABASE dbname SET ONLINE
在紧急模式和普通模式间切换。但是对于损坏过的数据,经验证此方法行不通。
参考了一些网上的办法,都没能解决问题!请朋友不吝赐教~~