[数据恢复]SQL2000 在异常状态下删除LDF日志文件后…

2003-05-07 10:51 | 风不息

此实用技术文章不加精华保存起来,实在可惜了!而且大鸟又是查询了那么多国内资料。

本文作者:大鸟

我在清理SQL SERVER2000的数据库日志时,关闭了SQL SERVER之后直接删除了LDF日志文件,原本以为重新启动后会自动重新生成,但重启后发现原数据库呈不可用。再重新启动SQL SERVER后发现在数据库列表中原数据库已经消失,试图用“附加数据库”恢复时出现“错误 1813”,并说LDF文件无效。也就是数据库无法重新附加,更别说看到其中的内容。
在查阅了大量国外资料后终于结合两篇文章找到了修复的最快捷手段——
这个问题的标题可以是SQL SERVER2000在异常状态下删除LDF日志文件后的MDF文件附加方式。
1、备份MDF文件,这个是必不可少的手段,防止误操作。例如,原数据库名为FFSKYDB。那么就会默认的为FFSKYDB.MDF文件。
2、新建一个数据库,数据库名与原数据库不同,例如,数据库名为FFSKYDB。那么就会默认的有FFSKYDB.MDF和FFSKYDB_LOG.LDF两个文件。
3、将SQL SERVER停止,将旧的FFSKYDB.MDF文件覆盖新的文件。
4、将FFSKYDB_LOG.LDF删除。
5、重新启动SQL SERVER,可以看到FFSKYDB数据库的状态为置疑。
6、然后打开SQL 查询分析器,用SA或本地ADMIN帐号登陆,输入以下命令。各参数根据自己实际情况来改。其中REBUILD_LOG是未公开的命令,用以重新建立日志,可能会有问题。
——————————————————————
EXEC sp_configure 'allow updates', 1
RECONFIGURE WITH OVERRIDE
GO
BEGIN TRAN
UPDATE master..sysdatabases
SET status = status | 32768
WHERE name = 'FFSKYDB'
IF @@ROWCOUNT = 1
BEGIN
COMMIT TRAN
RAISERROR('emergency mode set', 0, 1)
END
ELSE
BEGIN
ROLLBACK
RAISERROR('unable to set emergency mode', 16, 1)
END
GO
EXEC sp_configure 'allow updates', 0
RECONFIGURE WITH OVERRIDE
G
DBCC REBUILD_LOG('FFSKYDB','C:\FFSKYDB_LOG.ldf')
GO
ALTER DATABASE FFSKYDB SET MULTI_USER
GO
——————————————————————
7、刷新一下,数据库应该恢复正常了。如果不幸的话,数据库可能有些问题,可能会损失些数据(如逻辑卷错误),我运气还算比较好,仅损失一些不常变动的数据,从旧备份记录就可以恢复。一般对于小数据库完全成功率应该挺高的,象我这样1G的数据库就做好有数据丢失的思想准备吧。是否可用DBCC CHECKDB命令来修复就不得而知了,数据库大,很难试。


-






[无主题变奏]


幸福像碎了的水晶球,有人拣得多,有人拣得少,有人拣的时候还可能伤了自己。