SQL2008 数据库根据事物日志的还原

SQL是可以通过事物日志还原到数据库的任意一个时间点的。

但是需要几个条件:

1、数据库必须在出问题之前必须存在备份。

-- 对数据库进行备份
BACKUP DATABASE db_test
TO DISK = 'd:/Gwall.bak'
WITH FORMAT
GO


 
2、在出问题之后,数据库必须没有做过任何 数据库完整备份。因为数据库备份是会对事物日志进行截断处理的。 

      而数据库恢复是需要通过事物日志进行了,所以如果出问题之后对数据库进行了完整备份,那么就无法取得出问题的事物日志了。

              也就等于没有办法恢复到出问题的时间点了。

3、出问题之后,应停止数据库访问,并且进行事物日志的备份。

--备份事务日志(使用事务日志才能还原到指定的时间点)
BACKUP LOG db_test
TO DISK = 'c:/Gwall_log.bak'
WITH FORMAT
GO

补充,在数据库备份之后,事物日志备份可以有多个。但必须记住相应的时间顺序。在恢复时需要按照时间顺序逐一恢复。

因为事物日志的备份其实是只有时间段数据的,即上一次的数据库完整备份或上一次的事物日志备份时间 到当前时间的事物日志数据。



当拿到出问题之前最早的备份和出问题之后的事物日志之后,就可以进行数据库的恢复动作了。

恢复步骤:

1、首选需要有数据库的独占访问权,所以需要其他人和该数据的连接都中断。

2、数据库恢复的时候最好在 USE master 的连接上执行。

3、首先进行出问题前的数据库完整备份的还原。


-- 还原完全备份 
RESTORE DATABASE Gwall
FROM DISK = 'd:/Gwall.bak ' 
WITH REPLACE , 
    NORECOVERY


其中,NORECOVERY  你其实就是数据库的锁,在还原数据库后需要还原后续日志时,必须在还原后带上该值。

4、逐一按照时间点还原事物日志

RESTORE LOG Gwall
        FROM DISK = 'd:/Gwall_log.bak' 
        WITH 
            STANDBY = 'd:/gwall_redo.bak' 

     当还原最后一个事物日志时,可以指定时间,进行还原。则数据库将还原到该指定时间点。

DECLARE @start_date datetime 

SET @start_date = CONVERT(DATETIME,'2014-08-20 22:02:27.753')

	RESTORE LOG Gwall
        FROM DISK = 'd:/Gwall_log1.bak' 
        WITH STOPAT = @start_date ,
            STANDBY = 'd:/gwall_redo.bak'

注意:事物日志的还原(包括指定时间点的还原)是不可逆的。如以上指定时间点选还原指定时间为 22:02:27 ,

则下次在还原的时候,时间只能在该时间之后,如果写还原时间为 22:01:00 ,则该还原是无法完成的。

5、在还原到固定时间点后,是可以在当前连接下进行数据库数据的查询的,以确定是否已到达到需要还原的时间点。

6、确定数据还原完成后,则需要将数据库锁解开,完成数据库还原。

-- 显示还原的时间点 
            SELECT Restoreto = @start_date 
            -- 完成数据库还原,使数据库可读写 
            RESTORE LOG Gwall
            WITH RECOVERY

以上就完成了通过事物日志进行指定时间点还原的恢复。



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值