時間隔パーティション表を参照パーティション化の親表として使用できます。レコードを参照パーティション表に挿入すると、親表の時間隔パーティションに対応する参照パーティション表のパーティションが作成されます。
子表に時間隔パーティションを作成すると、パーティション名が関連付けられている親表フラグメントから継承されます。子表に表レベルのデフォルトの表領域がある場合、新しい時間隔パーティションの表領域として使用され、それ以外の場合は表領域が親表フラグメントから継承されます。
SQL ALTER TABLE SET INTERVAL文は参照パーティション表に使用できませんが、参照パーティションの子を持つ表で実行できます。特に、ALTER TABLE SET INTERVALは、ターゲット表から時間隔プロパティを削除して、時間隔 - 参照の子を通常の参照パーティション表に変換します。SQL ALTER TABLE SET STORE IN文も参照パーティション表に使用できませんが、参照パーティションの子を持つ表で実行できます。
時間隔パーティションのALTER TABLE SPLIT PARTITIONなど、親表の時間隔パーティションを従来のパーティションに変換する操作は、子表に対応する変換を作成し、必要に応じて子表にパーティションを作成します。
たとえば、次のSQL文では、親表に3つの時間隔パーティションを指定し、子表には何も指定していません。
CREATE TABLE par(pk INT CONSTRAINT par_pk PRIMARY KEY, i INT) PARTITION BY RANGE(i) INTERVAL (10) (PARTITION p1 VALUES LESS THAN (10)); CREATE TABLE chi(fk INT NOT NULL, i INT, CONSTRAINT chi_fk FOREIGN KEY(fk) REFERENCES par(pk)) PARTITION BY REFERENCE(chi_fk); INSERT INTO par VALUES(15, 15); INSERT INTO par VALUES(25, 25); INSERT INTO par VALUES(35, 35);
USER_TAB_PARTITIONSビューを使用して、パーティションの情報を表示できます。
SELECT table_name, partition_position, high_value, interval
FROM USER_TAB_PARTITIONS WHERE table_name IN ('PAR', 'CHI')
ORDER BY 1, 2;
TABLE_NAME PARTITION_POSITION HIGH_VALUE INT
---------------- ------------------ ---------- ---
CHI 1 NO
PAR 1 10 NO
PAR 2 20 YES
PAR 3 30 YES
PAR 4 40 YES
時間隔パーティションが親表で分割される場合、階層のすべての表に対して一部の時間隔パーティションが従来のパーティションに変換され、処理中に子表に従来のパーティションを作成します。次に例を示します。
ALTER TABLE par SPLIT PARTITION FOR (25) AT (25)
INTO (partition x, partition y);
SELECT table_name, partition_position, high_value, interval
FROM USER_TAB_PARTITIONS WHERE table_name IN ('PAR', 'CHI')
ORDER BY 1, 2;
TABLE_NAME PARTITION_POSITION HIGH_VALUE INT
---------------- ------------------ ---------- ---
CHI 1 NO
CHI 2 NO
CHI 3 NO
CHI 4 NO
PAR 1 10 NO
PAR 2 20 NO
PAR 3 25 NO
PAR 4 30 NO
PAR 5 40 YES
時間隔 - 参照機能は、データベース互換性レベル(Oracle Database COMPATIBLE初期化パラメータ設定)を12.0.0.0以上に設定する必要があります。