博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
通过LDF文件实现日志回滚将数据恢复(转)
阅读量:5923 次
发布时间:2019-06-19

本文共 1990 字,大约阅读时间需要 6 分钟。

该方法数据库恢复(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
数据文件已经恢复!

 

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

转载于:https://www.cnblogs.com/huoxuanya/p/3817377.html

你可能感兴趣的文章
Android如何使用读写cookie的方法
查看>>
iis access denied, you do not have permission.
查看>>
Cap11_项目风险管理
查看>>
《Python高性能编程》——列表、元组、集合、字典特性及创建过程
查看>>
杭电1212--Big Number
查看>>
杭电1050--Moving Tables(区间覆盖)
查看>>
vue(从白痴到白痴)
查看>>
Wpf 依赖属性 附加属性
查看>>
几种Robust方法对比
查看>>
BurpSuite—-Sequencer模块(定序器)
查看>>
redis 缓存功能摘要
查看>>
克隆后虚拟机网络配置
查看>>
python 循环
查看>>
使用wpa_supplicant连接WIFI
查看>>
bzoj 4832 抵制克苏恩 概率期望dp
查看>>
SAP自带的创建报表工具
查看>>
POJ 3278 Catch That Cow (附有Runtime Error和Wrong Answer的常见原因)
查看>>
numpy 三个点的使用[...]
查看>>
Codeforces Round #327 (Div. 2) B Rebranding(映射)
查看>>
NHibernate初学者指南(3):创建Model
查看>>