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

\数据文件已经恢复!

posted @ 2008-05-26 20:56  simplay  阅读(1223)  评论(0编辑  收藏  举报