このトピックでは、範囲分割と間隔範囲分割を切り替える方法について説明します。
レンジパーティションテーブルをインターバルレンジパーティションテーブルに変更する
ALTER TABLE...SET INTERVALステートメントを実行して、既存の範囲分割テーブルを間隔範囲分割テーブルに変更します。
範囲または時間間隔を設定すると、データベースは指定された範囲または時間間隔に基づいてパーティションを自動的に作成します。 次に、データが新しいパーティションに挿入されます。
ステートメントは次の形式を使用します。
ALTER TABLE <table_name> SET INTERVAL (<constant> | <expression>);
INTERVALパラメーターの詳細については、「間隔範囲の分割」をご参照ください。
間隔範囲分割テーブルを範囲分割テーブルに変更する
SET INTERVAL() ステートメントを実行して、間隔範囲のパーティション分割を無効にします。 間隔範囲パーティション分割を無効にすると、データベースは間隔範囲パーティション分割テーブルを範囲パーティション分割テーブルに変更します。 間隔範囲分割を実施するための範囲または時間間隔は、範囲分割を実施するための範囲または時間間隔に変更される。
ステートメントは次の形式を使用します。
ALTER TABLE <table_name> SET INTERVAL ();
例
次の例は、販売テーブルをレンジパーティションテーブルからインターバルレンジパーティションテーブルに変更し、そこにデータを挿入する方法を示しています。
次の例に示すように、salesという名前のレンジパーティションテーブルを作成します。
テーブルの販売を作成する
(
prod_id int,
prod_quantity int、
sold_month日付
)
範囲によるパーティー (sold_month)
(
パーティーp1
より少ない値 ('15-JAN-2019 ') 、
パーティーp2
より少ない値 ('15-FEB-2019 ')
);
次の例に示すように、ALL_TAB_PARTITIONSビューを照会します。
SELECT partition_name、ALL_TAB_PARTITIONSからのhigh_value;
次の応答が返されます。
partition_name | high_value
---------------- + ----------------------
P1 | FOR VALUES FROM ('15-JAN-19 00:00:00 ') TO ('15-FEB-19 00:00:00')
P2 | (ミンバル) から ('15-JAN-19 00:00:00 ') までの値
(2行)
次の例に示すように、レンジパーティションテーブルをインターバルレンジパーティションテーブルに変更します。
ALTER TABLE sales SET INTERVAL (NUMTOYMINTERVAL(1、'MONTH'));
次の例に示すように、レンジパーティションを超えるデータを挿入します。
販売値に挿入 (1,100、'05-APR-2019 ');
挿入0 1
データを挿入した後、次の例に示すように、ALL_TAB_PARTITIONSビューを再度クエリします。
SELECT partition_name、ALL_TAB_PARTITIONSからのhigh_value;
データが挿入されると、システムは間隔範囲パーティションの名前を生成します。 名前はセッションによって異なります。 次の応答が返されます。
partition_name | high_value
---------------- + ----------------------
SYS596430103 | ('15-MAR-19 00:00:00 ') から ('15-APR-19 00:00:00') までの値
P1 | FOR VALUES FROM ('15-JAN-19 00:00:00 ') TO ('15-FEB-19 00:00:00')
P2 | (ミンバル) から ('15-JAN-19 00:00:00 ') までの値
(3行)