Component-based Snapshot创建过程中的数据流如图Figure 1所示,整个过程分为如下五个阶段:
· 备份初始化(Backup initialization)
· 备份发现(Backup discovery)
· 预备份(Prebackup)
· 文件的实际备份(Actual backup of files)
· 备份终止(Backup termination)
figure1
备份初始化(Backup initialization)
在此阶段,Requestor(备份应用程序,以下简称Requestor)获得IVssBackupComponents对象并初始化该对象为备份准备状态。Requestor调用IVssGatherWriterMetadata VSS API以通知VSS Framework 去收集所有writer的元数据。此时VSS framework会通过激发OnIdentify事件来获得包括SQL Writer在内的所有已注册writer的元数据,而SQL Writer在处理OnIndentify事件时,会去查询SQL Server实例来获得每个数据库的备份元数据从而创建自己的元数据文档(Writer metadata document),该阶段也被称作元数据枚举阶段。
Writer的元数据文档中包含如下信息,有些会被传递给requestor.
· 应用程序的ID和名字(friendly name)
· 文件和组件所在的位置
· 需要在备份中包含和剔出的文件
· 还原时应该使用的选项。该信息会被传递给Requestor
Sql Writer的元数据文档
Sql writer元数据文档是Sql writer使用IVssCreateWriterMetadata接口创建的XML文档。它包含writer的组件和状态信息,细节如下:
Writer的标识信息
· Writer Name– L”SQLWriter”
· Writer class ID : 0xa65faa63, 0x5ea8, 0x4ebc, 0x9d, 0xbd, 0xa0, 0xc4, 0xdb, 0x26, 0x91, 0x2a
· Writer instance – L"SQL Server 2005:SQLWriter”
· VSSUsageType – VSS_UT_USERDATA
· VSSSourceType – VSS_ST_TRANSACTEDDB
Writer级别信息– VSS_APP_BACK_END
还原方法指南– VSS_RME_RESTORE_IF_CAN_REPLACE
支持的备份schema–(IVssCreateWriterMetadata::SetBackupSchema API)
· VSS_BS_DIFFERENTIAL–Differential备份
· VSS_BS_TIMESTAMPED– Timestamp-based, 针对full-text catalog files
· VSS_BS_LAST_MODIFY– 基于last modify time的Differential备份
· VSS_BS_WRITER_SUPPORTS_NEW_TARGET – 支持新的还原目标就是把数据库文件(MDF,NDF,LDF)还原到新的位置。
· VSS_BS_WRITER_SUPPORTS_RESTORE_WITH_MOVE – 支持 restore “with move”
· VSS_BS_COPY – 支持 “copy-only” 备份选项
· Type – VSS_CT_FILEGROUP
组件级别的信息
包含SQL Writer提供的特定于组件基本的信息。
· Name – 组件的名字 (数据名字)
· Logical path – 数据库实例的. 命名实例的格式是 “server/instance-name” ,默认实例的格式是"server”.
· 组件标记
VSS_CF_APP_ROLLBACK_RECOVERY – Indicates that SQL Server snapshots always require a “recovery” phase to make the files consistent and useable for non-backup (app-rollback) scenarios.
· Selectable – True
· Selectable for Restore – True
支持的还原方法 – VSS_RME_RESTORE_IF_CAN_REPLACE
SQL Server2005中组件集的唯一扩展就是full-text catalogs的引入。full-text catalogs是不能作为VSS数据库和log文件来表示的容器目录,原因是VSS数据文件和log文件没有递归标准。因此,SQL writer用VSS文件组组件表示数据库级别的组件并且文件组文件代表数据,log,full-text catalog文件。