千家信息网

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

发表于:2025-01-31 作者:千家信息网编辑
千家信息网最后更新 2025年01月31日,事故背景:突然间数据库无缘无故损坏了,差异备份或事务日志备份在3点才会自动去做,那么如何将2点到2点40之间的数据恢复呢?这就需要通过备份尾部日志进行恢复了。环境描述: 某公司装了一台SQL Serv
千家信息网最后更新 2025年01月31日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


0