快照复制是通过快照代理程序和分发代理程序实现的。快照代理程序准备快照文件,其中包含了已发布表和数据库对象的架构和数据,然后将这些文件存储在快照文件夹中,并在分发服务器上的分发数据库中记录同步作业。快照文件夹默认位于分发服务器上,但可以指定一个备用位置取代默认位置或者与之并存。有关更多信息,请参见备用快照位置。
分发代理程序将保存在分发数据库表中的快照移动到订阅服务器上的目的表中。分发数据库仅用于复制,不包含任何用户表。
快照代理程序
快照代理程序每次运行时,都会检查是否新增了任何新订阅。如果没有新订阅,则不创建任何新的脚本或数据文件。如果创建发布时启用了"立即创建第一个快照"选项,则每次快照代理程序运行时都创建新的架构和数据文件。所有架构和数据文件都存储在快照文件夹中,然后由分发代理程序或合并代理程序将它们传送到订阅服务器,也可以手工传送。快照代理程序执行以下步骤:
建立从分发服务器到发布服务器的连接,并在发布所包含的所有表上设置共享锁。共享锁保证了数据快照的一致性。由于这些共享锁阻止所有其他用户更新这些表,所以快照代理程序必须安排在数据库活动的非峰值期间执行。
建立从发布服务器到分发服务器的连接,并将每个项目的表架构复制到一个 .sch 文件。如果要求包含索引和描述性引用完整性,则代理程序将选中索引写入一个 .idx 文件。其它数据库对象,如存储过程、视图、用户定义函数等,也可以作为复制的一部分进行发布。
在发布服务器上复制已发布表中的数据,并将这些数据写入快照文件夹。如果所有订阅服务器都是 Microsoft? SQL Server? 2000 实例,则将快照存储为本机大容量复制程序文件。如果一个或多个订阅服务器为异类数据源,则快照将按字符模式文件存储。这些文件是代表一个时点的表的同步集合。一次发布内的每一个项目都有一个同步集。
向分发数据库的 MSrepl_commands 表和 MSrepl_transactions 表追加行。MSrepl_commands 表中的表项是表明同步集(.sch 文件和 .bcp 文件)位置的命令,以及对所有指定的预创建脚本的引用。MSrepl_transactions 表中的表项是引用订阅服务器同步任务的命令。
释放所有已发布表的共享锁,完成日志历史表的写入。
生成快照文件后,可以使用快照探索器在快照文件夹中查看这些快照文件。在 SQL Server 企业管理器中,展开"复制"及"发布"文件夹,右击一项发布,然后单击"浏览最新快照文件夹"菜单选项。有关更多信息,请参见浏览快照。
分发代理程序
每次分发代理程序运行快照发布时,都会将架构和数据移动到订阅服务器上。分发代理程序执行以下步骤:
建立从代理程序所在服务器到分发服务器的连接。如果是强制订阅,分发代理程序通常在分发服务器上运行,如果是请求订阅,分发代理程序通常在订阅服务器上运行。
检查分发服务器上的分发数据库中的 MSrepl_commands 表和 MSrepl_transactions 表。代理程序从第一个表中读取同步集的位置,并从这两个表中读取订阅服务器同步命令。
将架构和命令应用到订阅数据库。如果订阅服务器不是 Microsoft? SQL Server? 2000 实例,则代理程序将在必要时转换数据类型。所有发布项目均将同步,同步时保持基础表间的事务和引用完整性(假定订阅数据库如果不是 SQL Server,具有完成该任务的事务功能)。
当处理大量的订阅服务器时,在订阅服务器上运行分发代理程序(不论通过使用请求订阅,还是通过使用远程代理程序激活),可以节省分发服务器的处理资源。如果使用远程代理程序激活,可以选择在订阅服务器上运行分发代理程序进行强制订阅,或者在分发服务器上运行分发代理程序进行请求订阅。有关更多信息,请参见远程代理程序激活。
可以在创建订阅时应用快照,也可以按照创建发布时设置的调度应用快照。
说明 如果代理程序在分发服务器上运行,调度的同步是根据分发服务器上的日期和时间执行的,而不是根据订阅服务器上的日期和时间。否则,调度就根据订阅服务器上的日期和时间进行。
因为数据库或个别的表的自动同步增加了系统开销,所以加大自动同步的间隔时间的优点之一,是可以将初始快照安排在发布服务器较空闲的时候进行处理。
快照代理程序通常由 SQL Server 代理程序运行,可以直接用 SQL Server 企业管理器进行管理。快照代理程序与分发代理程序也可以通过使用 Microsoft ActiveX? 控件嵌入到应用程序中。快照代理程序在分发服务器中运行。对于强制订阅,分发代理程序通常在分发服务器上运行,而对请求订阅,则通常在订阅服务器上运行。但是,可以使用远程代理程序激活将分发代理程序处理卸载到另一个服务器上进行。
清除快照复制
创建分发数据库时,SQL Server 2000 在分发服务器上加入下列任务:
代理程序检查
事务清除
历史记录清除
这些任务有助于在一个长期运行的环境中有效地进行复制。当快照在所有订阅服务器上应用后,复制清除程序自动为初始快照删除其关联的 .bcp 文件。
如果为匿名订阅启用了发布,或用"立即创建第一个快照"选项启用了发布,则在快照位置将至少保留快照文件的一个副本。如果具有快照发布匿名订阅的订阅服务器与发布服务器同步,这将确保最新的快照是可用的。