--问题描述:
--对数据库有一个周期性数据库备份和事务日志备份的维护计划,在维护计划外有工作人员对数据库进行完整备份,该备份会打乱现有的日志备份链么?
--==========================================================
--创建数据库
CREATE DATABASE BackupTestDB
GO
USE BackupTestDB
GO
--创建测试表
CREATE TABLE TB1
(
ID INT IDENTITY( 1,1 ) PRIMARY KEY,
ActionDesc NVARCHAR (200),
ActionTime DATETIME DEFAULT GETDATE()
)
--第一次完整备份
BACKUP DATABASE BackupTestDB TO DISK='G:DBBackupF1.BAK'
GO
--第一次完整备份后记录
INSERT INTO TB1( ActionDesc) SELECT N' 第一次完整备份后 '
GO
--第一次日志备份
BACKUP LOG BackupTestDB TO DISK ='G:DBBackupL1.BAK'
--第一次日志备份后记录
INSERT INTO TB1( ActionDesc) SELECT N' 第一次日志备份后 '
GO
--第二次完整备份
BACKUP DATABASE BackupTestDB TO DISK='G:DBBackupF2.BAK'
GO
--第二次完整备份后记录
INSERT INTO TB1( ActionDesc) SELECT N' 第二次完整备份后 '
GO
--第二次日志备份
BACKUP LOG BackupTestDB TO DISK ='G:DBBackupL2.BAK'
--第二次日志备份后记录
INSERT INTO TB1( ActionDesc) SELECT N' 第二次日志备份后 '
GO
--==========================================================
--还原方式
USE master
GO
--使用第一次完整备份恢复
RESTORE DATABASE BackupTestDB FROM DISK='G:DBBackupF1.BAK'
WITH NORECOVERY ,REPLACE
GO
--使用第一次日志备份恢复
RESTORE DATABASE BackupTestDB FROM DISK='G:DBBackupL1.BAK'
WITH NORECOVERY ,REPLACE
GO
--使用第二次日志备份恢复
RESTORE DATABASE BackupTestDB FROM DISK='G:DBBackupL2.BAK'
WITH RECOVERY ,REPLACE
GO
USE BackupTestDB
GO
SELECT * FROM TB1
还原方式
USE master
GO
--使用第二次完整备份恢复
RESTORE DATABASE BackupTestDB
FROM DISK ='G:DBBackupF2.BAK'
WITH NORECOVERY ,REPLACE
GO
--使用第二次日志备份恢复
RESTORE DATABASE BackupTestDB
FROM DISK ='G:DBBackupL2.BAK'
WITH RECOVERY ,REPLACE
GO
USE BackupTestDB
GO
SELECT * FROM TB1
--案例:
--有数据库DB1 ,该数据库由于长时间未做日志备份,导致数据文件为 GB,而日志文件有GB,为截断日志,工作人员对数据库进行完整备份 +日志备份,结果发现日志备份耗费大量时间,且生成的日志备份文件较大。
--解释:在数据库完成第一次完整备份后,第一次日志备份会以第一次完整备份为起始点开始备份日志,而后续的日志备份会以最近一次日志备份结束点为起始点开始备份,而不考虑最近一次完整备份。
--如果确认当前数据无问题同是想快速收缩日志文件,可以修改数据库恢复模式为简单模式,然后收缩日志文件,再进行完整备份 +事务日志备份
--建议:
--在DBA 维护过程中,会在维护计划外对数据库进行备份,备份应考虑当前维护计划,应该将备份文件存放到维护计划使用的目录下,尤其是对日志进行备份,如果不希望截断日志,可以使用 COPY_ONLY