Skip to content

数据库恢复之利用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文件将数据库数据还原,希望对您有帮助!

 
Back To Top
Search