事故背景:
突然间数据库无缘无故损坏了,差异备份或事务日志备份在3点才会自动去做,那么如何将2点到2点40之间的数据恢复呢?这就需要通过备份尾部日志进行恢复了。
环境描述:
某公司装了一台SQL Server数据库,为了保证数据库能够在出现故障时及时的修复,管理员做了备份操作,比如说完整备份+差异备份或者完整备份+事务日志备份,而且备份的时间是每隔6个小时做一次完整备份,在每天的1点、6点、12点、18点,6个小时之内是每隔1个小时做一次差异备份事务日志备份,并且和计划任务结合在了一起。
假如现在存在这样一种场景,在2点40分左右,突然间数据库无缘无故损坏了,差异备份或事务日志备份在3点才会自动去做,那么如何将2点到2点40之间的数据恢复呢?这就需要通过备份尾部日志进行恢复了。(必须确保log文件没有损坏)
原文出处:
***** http://blog.csdn.net/misterliwei/article/details/5884656****
http://www.w2bc.com/Article/44855
http://www.jb51.net/article/18613.htm
尾部日志: http://blog.csdn.net/misterliwei/article/details/5884656
场景:
--1. Backup:
a. Fullbackup @1:00AM: (Every 6 hours)
111
222
--insert into [Temp].[dbo].[demo] values(111)
--insert into [Temp].[dbo].[demo] values(222)
--alter databasetemp set recovery full
--backup databasetemp todisk=‘D:\MSSQL10.MSSQLSERVER\MSSQL\Bak\Temp_full.bak‘ with INIT
b. DiffBackup 或者Logback @2:00AM : (Every 1 hour)
111
222
333
444
--insert into [Temp].[dbo].[demo] values(333)
--insert into [Temp].[dbo].[demo] values(444)
--backup databasetemp todisk=‘D:\MSSQL10.MSSQLSERVER\MSSQL\Bak\Temp_diff.bak‘ with INIT, differential
或者
-- backup logtemp todisk=‘D:\MSSQL10.MSSQLSERVER\MSSQL\Bak\Temp_log.bak‘ with INIT
差异备份或日志备份结束后,做了一些插入操作
--insert into [Temp].[dbo].[demo] values(555)
111
222
333
444
555
c. 在数据文件损坏后,完整备份恢复之前,做一次备份尾部日志,备份差异备份之后的改动
NO_TRUNCATE [email protected]:45AM :
-- BACKUP LOG temp TO DISK = ‘D:\MSSQL10.MSSQLSERVER\MSSQL\Bak\Temp_log2.bak‘ WITH INIT, NO_TRUNCATE;
GO
--2. Restore:
a. 删除原始数据库(先备份原始的mdf,ldf文件)
--drop database temp
b. 恢复完整备份,norecovery 模式,最后一次恢复选择recovery
--restore database temp from disk =‘D:\MSSQL10.MSSQLSERVER\MSSQL\Bak\Temp_full.bak‘ with norecovery
c. 恢复差异/日志备份,norecovery模式
--restore database temp from disk =‘D:\MSSQL10.MSSQLSERVER\MSSQL\Bak\Temp_diff.bak‘ with norecovery
或
--restore log temp from disk =‘D:\MSSQL10.MSSQLSERVER\MSSQL\Bak\Temp_log.bak‘ with norecovery
d. 恢复’备份尾部’日志,recovery模式
--restore log temp from disk =‘D:\MSSQL10.MSSQLSERVER\MSSQL\Bak\Temp_log2.bak‘ with recovery
All data:
111
222
333
444
555