SQL Server [备份恢复]:完整备份,差异备份或事务日志备份,尾部日志备份

事故背景:

突然间数据库无缘无故损坏了,差异备份或事务日志备份在3点才会自动去做,那么如何将2点到240之间的数据恢复呢?这就需要通过备份尾部日志进行恢复了。

环境描述:
  某公司装了一台SQL Server数据库,为了保证数据库能够在出现故障时及时的修复,管理员做了备份操作,比如说完整备份+差异备份或者完整备份+事务日志备份,而且备份的时间是每隔6个小时做一次完整备份,在每天的1点、6点、12点、18点,6个小时之内是每隔1个小时做一次差异备份事务日志备份,并且和计划任务结合在了一起。

  假如现在存在这样一种场景,在240分左右,突然间数据库无缘无故损坏了,差异备份或事务日志备份在3点才会自动去做,那么如何将2点到240之间的数据恢复呢?这就需要通过备份尾部日志进行恢复了。(必须确保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 

http://blog.csdn.net/dba_huangzj/article/details/8491327 

SQL Server 备份基础 :

http://blog.csdn.net/dba_huangzj/article/details/22683687   

场景:

--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  LogBackup@2: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