オラクルがパーティショニングをどのように再定義するか
Oracleパーティションを再定義するには、次の手順を実行します。
- まず、定義し直すパーティションのテーブルを確認する必要があります。以下のクエリを使用してテーブルのパーティション情報を検索できます:
- SELECT table_name, partition_name, partition_position FROM user_tab_partitions WHERE table_name = ‘あなたのテーブル名’;
- そして、新しいパーティション定義を含むパーティションテンプレートを作成する必要があります。次のコマンドを使用してパーティションテンプレートを作成できます。
- CREATE TABLE YOUR_TABLE_NAME_TEMP
PARTITION BY RANGE (PARTITION_COLUMN)
(
PARTITION PARTITION_NAME_1 VALUES LESS THAN (PARTITION_VALUE_1),
PARTITION PARTITION_NAME_2 VALUES LESS THAN (PARTITION_VALUE_2),
…
PARTITION PARTITION_NAME_N VALUES LESS THAN (PARTITION_VALUE_N)
)
AS SELECT * FROM YOUR_TABLE_NAME WHERE 1 = 0; - これらのコマンドで、YOUR_TABLE_NAME をパーティションを再定義するテーブル名に、PARTITION_COLUMN をパーティションに使用する列の名前に、PARTITION_NAME_1 から PARTITION_NAME_N を新しいパーティション名に、PARTITION_VALUE_1 から PARTITION_VALUE_N を新しいパーティションのパーティション値に置き換える必要があります。
- 次に、既存パーティションのデータを新しいパーティションにコピーする必要があります。以下のコマンドを使用して、旧テーブルから新テーブルにデータをコピーできます。
- INSERT INTO YOUR_TABLE_NAME_TEMP
SELECT *
FROM YOUR_TABLE_NAME PARTITION BY LIST (OLD_PARTITION_NAME); - 上のコマンドにおいて、YOUR_TABLE_NAME_TEMPは前の手順で作成したテンポラリテーブル名、YOUR_TABLE_NAMEはパーティションを再定義するテーブル名、OLD_PARTITION_NAMEはデータをコピーする旧パーティション名にそれぞれ置き換える必要があります。
- その後、以下のコマンドで旧パーティションの名前を変更して、新規パーティションのテンポラリテーブルを削除できます。
- ALTER TABLE YOUR_TABLE_NAME RENAME PARTITION OLD_PARTITION_NAME TO NEW_PARTITION_NAME;
DROP TABLE YOUR_TABLE_NAME_TEMP; - 上記のコマンドでは、YOUR_TABLE_NAME を再定義するパーティションのあるテーブル名に、OLD_PARTITION_NAME をリネーム前の古いパーティション名に、NEW_PARTITION_NAME を新しいパーティション名に、YOUR_TABLE_NAME_TEMP を2番で作成した中間テーブル名にそれぞれ置き換えてください。
パーティションの再定義後に、以下のコマンドを使用して新しいパーティションの定義が正しく作成されたことを確認できます。
SELECT table_name, partition_name, partition_position
FROM user_tab_partitions
WHERE table_name = 'YOUR_TABLE_NAME';
パーティションの定義を変更すると、テーブルのインデックスと制約が無効になる可能性があるので注意してください。新しいパーティション定義に適合するように、これらのインデックスと制約を再作成または再構築する必要があるかもしれません。このプロセスを実行する前に、データをバックアップしてください。