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

来源:互联网 发布:浪潮软件利好消息 编辑:程序博客网 时间:2024/06/04 19:33

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

但是需要几个条件:

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

-- 对数据库进行备份BACKUP DATABASE db_testTO DISK = 'd:/Gwall.bak'WITH FORMATGO


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

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

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

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

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

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

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



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

恢复步骤:

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

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

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


-- 还原完全备份 RESTORE DATABASE GwallFROM 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

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



0 0
原创粉丝点击