重建日志---恢复数据库的最后希望
问题来源:泉州分公司
U8产品支持部15号工程师
2003年09月23日
问题现象
该数据库版本为SQLSERVER2000,数据库日志文件已经被删除,只
剩下MDF文件。用数据库附加命令无法附加。
而且用户已经没有其他的可用备份,如果无法恢复这个数据库,将会
给客户带来严重的损失!!!
现在,只有寄希望与重建数据库日志来恢复了!
解决方法
首先建立一个数据库,与需要恢复的数据库同名,此例为
UFDATA_001_2003。
此处需要特别注意的是,数据库一定要同名,文件组也要相同(不过
U8软件建立数据库的时候不会改文件组,默认的是PRIMARY文件组),
文件名也要相同,
(此处建议MDF文件同名,LDF文件不同名,稍后会介绍原因);
解决方法
数据库建立好了,停止数据库服务,然后用需要恢复的MDF文件覆
盖刚建立的数据库文件,此时启动数据库服务,进入企业管理器中查看,
该数据库被设置为置疑(suspect)状态;在这个状态下数据库是不可用
的,见下图:
解决方法
首先我们要将该数据库的状态改变,改变为紧急状态。
进入查询分析器,对应MASTER数据库,执行如下语句:
sp_configure 'allow', 1
--修改系统数据库为可以修改,只有这样数据库的系统表才能修改
reconfigure with override
update sysdatabases set status = 32768
where name = 'UFDATA_001_2003'
--将该数据库状态设置为紧急状态(32768)
此时在企业管理器中刷新后可见如下图:
解决方法
关键的一步到了,让我们来给数据库重建日志文件把!
首先,停止数据服务,把原来的LDF文件改名(不能删除),然后再
启动数据库服务,进入查询分析器MASTER库下执行下列语句:
REBUILD_LOG ('UFDTA_001_2003', 'E:\UFSOFT850\ZT001\' )
--重建日志文件(改为与U8默认的日志文件同名,参见步骤1)
restore database UFDATA_001_2003 WITH RECOVERY
GO
解决方法
执行上述语句后,80%会返回如下的消息:
警告: 数据库‘UFDATA_001_2003’的日志已重建。已失去事务的一
致性。应运行 CHECKDB 以验证物理一致性。将必须重置数据库
选项,并且可能需要删除多余的日志文件。
执行完毕。如果 输出了错误信息,请与系统管理员联
系。RESTORE DATABASE 操作成功地处理了 0 页,花费了 秒
( MB/秒)。
如果返回的是上述信息,说明数据库已经默认了你新建的日志文件,
要是数据库不认,那么您也不用往下看了,您只能在覆盖MDF文件后把数据库的状态改为可用,然后输出其中的表了。
解决方法
此时该数据库的状态应该是处于DBO ONLY的状态,如下图:
您可以看见,现在里面的表都是可用的了,但是我们还需要把他的
状态改为正常的状态才可以。
解决方法
在查询分析器中执行如下语句:
update sysdatabases set status = 4194316 where name = 'UFDATA_001_2003'
--修改为正常状态;
千万别忘记,前面我们修改了数据库让他的系统表可以修改,现在
一定要修改回来,否则客户无意中修改了系统数据库,那麻烦可就是大
了!!!
--修改系统数据库状态为不可写:
sp_configure 'allow', 0
reconfigure with override
GO
解决方法
似乎恢复完成了,但是为了确保日后的使用没有问题,我们需要检查
一下数据库是否还有问题,:
CHECKDB ('UFDATA_001_2003')
如果没有返回错误提示,那么您可以放心的使用了,如果有错误提
示,来修复,不过,其中由于修复而丢失的数据是
没有办法的了,修复的语句见下页,该语句需要反复的执行,直到没有
任何错误提示为止!!
数据库重建日志 来自淘豆网www.taodocs.com转载请标明出处.