备份发现阶段(Backup discovery):
在这个阶段,Requestor检查writer的元数据,创建Backup Component Document并用每个需要备份的component来填充该Backup Component Document。Requestor也会指定需要的备份设置和参数作为Backup Component Document的一部分。对于SQLWriter,每个需要备份的数据库实例都是一个独立的component。
Backup Components Document
Backup Components Document是Requestor在配置restore或backup操作时调用接口 IVssBackupComponents创建的一个XML文档。Backup Components Document文档中包含来自一个或多个writer的需要参与备份还原操作的,显示选择的components列表。它不包含隐式选择的组件信息。相比较而言,writer的元数据文档只包含可能参与备份的writer components。VSS API文档中有关于Backup component document结构信息的详细描述。
预备份任务(Prebackup Task)
VSS Prebackup的主要任务是创建包含需要备份数据的volumes的shadow copy。Requestor会从shadow copy中获得要保存的数据,而不是从实际的volume上。Requestor通常会在备份准备和shadow copy创建阶段等待writers。如果writer将参与备份操作,它就需要配置自己的文件并且为备份和shadow copy做好准备。
Prepare for backup
Requestor需要使用IVssBackupComponents接口的SetBackupState方法设置将执行的备份操作的类型,然后通过VSS通知writers准备备份(使用IVssBackupComponents::PrepareForBackup函数)。SQLWriter能够访问Backup Component Document。所有将备份的volumes都应该放到volume snapshot set中。SQLWriter将检测残缺的数据库(备份volumes不在snapshot set中)并在处理PostSnapshot事件是失败。
Initiate Snapshot
Requestor将通过调用VSS Framework的DoSnapshotSet方法初始化snapshot过程。
Create Snapshot
这个阶段VSSframework和SQLWriter之间有一系列的交互。实际上,所有的writer都会参与这个阶段,一个应用程序一个writer。
1. Prepare for snapshot
SQLWriter通知SQL Server准备snapshot的创建。
2. Freeze
SQLWriter通知SQL server冻结每个在snapshot备份的数据库的所有IO操作。Freeze事件返回到VSS framework之后,VSS将创建snapshot。
3. Thaw
SQLWriter在接到这个事件时(此事件由VSS发起),会通知Sql server解冻或者恢复正常的IO操作。
提示:snapshot创建阶段非常快,少于60秒,这样可以防止阻塞所有对数据库的写操作。
Post-Snapshot
如果snapshot需要auto-recovery,那么SQLWriter会为snapshot中的每个DB做auto-recovery.
文件的实际备份(Actual Backup of Files)
在这个阶段,如果需要,Requestor可以把数据移到备份媒介上。这个阶段的交换主要发生在requestor和VSS framework之间,SQL Writer并不参与。分为如下两步:
1.获得Writer的状态
返回writer的状态,Requestor可能需要在这里处理任何失败。
2.备份
此时,Requestor如果需要就可以把数据移到备份媒介上。
Backup Complete
这个事件暗示备份成功完成。这也是SQLWriter可以把这次备份提交为差异备份的基准的时候,如果当前的备份是数据库的full备份而不是copy-only备份。
提示:Requestor必须显示的发送Backup complete 事件给SQLWriter,从而让SQLWriter提交差异备份基准。如果没有收到Backup complete 事件,那么所创建的备份就不能作为差异备份的基准。
Save Writer Metadata
Requestor应该保存Backup component文档和每个writer的元数据。SQLWriter和Sql server在还原时需要使用Writer的元数据。
备份终止(Backup Termination)
Requestor通过释放IVssBackupComponents接口或者调用IVssBackupComponents::DeleteSnapshots函数来终止shadow copy。