该方法数据库恢复(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
2) 创建表TEMP_01
(
ID [int] NOT NULL PRIMARY KEY,
NAME [datetime] NOT NULL,
ADDRESS varchar(50) NOT NULL
)
3) 在表TEMP_01中插入100条数据
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
查看数据
4) 备份现有的数据库
--------做一次完整数据库备份
5) 再次向表TEMP_01 中插入50条数据
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
查看数据
) 记录下当前正确数据的时间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 管理工具
备份尾日志
解释一下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 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
数据文件已经恢复!
最主要的一点就是在备份数据的时候要选择完整备份,步骤如下:选中要备份的数据库,右键——属性——选项——恢复模式——选中完整或大容量日志,即可(这是自己的观点,不知道对不对)