パーティション テーブルとパーティション インデックスのレプリケート
大きなテーブルやインデックスをパーティション分割すると、データのサブセットに対するアクセスや管理を迅速かつ効率的に行うと同時に、データ コレクションの整合性を維持することができるので、大きなテーブルやインデックスを管理しやすくなります。詳細については、「パーティション テーブルとパーティション インデックス」を参照してください。レプリケーションでは、パーティション テーブルとパーティション インデックスを扱う方法を指定するプロパティ セットによって、パーティション分割をサポートします。
トランザクション レプリケーションおよびマージ レプリケーションのアーティクルのプロパティ
次の表に、データのパーティション分割に使用されるオブジェクトを示します。
オブジェクト |
作成に使用するステートメント |
---|---|
パーティション テーブルまたはパーティション インデックス |
CREATE TABLE または CREATE INDEX |
パーティション関数 |
CREATE PARTITION FUNCTION |
パーティション構成 |
CREATE PARTITION SCHEME |
パーティション分割に関連するプロパティの最初のセットは、パーティション分割するオブジェクトをサブスクライバーにコピーするかどうかを指定するアーティクルのスキーマ オプションです。これらのスキーマ オプションは次の方法で設定できます。
パブリケーションの新規作成ウィザードの [アーティクルのプロパティ] ページ、または [パブリケーションのプロパティ] ダイアログ ボックス。上記の表に示したオブジェクトをコピーするには、[テーブル分割構成のコピー] プロパティと [インデックス分割構成のコピー] プロパティに、値 true を指定します。[アーティクルのプロパティ] ページへのアクセス方法については、「パブリケーションとアーティクルのプロパティを表示および変更する方法 (SQL Server Management Studio)」を参照してください。
次のいずれかのストアド プロシージャの schema_option パラメーターの使用。
トランザクション レプリケーションの sp_addarticle または sp_changearticle
マージ レプリケーションの sp_addmergearticle または sp_changemergearticle
上記の表に示したオブジェクトをコピーするには、適切なスキーマ オプション値を指定します。スキーマ オプションを指定する方法については、「スキーマ オプションを指定する方法 (レプリケーション Transact-SQL プログラミング)」を参照してください。
レプリケーションでは、初期同期中にオブジェクトがサブスクライバーにコピーされます。パーティション構成で PRIMARY 以外のファイル グループを使用する場合、そのファイル グループは初期同期の前にサブスクライバーに存在している必要があります。
サブスクライバーが初期化された後、データ変更がサブスクライバーに反映され、適切なパーティションに適用されます。ただし、パーティション構成に対する変更はサポートされていません。トランザクション レプリケーションとマージ レプリケーションでは、ALTER PARTITION FUNCTION、ALTER PARTITION SCHEME、ALTER INDEX の REBUILD WITH PARTITION ステートメントはサポートされません。ALTER TABLE の SWITCH PARTITION コマンドは、マージ レプリケーションではサポートされませんが、トランザクション レプリケーションではサポートされます。詳細については、次のセクションを参照してください。スナップショット レプリケーションでは、パーティション構成の変更は許可されていません。これは、サブスクライバーがパブリケーションと同期するたびにスナップショットが再初期化されるためです。
トランザクション レプリケーションとマージ レプリケーションでは、テーブルまたはインデックスあたり最大 1024 個のパーティションがサポートされます。
レプリケーションによるパーティション切り替えのサポート
テーブル分割の主な利点の 1 つは、パーティション間でデータのサブセットをすばやく効率的に移動できることです。データは SWITCH PARTITION コマンドを使用して移動します。詳細については、「パーティションの切り替えを使用した効率的なデータの転送」を参照してください。既定では、テーブルのレプリケーションが有効な場合、SWITCH PARTITION 操作は次の理由でブロックされます。
パブリッシャーに存在するテーブルを移動元または移動先としてデータを移動する場合に、そのデータがサブスクライバーに存在しないと、パブリッシャーとサブスクライバーの間で不整合が発生します。この問題は、一般に、ステージング テーブルにかかわるデータの移動で発生します。
サブスクライバーにパブリッシャーとは異なるパーティション テーブルの定義がある場合、ディストリビューション エージェントが変更をサブスクライバーに適用しようとすると失敗します。SQL Server 2000 はパーティション テーブルをサポートしていないため、これは SQL Server 2000 サブスクライバーでも発生する問題です。
このような問題が発生する可能性はありますが、トランザクション レプリケーションでパーティション切り替えを有効にすることができます。パーティション切り替えを有効にする前に、パーティション切り替えに関連するすべてのテーブルがパブリッシャーとサブスクライバーに存在し、テーブル定義およびパーティション定義が同じであることを確認してください。
パーティションのパーティション構成がパブリッシャーとサブスクライバーでまったく同じ場合、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 を実行するには、パブリケーションからテーブルを削除します。