SQL Server VSS--Component-Based snapshot创建过程

来源:互联网 发布:股票编程 java 编辑:程序博客网 时间:2024/04/29 07:30

备份发现阶段(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。

http://www.windobe.com