間隔範囲分割は、範囲分割の拡張である。 これにより、挿入されるデータが既存のパーティションの範囲を超えると、データベースは自動的にパーティションを作成できます。
間隔範囲パーティション分割を実装するには、interval句を含め、新しいパーティションの範囲サイズを指定する必要があります。 範囲区分キー値は、範囲区分の高い値を決定する。 挿入されるデータの値が指定された高い値を超えると、データベースは新しいデータを格納するパーティションを作成します。
間隔を1か月に設定したとします。 挿入されるデータが現在の遷移点から2か月後に生成されたデータを参照する場合、データが属する月のパーティションのみが作成されます。 その間の月のパーティションは作成されません。 遷移点はキー値である。 データが遷移点を超えると、データは次の間隔範囲パーティションに挿入されます。 間隔範囲分割テーブルを作成するとします。 間隔は1か月で、現在の移行ポイントは2019年2月15日です。 2019年5月10日のデータを挿入しようとすると、データベースは2019年5月15日2019月15日のパーティションを作成します。 次に、このパーティションにデータが挿入されます。 2019年2月15日2019日から3月15日までのパーティションと2019年3月15日2019日から4月15日までのパーティションはスキップされます。
制限事項
- 間隔範囲の分割は、単一のパーティションキーに制限されます。 このキーは、数値または日付範囲を指定する必要があります。
- 少なくとも1つのレンジパーティションを定義する必要があります。
- インデックス編成テーブルにINTERVAL句を使用することはできません。
- リストパーティションテーブルにドメインインデックスを作成することはできません。
- パーティションキー列にNULL、Not-a-Number、またはInfinityの値を指定することはできません。
- 区間範囲分割を実装するために使用される式は、非負の定数値を生成する必要があります。
- 間隔範囲パーティションテーブルのパーティションは、昇順でのみ作成できます。
構文
CREATE TABLE [スキーマ] 。 ]<table_name>
<table_definition>
RANGEによるパーティション (<column>[, <column> ]...)
[INTERVAL (<constant> | <expression>)]
[SUBPARTITION BY {RANGE | リスト | ハッシュ} (<column>[, <column> ]...)]
(<range_partition_definition>[, <range_partition_definition>]...);
range_partition_definitionは次のとおりです。
PARTITION [<partition_name>]
より少ない値 (<value>[, <value>]...)
[TABLESPACE <tablespace_name>]
[(<サブパーティション>, ...)]
INTERVAL
パラメーターは、数値と時間間隔のみをサポートします。
- 数値インターバル
次のステートメントは、10個ごとに隣接する番号を1つのパーティションに挿入します。
インターバル (10)
- 時間間隔
- 年
次のステートメントは、年ごとの自動パーティショニングを設定します。
インターバル (NUMTOYMINTERVAL(1、'year'))
- 月
次のステートメントは、月ごとの自動パーティショニングを設定します。
INTERVAL (NUMTOYMINTERVAL(1、'month'))
- 日
次のステートメントは、日ごとの自動パーティショニングを設定します。
INTERVAL (NUMTODSINTERVAL(1,'day '))
- 週
次のステートメントは、週ごとの自動パーティショニングを設定します。
INTERVAL (NUMTODSINTERVAL(7、'day '))
- 年
その他のパラメーターについては、「CREATE TABLE... 」をご参照ください。 パーティー
例
次の例では、salesテーブルは、指定された間隔でsold_month列に基づいてパーティション分割されます。 レンジパーティションは、遷移ポイントを確立するために作成されます。 遷移ポイントを超えた値は、新しいパーティションに挿入されます。
次の例に示すように、区間範囲分割テーブルを作成し、テーブルにデータを追加します。
テーブルの販売を作成する
(
prod_id int,
prod_quantity int、
sold_month日付
)
範囲によるパーティー (sold_month)
インターバル (NUMTOYMINTERVAL(1、'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行)
次の例に示すように、レンジパーティションの高値を超えるデータをsalesテーブルに挿入します。
販売値に挿入 (1,200、'10-MAY-2019 ');
挿入0 1
データを挿入した後、次の例に示すように、ALL_TAB_PARTITIONSビューを再度クエリします。
SELECT partition_name、ALL_TAB_PARTITIONSからのhigh_value;
データが挿入されると、システムは間隔範囲パーティションの名前を生成します。 名前はセッションによって異なります。 次の応答が返されます。
partition_name | high_value
---------------- + ----------------------
SYS596430103 | ('15-APR-19 00:00:00 ') から ('15-MAY-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行)