复制已分区表和索引

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

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

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

对象

使用以下内容创建

已分区表或已分区索引

CREATE TABLE 或 CREATE INDEX

分区函数

CREATE PARTITION FUNCTION

分区方案

CREATE PARTITION SCHEME

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

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

在初始化订阅服务器后,数据更改传播到订阅服务器上,并应用于相应的分区。不过,不支持对分区方案的更改。事务复制和合并复制不支持下列命令:ALTER INDEX 的 ALTER PARTITION FUNCTION、ALTER PARTITION SCHEME 或 REBUILD WITH PARTITION 语句。合并复制不支持 ALTER TABLE 的 SWITCH PARTITION 命令,但事务复制支持,如下一节所述。快照复制不允许对分区方案进行更改,因为每次订阅服务器与发布同步时,都将重新初始化快照。

事务复制和合并复制支持每个表或索引最多 1024 个分区。

复制支持分区切换

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

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

  • 如果订阅服务器和发布服务器具有不同的已分区表定义,当分发代理尝试在订阅服务器上应用更改时将失败。因为 SQL Server 2000 不支持已分区表,所以这对于 SQL Server 2000 订阅服务器也是一个问题。

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

分区在发布服务器和订阅服务器上具有完全相同的分区方案时,您可以同时启用 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,请从发布中删除该表。