介质集、备份集、介质簇的了解
对于研究SQL Server备份的人来说,随着研究的深入,会接触到介质集、备份集、介质簇的概念。对我来说从字面上很难区分和理解这三者直接的区别。以下便整理整理这三者之间的关系
介质集
包含一个或多个备份介质的集合的备份构成一个介质集。"介质集”是“备份介质”(磁带或磁盘文件)的有序集合,使用固定类型和数量的备份设备向其写入一个或多个备份操作。介质集是在备份操作过程中通过格式化备份介质从而在备份介质上创建的。设置格式后,每个文件或磁带都包含介质集的介质标头,可以开始接收备份内容。有了标头后,备份操作会将指定数据备份到为该操作指定的所有备份设备中的备份介质。
介质簇
“介质簇”由在介质集中的单个非镜像设备或一组镜像设备上创建的备份构成。介质集所使用的备份设备的数量决定了介质集中的介质簇的数量。例如,如果介质集使用两个非镜像备份设备,则该介质集包含两个介质簇。
备份集
成功的备份操作将向介质集中添加一个“备份集”。从备份所属的介质集方面对备份集进行说明。如果备份介质只包含一个介质簇,则该簇包含整个备份集。如果备份介质包含多个介质簇,则备份集分布在各个介质簇之间。在每个介质上,备份集都包含说明备份集的标头。
单纯从以上的定义很难理解三者的定义,以下便说说我的理解
1、新建测试数据库,并进行首次完整备份;查看备份信息,如下图所示可知:每个备份集对应一个backup_set_id(1008),若此备份包含多个文件,则一个backup_set_id(1008)对应多个备份文件;可得出一个备份集可包含多个文件
--新建测试数据库 create database Test01 --修改恢复模式 alter database Test01 set recovery full with no_wait --完整备份测试数据库 backup database Test01 to disk =N'D:\backup\Test01_20140208_full.bak'
2、执行相同备份语句,再看备份信息,如下图可知:非覆盖原有备份方式从新执行备份;会往原有介质集media_set_id(1007)中添加备份集backup_set_id(1009);且此备份文件会增大,增量即为完整备份此数据库的大小。
--完整备份测试数据库 backup database Test01 to disk =N'D:\backup\Test01_20140208_full.bak'
3、执行可覆盖原有备份的脚本,如下图可知:备份集1011在介质集1007的position回到1的位置,且备份文件的大小已经回到第一次备份的大小,可见同类型同名称的备份集已经被覆盖;由此可能会有疑惑如果是日志备份名字与完整备份相同,是覆盖还是增加呢?
--完整备份测试数据库 backup database Test01 to disk =N'D:\backup\Test01_20140208_full.bak' with init
4、日志备份,名字与完整备份的名字相同,如下图可知:并不会覆盖原有备份文件,而是会在原1007介质集后添加新的备份集
--日志备份测试数据库 backup log Test01 to disk =N'D:\backup\Test01_20140208_full.bak' with init
5、不同日志名称的备份,如下图可知:此已经属于不同的介质集,对应不同的介质簇;由此提出疑问,是否一个新备份名称一个介质簇,是否一个备份名称一个介质集呢?
--日志备份测试数据库 backup log Test01 to disk =N'D:\backup\Test01_20140208_log.bak'
6、将备份分在不同备份文件中,取相同的介质集名称,如下图可知:新有三个介质簇,新增一个介质集;由此可知备份名称对应介质簇三;且此次备份会将数据平分到三个备份文件。
backup database Test01 to disk =N'D:\backup\Test01_20140208_full01.bak',disk =N'D:\backup\Test01_20140208_full02.bak',disk =N'D:\backup\Test01_20140208_full03.bak' MIRROR TO disk =N'D:\backup\Test01_20140208_full01.bak',disk =N'D:\backup\Test01_20140208_full02.bak',disk =N'D:\backup\Test01_20140208_full03.bak' with noinit,MEDIANAME = 'Test01MediaSet1'
总结:从上面的测试过程可以得出以下几点
1、介质集是备份介质(磁盘或磁带)的有序集合,任何多个备份只要在一定基础上,都可设置成一个介质集;因此一个介质集可包含多个介质簇。一个介质集可包含多个备份集。默认情况下,一个备份名称为一个介质集
2、介质簇为介质集中的单个非镜像设备或一组镜像设备上创建的备份,介质簇的数量与备份名称一一对应,介质簇的数量决定于备份设备的数量。因此若有多个镜像设备的时候,可以将备份分成多份存放在不同的镜像设备中。
3、每执行一个备份操作就会有一个备份集,一个备份集包含多个文件。
4、备份行为包括覆盖和非覆盖,由此建议日常自动化备份采用覆盖形式备份,以防止磁盘不足。
5、同类型备份(如完整备份)且同一个语句执行多次,会往同一个介质簇中追加[noinit]或覆盖[init]数据。若是不同类型备份同一个语句执行只会往介质簇中追加数据,不会覆盖。
6、每个备份介质集的开始以初始化介质标头为开始,新的介质集以新的介质标头为标志。若无新的介质标头,则说明此备份要么覆盖原有备份集,要么追加到原有备份集。