通过LDF文件实现日志回滚将数据恢复(转)

时间:2024-01-14 08:36:44

该方法数据库恢复(www.db-recovery.com)思路

  • 1. 创建数据TEST
  • 2. 创建表TEMP_01
  • 3. 在表TEMP_01中插入100条数据
  • 4. 备份现有的数据库
  • 5. 再次向表TEMP_01中插入50条数据
  • 6. 记录下当前正确数据的时间time1
  • 7. 二分钟后模拟数据文件MDF损坏
  • 8. 备份数据库尾日志
  • 9. 将数据库恢复到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

) 记录下当前正确数据的时间time1
当前时间为:2009-8-21 15:18:33
7) 2分钟后模拟数据文件损坏

停止SQL SERVER 服务 net stop mysqlserver

删除TEST.mdf 文件

新建文本文件,并重命名为:TEST.mdf

启动SQL SERVER 服务 net stop mysqlserver

数据库TEST无法打开,证明已损坏

备份数据库尾日志
启动 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。
具体的用法参看MSDN
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
将数据库从恢复状态改变到正常状态
具体参看MSDN

转自:http://www.db-recovery.com/tong-guo-ldf-wen-jian-shi-xian-ri-zhi-hui-gun-jiang-shu-ju-hui-fu.html
数据文件已经恢复!

最主要的一点就是在备份数据的时候要选择完整备份,步骤如下:选中要备份的数据库,右键——属性——选项——恢复模式——选中完整或大容量日志,即可(这是自己的观点,不知道对不对)