パーティション テーブルとパーティション インデックスのレプリケート

大きなテーブルやインデックスをパーティション分割すると、データのサブセットに対するアクセスや管理を迅速かつ効率的に行うと同時に、データ コレクションの整合性を維持することができるので、大きなテーブルやインデックスを管理しやすくなります。 詳細については、「パーティション テーブルとパーティション インデックス」を参照してください。 レプリケーションでは、パーティション テーブルとパーティション インデックスを扱う方法を指定するプロパティ セットによって、パーティション分割をサポートします。

トランザクション レプリケーションおよびマージ レプリケーションのアーティクルのプロパティ

次の表に、データのパーティション分割に使用されるオブジェクトを示します。

オブジェクト

作成に使用するステートメント

パーティション テーブルまたはパーティション インデックス

CREATE TABLE または CREATE INDEX

パーティション関数

CREATE PARTITION FUNCTION

パーティション構成

CREATE PARTITION SCHEME

パーティション分割に関連するプロパティの最初のセットは、パーティション分割するオブジェクトをサブスクライバーにコピーするかどうかを指定するアーティクルのスキーマ オプションです。 これらのスキーマ オプションは次の方法で設定できます。

  • パブリケーションの新規作成ウィザードの [アーティクルのプロパティ] ページ、または [パブリケーションのプロパティ] ダイアログ ボックス。 上記の表に示したオブジェクトをコピーするには、[テーブル分割構成のコピー] プロパティと [インデックス分割構成のコピー] プロパティに、値 true を指定します。 [アーティクルのプロパティ] ページへのアクセス方法については、「パブリケーション プロパティの表示および変更」を参照してください。

  • 次のいずれかのストアド プロシージャの schema_option パラメーターの使用。

    上記の表に示したオブジェクトをコピーするには、適切なスキーマ オプション値を指定します。 スキーマ オプションを指定する方法については、「スキーマ オプションの指定」を参照してください。

レプリケーションでは、初期同期中にオブジェクトがサブスクライバーにコピーされます。 パーティション構成で PRIMARY 以外のファイル グループを使用する場合、そのファイル グループは初期同期の前にサブスクライバーに存在している必要があります。

サブスクライバーが初期化された後、データ変更がサブスクライバーに反映され、適切なパーティションに適用されます。 ただし、パーティション構成に対する変更はサポートされていません。 トランザクション レプリケーションとマージ レプリケーションでは、ALTER PARTITION FUNCTION、ALTER PARTITION SCHEME、ALTER INDEX の REBUILD WITH PARTITION ステートメントはサポートされません。 ALTER TABLE の SWITCH PARTITION コマンドは、マージ レプリケーションではサポートされませんが、トランザクション レプリケーションではサポートされます。詳細については、次のセクションを参照してください。

レプリケーションによるパーティション切り替えのサポート

テーブル分割の主な利点の 1 つは、パーティション間でデータのサブセットをすばやく効率的に移動できることです。 データは SWITCH PARTITION コマンドを使用して移動します。 既定では、テーブルのレプリケーションが有効な場合、SWITCH PARTITION 操作は次の理由でブロックされます。

  • パブリッシャーに存在するテーブルを移動元または移動先としてデータを移動する場合に、そのデータがサブスクライバーに存在しないと、パブリッシャーとサブスクライバーの間で不整合が発生します。 この問題は、一般に、ステージング テーブルにかかわるデータの移動で発生します。

  • サブスクライバーにパブリッシャーとは異なるパーティション テーブルの定義がある場合、ディストリビューション エージェントが変更をサブスクライバーに適用しようとすると失敗します。

このような問題が発生する可能性はありますが、トランザクション レプリケーションでパーティション切り替えを有効にすることができます。 パーティション切り替えを有効にする前に、パーティション切り替えに関連するすべてのテーブルがパブリッシャーとサブスクライバーに存在し、テーブル定義およびパーティション定義が同じであることを確認してください。

パブリッシャーとサブスクライバーでパーティションにまったく同じパーティション構成が使用されている場合は、パブリッシャーへのパーティション切り替えステートメントのレプリケートのみを行う replication_partition_switch と共に、allow_partition_switch を有効にすることができます。 DDL をレプリケートしないで、allow_partition_switch を有効にすることもできます。 これは、過去の月をパーティションからロール アウトする一方、バックアップの目的で、レプリケートしたパーティションをサブスクライバーにもう 1 年保持する場合に便利です。

注記注意

ピア ツー ピア パブリケーションでは、非表示の列が競合の検出および解決のために使用されるため、パーティション切り替えを有効にしないでください。

パーティション切り替えの有効化

トランザクション パブリケーションの次のプロパティを使用すると、レプリケーション環境でのパーティション切り替えの動作を制御できます。

  • @allow_partition_switch を true に設定すると、パブリケーション データベースに対して SWITCH PARTITION を実行できます。

  • @replicate_partition_switch は、SWITCH PARTITION DDL ステートメントをサブスクライバーにレプリケートするかどうかを決定します。 このオプションは、@allow_partition_switch が true に設定されている場合にのみ有効です。

これらのプロパティは、パブリケーションの作成時に sp_addpublication を使用するか、パブリケーションの作成後に sp_changepublication を使用することによって設定できます。 既に述べたとおり、マージ レプリケーションではパーティション切り替えがサポートされません。 マージ レプリケーションが有効になっているテーブルで SWITCH PARTITION を実行するには、パブリケーションからテーブルを削除します。

関連項目

概念

データとデータベース オブジェクトのパブリッシュ