数据库在误操作下,日志恢复

在使用了updata,delete,或者其他情况让数据库遭到破坏时,可以使用下列方法进行恢复,前提是要有上次的备份,并且要对现在数据库的日志进行备份。

遇到数据库误操作的时候,千万别着急,不要用上次的备份直接恢复数据库,这样导致日志也被覆盖。具体操作,看下面的例子

 


前提条件:myBBS是数据库test中的一个表,

          数据库test的Recovery Model为Full,Auto Close,Auto Shrink两个选项未选中。

          数据库test的data files和log files均为默认的自动增长状态。

 

 

很多做开发的会直接在生产数据库上SELECT、UPDATE、DELETE数据,突然某天一个不小心、脑子一迷糊,就删除了一个关键的数据表,怎么办?

告诉你一个办法,我自己用过一次 :(    帮别人恢复用过一次 ^_^

必要条件:必须有一个误操作之前的数据库的完全备份,且在备份之后没有清过数据库日志。如果你没有完全备份,或者你轻信别人胡言乱语而清掉了数据库日志,那就没救了。


假设误操作的数据库名为 yddata

1、备份误操作后的数据库的日志:

   backup log yddata to disk='d:\db_log.bak'

2、恢复之前做的完全备份,假设该完全备份的文件名为 d:\db_old.bak

   restore database yddata_2 from disk='d:\db_old.bak' with norecovery

   注意:恢复成的数据库名为 yddata_2,不要覆盖正在使用的库

3、最后一步:

   restore log yddata_2 from disk='d:\db_log.bak'
        with stopat='2007-04-14 12:30:00'

   stopat 代表要将数据库恢复到哪一时刻的状态


其实原理很简单:相当于在之前的备份的基础上将备份之后的操作重新做了一遍。

A:2004/10/13,16:00进行数据库备份,backup database test to disk='d:\db\1600.bak' with init

B:2004/10/14,13:00对数据库进行了update,delete等操作;

C:2004/10/15,18:00使用delete mybbs where id>300时,语句误写成delete mybbs,因而删除了表mybbs中的所有数据。

 

现在在C点,C点对数据库进行了误操作,我们希望数据库能够恢复到C之前的状态,比如恢复到10月15日17:59分的状态。

要恢复数据库B点,使用的是A点备分的数据库1600.bak;而使用的日志备分是最新的备分1820.logs;因而进行如下操作:

 

--备分日志:

BACKUP LOG test TO DISK='d:\1820.logs' WITH INIT

 

--恢复数据库1600.bak,使用WITH NORECOVERY参数:

RESTORE DATABASE test from disk='d:\db\1640.bak' WITH NORECOVERY

 

--使用日志恢复数据库到10月15日17:59分:

RESTORE LOG test
        FROM disk='d:\1820.logs' WITH RECOVERY,STOPAT='10/15/2004 17:59'

 

上面的三条Transact SQL语句的对应过程:

      1.恢复数据库到A点;

      2.执行A-B之间的log记录,把数据库恢复到B点.

 

 

       这样就恢复数据库到了指定的时间点。如果恢复不成功,可能的原因是:1.未使用正确的备分数据库;2.数据库选项选中了Auto

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值