复制分区表和索引

分区使大型表或索引更易于管理,因为分区使你能够快速高效地管理和访问数据子集,并同时维护数据收集的完整性。 有关详细信息,请参阅 Partitioned Tables and Indexes。 复制通过提供一组属性来支持分区,这些属性指定应如何处理分区表和索引。

事务复制和合并复制的项目属性

下表列出了用于对数据进行分区的对象。

物体 使用 创建
分区表或索引 CREATE TABLE 或 CREATE INDEX
分区函数 创建分区函数
分区方案 创建分区方案

与分区相关的第一组属性是文章架构选项,用于确定是否应将分区对象复制到订阅者。 可以通过以下方式设置这些架构选项:

  • 在“新建发布向导”或“发布属性”对话框的“文章属性”页中。 若要复制上表中列出的对象,请为属性“复制表分区方案”和“复制索引分区方案”指定值true。 有关如何访问 “项目属性” 页的信息,请参阅 “查看和修改发布属性”。

  • 使用以下存储过程之一的 schema_option 参数:

    若要复制上表中列出的对象,请指定适当的架构选项值。 有关如何指定架构选项的信息,请参阅 “指定架构选项”。

复制在初始同步期间将对象复制到订阅服务器。 如果分区方案使用 PRIMARY 文件组以外的文件组,则在初始同步之前,这些文件组必须存在于订阅服务器上。

初始化订阅服务器后,数据更改将传播到订阅服务器并应用于相应的分区。 但是,不支持对分区方案的更改。 事务复制和合并复制不支持复制以下命令:ALTER PARTITION FUNCTION、ALTER PARTITION SCHEME 或 ALTER INDEX 的 REBUILD WITH PARTITION 语句。 与其关联的更改不会自动复制到订阅者。 用户有责任在订阅者处手动进行类似的更改。

对分区切换的复制支持

表分区的主要优点之一是能够在分区之间快速高效地移动数据子集。 使用 SWITCH PARTITION 命令移动数据。 默认情况下,为复制启用表时,将由于以下原因阻止 SWITCH PARTITION 操作:

  • 如果数据移入或移出位于发布服务器上但不存在于订阅服务器上的表,则发布服务器和订阅服务器可能会彼此不一致。 将数据移入或移出临时表时,通常会发生此问题。

  • 如果订阅服务器对分区表的定义不同于发布服务器,则当分发代理尝试在订阅服务器上应用更改时,将失败。

尽管存在这些潜在问题,但可以为事务复制启用分区切换。 启用分区切换之前,请确保在发布服务器和订阅服务器上存在分区切换所涉及的所有表,并确保表和分区定义相同。

当发布者和订阅者上的分区具有完全相同的分区方案时,可以启用 allow_partition_switchreplication_partition_switch,这样只会将分区切换语句同步到订阅者。 还可以在不复制 DDL 的情况下打开 allow_partition_switch 。 在需要将旧月的数据从分区中移除,但将复制的分区再保留一年以便在订阅方进行备份的情况下,这会非常有用。

如果通过当前版本在 SQL Server 2008 R2 上启用分区切换,则在不久的将来可能还需要拆分和合并作。 在对复制表执行拆分或合并操作之前,请确保相关分区没有任何挂起的复制命令。 还应确保在拆分和合并操作时不对分区执行 DML操作。 如果日志读取器未处理某些事务,或者在对复制表的分区进行拆分或合并操作(涉及同一分区)时执行了DML操作,则可能会导致日志读取器代理出现处理错误。 若要更正错误,可能需要重新初始化订阅。

警告

由于用于检测和解决冲突的隐藏列,不应为对等发布启用分区切换。

启用分区切换

事务发布的以下属性使用户能够控制复制环境中的分区切换行为:

  • @allow_partition_switch设置为 trueSWITCH PARTITION 时,可以针对发布数据库执行 SWITCH PARTITION。

  • @replicate_partition_switch 确定是否应将 SWITCH PARTITION DDL 语句复制到订阅者。 此选项仅在 @allow_partition_switch 设置为 true时有效。

可以在创建发布时使用 sp_addpublication 设置这些属性,也可以在创建发布后使用 sp_changepublication 来设置这些属性。 如前所述,合并复制不支持分区切换。 若要对为合并复制启用的表执行 SWITCH PARTITION,请从发布中删除该表。

另请参阅

发布数据和数据库对象