パーティション テーブルとパーティション インデックスの変更

パーティション テーブルとパーティション インデックスは、次の方法で変更できます。

  • パーティション関数を変更して、そのパーティションに参加しているテーブルとインデックスを再パーティション分割します。

  • パーティション構成を変更して、新しく追加したパーティションを保持するファイル グループを指定します。

  • 非パーティション テーブルをパーティション テーブルに変換します。

  • パーティション テーブルを非パーティション テーブルに変換します。

  • パーティションを追加、移動、または削除することにより、データを転送します。

パーティション関数の変更

パーティション テーブルまたはパーティション インデックスのパーティション関数で、指定するパーティションの数を 1 つずつ増減させることにより、テーブルまたはインデックスのパーティション分割方法を変更できます。

パーティションを追加するには、既存のパーティションを 2 つのパーティションに分割し、新しいパーティションの境界を再定義します。パーティションを削除するには、2 つのパーティションの境界を 1 つのパーティションにマージします。この最後の操作により、1 つのパーティションが再作成され、もう 1 つのパーティションは未割り当てのままになります。

重要な注意事項重要

パーティションを追加するには、新しいパーティションを保持するためのファイル グループが存在し、そのグループが NEXT USED プロパティでマークされている必要があります。パーティション構成で NEXT USED ファイル グループを指定する方法の詳細については、このトピックの「パーティション構成の変更」を参照してください。

ALTER PARTITION FUNCTION は、1 つのパーティションを 2 つに分割するか、または 2 つのパーティションを 1 つにマージする目的にのみ使用できます。テーブルまたはインデックスのパーティション分割方法を変更する (たとえば 10 個のパーティションから 5 個のパーティションに変更する) には、次のいずれかの方法を使用できます。使用中のシステムの構成により、各方法で使用されるリソースの量は異なることがあります。

  • 適切なパーティション関数を使用して、新しいパーティション テーブルを作成します。次に、INSERT INTO...SELECT FROM ステートメントを使用して、古いテーブルから新しいテーブルにデータを挿入します。

  • ヒープにパーティション分割されたクラスタ化インデックスを作成します。

    注意

    削除されたパーティション インデックスにより、パーティション分割されたヒープが作成されます。

  • Transact-SQL CREATE INDEX コマンドを DROP EXISTING = ON 句と共に使用し、既存のパーティション インデックスを削除して、再構築します。

  • 一連の ALTER PARTITION FUNCTION ステートメントを実行します。

SQL Server では、パーティション関数を変更するためのレプリケーションがサポートされていません。パブリケーション データベースのパーティション関数に変更を加える場合は、サブスクリプション データベースでこの操作を手動で実行する必要があります。

パーティション関数を変更するには

パーティション構成の変更

パーティション テーブルに追加される次のパーティションを保持するファイル グループを指定することにより、パーティション構成を変更できます。この操作は、NEXT USED プロパティをファイル グループに割り当てることで実行できます。NEXT USED プロパティは、空のファイル グループか、またはパーティションを既に保持しているファイル グループに割り当てることができます。つまり、ファイル グループでは、複数のパーティションを保持することができます。

パーティション構成を変更するには

非パーティション テーブルからパーティション テーブルへの変換

次の 2 つの方法のいずれかを使用して、既存の非パーティション テーブルをパーティション テーブルに変換できます。

1 つ目の方法は、CREATE INDEX ステートメントを使用して、テーブルにパーティション分割されたクラスタ化インデックスを作成することです。基本的に SQL Server では、削除されたテーブルが、クラスタ化インデックスの形式で再作成されるので、この操作は任意のテーブルにクラスタ化インデックスを作成する操作に似ています。テーブルにパーティション分割されたクラスタ化インデックスが既に適用されている場合、CREATE INDEX コマンドを DROP EXISTING = ON 句と共に使用して、そのインデックスを削除して、パーティション構成にインデックスを再構築できます。

クラスタ化インデックスの詳細については、「クラスタ化インデックスの設計ガイドライン」を参照してください。

もう 1 つの方法は、Transact-SQL ALTER TABLE SWITCH ステートメントを使用してテーブルのデータを切り替えることによって、パーティションが 1 しかない "範囲パーティション" テーブルにすることです。変換を実行するには、このパーティション テーブルが存在しており、その単一のパーティションが空である必要があります。パーティションの切り替えの詳細については、「パーティションの切り替えを使用した効率的なデータの転送」を参照してください。テーブルをパーティション テーブルとして変更したら、上記の「パーティション関数の変更」で説明したように、そのテーブルのパーティション関数を変更してパーティションを追加できます。

既存のテーブルをパーティション テーブルに変換するには

パーティション テーブルから非パーティション テーブルへの変換

パーティション テーブルを非パーティション テーブルに変更するには、テーブルを構成するパーティションが 1 つだけになるように、パーティション テーブルのパーティション関数を変更します。このテーブルは、理論的には依然としてパーティション テーブルですが、その後テーブルに対して実行する操作には影響ありません。

テーブルにパーティション分割されたクラスタ化インデックスが適用されている場合は、インデックスを削除し、非パーティション インデックスとして再構築しても同じ結果を得られます。この操作は、Transact-SQL CREATE INDEX コマンドを DROP EXISTING = ON 句と共に使用することにより実行できます。

パーティション テーブルを変換し、パーティションを持たない標準のテーブルにするには

パーティションの切り替えによるデータの転送

Transact-SQL ALTER TABLE...SWITCH ステートメントを使用すると、パーティション テーブル間でデータ ブロックをすばやく効率的に転送できます。詳細については、「パーティションの切り替えを使用した効率的なデータの転送」を参照してください。