SQL SERVER 数据文件损坏的恢复
SQL SERVER 数据文件损坏的恢复
数据库的恢复原理与 SQL SERVER 数据误操作的恢复 原理理相同。
恢复数据到即时点有两个前提:
n 正确的完整数据库的最后一次备份
正确完整的数据库备份是指使用Backup语句、维护计划、手动备份的备份文件,不支持基于数据库文件*.mdf的备份;
日志文件可访问;
n 正确的即时点
即所要恢复到数据的时间点
实例:
1. 创建数据DBTEST
2. 创建表TBL_TEST
3. 在表TBL_TEST中插入100条数据
4. 备份现有的数据库
5. 再次向表TBL_TEST中插入50条数据
6. 记录下当前正确数据的时间d1
7. 2分钟后模拟数据文件损坏
8. 备份数据库尾日志
9. 将数据库恢复到d1时间
1) 创建数据DBTEST
CREATE DATABASE DBTEST |
2) 创建表TBL_TEST
CREATE TABLE TBL_TEST ( ID [int] NOT NULL PRIMARY KEY, NAME [datetime] NOT NULL, ADDRESS varchar(50) NOT NULL ) |
3) 在表TBL_TEST中插入100条数据
use DBTEST declare @i int set @i=1 while(@i<=100) begin INSERT INTO TBL_TEST VALUES (@i,getdate(),'ADDRESS ' + convert(varchar(50),@i)) set @i=@i+1 end select * from TBL_TEST |
4) 备份现有的数据库
--做一次完整数据库备份 backup database DBTEST to disk='C:"DBTEST.bak' |
5) 再次向表TBL_TEST中插入50条数据
use DBTEST declare @i int set @i=101 while(@i<=150) begin INSERT INTO TBL_TEST VALUES (@i,getdate(),'ADDRESS ' + convert(varchar(50),@i)) set @i=@i+1 end select * from TBL_TEST |
6) 记录下当前正确数据的时间d1
当前时间为:2008-5-26 20:37 |
7) 2分钟后模拟数据文件损坏
停止SQL SERVER 服务 net stop mysqlserver 删除DBTEST.mdf 文件 新建文本文件,并重命名为:DBTEST.mdf 启动SQL SERVER 服务 net stop mysqlserver 数据库DBTEST无法打开,证明已损坏 |
8) 备份数据库尾日志
启动 sqlcmd 管理工具 备份尾日志 backup log dbtest to disk='c:"aaaa.bak' with no_truncate |
9) 将数据库恢复到d1时间
--恢复最后一次正常配置 在sqlcmd中执行如下语句进行恢复 restore database dbtest from disk='c:"dbtest.bak' with norecovery restore log dbtest from disk='c:"aaaa.bak' with recovery |
\数据文件已经恢复!