理状态"置疑"解copyonly备份操作

  

Alwayson在添加数据库的过程中如果同步首选项选择的是“完整”,那么就会在主副本上执行copyonly的完整备份和日志备份在辅助副本上执行还原操作,也正是这个操作让我对copyonly有了新的理解。虽然以前也经常使用copyonly执行完整备份,
但是之前对copyonly的理解存在一点误区。接下来详细说明copyonly的操作。

 

 

一、备份测试 

CREATE DATABASE city;GOCREATE TABLE city.dbo.test(id INT);---执行完整备份BACKUP DATABASE [city] TO  DISK = N'D:\backup\city_full_20170613.bak' WITH NOFORMAT, NOINIT,  NAME = N'city-完整 数据库 备份', SKIP, NOREWIND, NOUNLOAD,  STATS = 10GO--插入1条记录INSERT INTO city.dbo.test VALUES(1);--执行日志备份1BACKUP LOG [city] TO  DISK = N'D:\backup\city_log1_20170613.trn' WITH NOFORMAT, NOINIT,  NAME = N'city-日志备份1 备份', SKIP, NOREWIND, NOUNLOAD,  STATS = 10GOINSERT INTO city.dbo.test VALUES(2);GO--执行完整copy only备份BACKUP DATABASE [city] TO  DISK = N'D:\backup\city_full_copyonly_20170613.bak' WITH  COPY_ONLY, NOFORMAT, NOINIT,  NAME = N'city-完整copyonly 数据库 备份', SKIP, NOREWIND, NOUNLOAD,  STATS = 10GOINSERT INTO city.dbo.test VALUES(3);--执行差异备份BACKUP DATABASE [city] TO  DISK = N'D:\backup\city_diff_20170613.bak' WITH  DIFFERENTIAL , NOFORMAT, NOINIT,  NAME = N'city-差异 数据库 备份', SKIP, NOREWIND, NOUNLOAD,  STATS = 10GOINSERT INTO city.dbo.test VALUES(4);GO--执行日志备份2BACKUP LOG [city] TO  DISK = N'D:\backup\city_log2_20170613.trn' WITH NOFORMAT, NOINIT,  NAME = N'city-日志备份2 备份', SKIP, NOREWIND, NOUNLOAD,  STATS = 10GO

 

二、查询备份

SELECT bs.database_name,
  bs.name  AS  BackupName,
  bs.first_lsn,备份集中最早的一条日志记录的日志序列号bs.last_lsn,,,备份集下一条日志记录的日志序列号bs.database_backup_lsn,,,最近的数据库完整备份的日志序列号bs.checkpoint_lsn,,,,重做日志开始的日志序列号bs.is_copy_only, CASE  bs.type  WHEN  ' D ', THEN “后卫”,WHEN “L”, THEN “LogBack”, WHEN “我”,THEN “DiffBack”, ELSE , bs.type 最终获得AS  BackupType,
  bs.backup_start_date,
  bs.backup_finish_date,
  bs.backup_size,
  bs.recovery_modelFROM  msdb.dbo.backupset  bs 
  ——INNER  JOIN  msdb.dbo.backupfile  bf 提醒bs.backup_set_id=bf.backup_set_idWHERE  bs。database_name=俺鞘小?/pre> 

, 理状态

上图中用三种颜色的框框出了三个比较重要的知识点:

<强> 1。日志备份以外的备份不会截断日志

从最左边的红框标志的两次日志备份的first_lsn和last_lsn可以看到整个两次日志备份的lsn是连续的从“45000000016800179”,“45000000038400001”,两次日志备份的lsn涵盖了所有备份的lsn。也就是中间的copyonly完整备份和差异备份不会截断日志()

2。仅复制完整备份不能作为差异备份的基准备份

从中间的截框“database_backup_lsn”列可以看的到,所有的后面的备份都基于第一次完整备份作为基准备份。

<强> 3。完整,差异,仅复制完整备份会触发检查点

最后一个截框“checkpoint_lsn”可以看到除了日志备份,其它的三种备份都会触发检查点,大家也通过查询缓冲查看is_modify字段是否被修改来判断。

4。仅复制完整备份可以作为日志备份的基准备份

这个在上面的截图中没有体现出来,但是可以看到日志备2份的lsn是涵盖了第三次仅复制备份的lsn,仅复制完整备份其实可以理解成数据库在一个时间点的快照,而日志备份是记录所有更改的日志操作,可以用来执行重做。所以如果将第3次仅复制完整备份+第5次日志备份是可以还原所有的数据。

第3次仅复制完整备份+第5次日志备份它=(第1次完整备份+第4次差异备份+第5次日志备份)=(第1次完整备份+第2次日志备份+第5次日志备份)

理状态"置疑"解copyonly备份操作