默认情况下,事务发布的订阅是通过快照初始化的。这个快照由快照代理生成,并由分发代理进行应用。 在某些情况下,例如涉及大型初始数据集的数据集,最好使用其他方法初始化订阅。 初始化订阅服务器的其他方法包括:
指定备份。 在订阅端还原备份,然后分发代理复制任何所需的复制元数据和系统存储过程。 使用备份进行初始化是将数据传送到订阅服务器的最快捷方法,并且很方便,因为如果在启用发布后对备份进行初始化,则可以使用任何最近的备份。
通过另一种机制(例如附加数据库)将初始数据集复制到订阅服务器。 必须确保正确的数据和模式位于订阅者处,然后分发代理复制任何必需的元数据和系统存储过程。
使用备份来初始化订阅
备份包含整个数据库;因此,初始化发布数据库时,每个订阅数据库将包含发布数据库的完整副本:
备份包括未指定为发布用文章的表。
备份包括所有数据,即使对表指定了行或列筛选器也是如此。
管理员或应用程序有责任在还原备份后删除任何不需要的对象或数据。 在后续同步中,仅当数据更改应用于指定为文章的表时,才会复制这些更改,并且这些更改符合指定的任何筛选条件。
注释
还原备份时,如果希望订阅服务器自动同步,则必须确保备份来自发布服务器。 备份中的日志序列号(LSN)值用于设置同步开始点,它们是特定于发布者的。
使用备份初始化订阅
若要使用备份初始化订阅,必须先在创建发布时启用该选项,然后在创建订阅时指定多个选项的值。 可以通过新建发布向导或以编程方式启用发布。 但是,只能以编程方式指定订阅选项所需的值。
SQL Server Management Studio:启用使用备份进行事务发布初始化(SQL Server Management Studio)
复制 Transact-SQL 编程:从备份中初始化事务性订阅(复制 Transact-SQL 编程)
注释
如果在不使用快照的情况下初始化订阅,则 SQL Server 服务在发布服务器上运行的帐户必须对分发服务器上的快照文件夹具有写入权限。 有关权限的详细信息,请参阅 复制代理安全模型。
确保备份的适用性
如果执行备份后发生的所有事务都存储在分发服务器上,则备份适用于初始化订阅服务器。 如果备份不适合,复制将显示错误消息。
为了帮助确保备份适合使用,请遵循以下准则:
使用可用的最新备份,如果最新备份早于最大分发保留期,请在尝试使用备份初始化订阅之前创建新的备份。 有关保留期的详细信息,请参阅 订阅过期和停用。
默认情况下,分发清理作业从分发数据库清除超过 72 小时的事务。 清理基于为发布设置的保留期。 与旧备份同步时,请考虑在成功创建订阅后先暂时禁用该作业,然后再还原并重新启用该作业。 这可以防止从分发数据库中删除可能需要从备份成功同步的事务。 有关运行清理作业的信息,请参阅“运行复制维护作业”(SQL Server Management Studio)。
在某些情况下,在设置使用备份初始化的订阅后,必须在还原的订阅数据库中手动执行自定义。 一般情况下,如果发布的定义方式使得预期订阅服务器数据库内容会与发布服务器数据库内容不同,则需要在还原的订阅服务器数据库中进行手动修改。
如果在已恢复数据库的索引视图作为日志型索引视图到表的文章发布,则必须将其转换为表。
已还原数据库的已经订阅的时间戳列必须转换为二进制(8)列:将包含时间戳列的表的内容复制到新表中,新表具有与原表相同的架构,但时间戳列替换为二进制(8)列。然后删除原始表,并将新表重命名为原始表的名称。
使用替代方法初始化订阅
可以使用任何方法初始化订阅,以便将发布数据库架构和数据复制到订阅方,例如 Integration Services。 使用替代方法初始化订阅服务器时,复制支持对象将复制到订阅服务器。
与使用备份初始化不同,你或应用程序必须确保在添加订阅时正确同步数据和架构。 例如,如果在将数据和架构复制到订阅服务器和添加订阅的时间之间存在发布服务器上的活动,则此活动产生的更改可能不会复制到订阅服务器。
若要使用替代方法初始化订阅,请参阅 手动初始化订阅。