数据库恢复之利用LDF文件还原数据
2014-01-08 20:54:01 来源:华军科技数据恢复
今天笔者讲讲怎样利用LDF文件还原数据方法,恢复过程是先创建数据TEST、创建表TEMP_01,在表TEMP_01中插入100条数据,接着备份现有的数据库,再次向表TEMP_01中插入50条数据,记录下当前正确数据的时间time1,二分钟后模拟数据文件MDF损坏,备份数据库尾日志,最后将数据库恢复到time1 时间。
数据库详细还原步骤:
1) 创建数据TEST
CREATE DATABASE TEST
2) 创建表TEMP_01
CREATE TABLE TEMP_01
(ID [int] NOT NULL PRIMARY KEY,
NAME [datetime] NOT NULL,
ADDRESS varchar(50) NOT NULL)
3) 在表TEMP_01中插入100条数据
use TEST
declare @i int
set @i=1
while(@i<=100)
begin
INSERT INTO TEMP_01 VALUES (@i,getdate(),’ADDRESS ‘ + convert(varchar(50),@i))
set @i=@i+1
end
查看数据
select * from TEST
4) 备份现有的数据库
--------做一次完整数据库备份
backup database TEST to disk =N’f:\db-recovery\TEST.bak’
5) 再次向表TEMP_01 中插入50条数据
use TEST
declare @i int
set @i=101
while(@i<=150)
begin
INSERT INTO TEMP_01 VALUES (@i,getdate(),’ADDRESS ‘ + convert(varchar(50),@i))
set @i=@i+1
end
查看数据
select * from TEMP_01
6) 记录下当前正确数据的时间time1
当前时间为:2009-8-21 15:18:33
7) 2分钟后模拟数据文件损坏
停止SQL SERVER 服务 net stop mysqlserver
删除TEST.mdf 文件
新建文本文件,并重命名为:TEST.mdf
启动SQL SERVER 服务 net stop mysqlserver
数据库TEST无法打开,证明已损坏
8) 备份数据库尾日志
启动 sqlcmd 管理工具
备份尾日志
backup log TEST to disk=N’f:\db-recovery\aaaa.bak’ with no_truncate
解释一下no_truncate的作用:
如果数据库处于离线状态并且无法启动。
尝试执行尾日志备份。由于此时不会发生任何事务,所以 WITH NORECOVERY 是可选的。如果数据库受损,请使用
WITH CONTINUE_AFTER_ERROR 或 WITH NO_TRUNCATE。
BACKUP LOG database_name TO [WITH { CONTINUE_AFTER_ERROR | NO_TRUNCATE }
重要提示:
除非数据库受损,否则不建议使用 NO_TRUNCATE。
9) 将数据库恢复到time1时间
–恢复最后一次正常配置
在sqlcmd中执行如下语句进行恢复
restore database test from disk=’f:\db-recovery\TEST.bak’ with norecovery
restore log test from disk=’f:\db-recovery\aaaa.bak’ with recovery
解释一下 with norecovery 和 with recovery的作用
NORECOVERY:每当您准备对数据库继续执行还原操作时,请使用 NORECOVERY。NORECOVERY 使数据库进入还原状态。这确保了数据库在尾日志备份后不会更改。
RECOVERY:将数据库从恢复状态改变到正常状态
以上是数据库恢复过程,是利用LDF文件将数据库数据还原,希望对您有帮助!