复制已分区表和索引

由于使用分区可以快速而有效地管理和访问数据子集,并同时保持数据集合的完整性,因而使大型表或索引更易于管理。 有关详细信息,请参阅已分区表和已分区索引。 复制支持分区,提供了一组属性来指定如何处理已分区表和索引。

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

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

对象

使用以下内容创建

已分区表或已分区索引

CREATE TABLE 或 CREATE INDEX

分区函数

CREATE PARTITION FUNCTION

分区方案

CREATE PARTITION SCHEME

与分区相关的第一组属性是项目架构选项,用于决定是否应将分区对象复制到订阅服务器。 可以按下列方式设置这些架构选项:

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

  • 通过使用以下其中一个存储过程的 schema_option 参数:

    若要复制上一个表中列出的对象,请指定相应架构选项值。 有关如何指定架构选项的信息,请参阅指定架构选项

在初始同步阶段,复制会将这些对象复制到订阅服务器。 如果分区方案使用的文件组不是 PRIMARY 文件组,则在进行初步同步之前,这些文件组必须位于订阅服务器上。

在初始化订阅服务器后,数据更改传播到订阅服务器上,并应用于相应的分区。 不过,不支持对分区方案的更改。 事务复制和合并复制不支持下列命令:ALTER INDEX 的 ALTER PARTITION FUNCTION、ALTER PARTITION SCHEME 或 REBUILD WITH PARTITION 语句。 合并复制不支持 ALTER TABLE 的 SWITCH PARTITION 命令,但事务复制支持,如下一节所述。

复制支持分区切换

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

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

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

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

当分区在发布服务器和订阅服务器上具有完全相同的分区方案时,您可以启用 allow_partition_switch 和 replication_partition_switch,这会只将分区切换语句复制到订阅服务器。 您也可以启用 allow_partition_switch 而不复制 DDL。 这在以下情况下非常有用:您希望从分区中淘汰已经过的月份,但为另一年保留复制的分区,以便在订阅服务器上进行备份。

注意事项注意

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

启用分区切换

使用事务发布的下列属性,用户可以控制已复制环境中分区切换的行为。

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

  • @replicate_partition_switch 确定 SWITCH PARTITION DDL 语句是否应复制到订阅服务器。 仅当 @allow_partition_switch 设置为 true 时,此选项才有效。

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

请参阅

概念

发布数据和数据库对象