SQL> r 1 create table test_interval_partition 2 (col1 number) 3 partition by range (col1) 4 interval (1000) 5 (partition test_p1 values less than (1000) 6* ) Tabelle wurde erstellt.
"Interval" gibt dabei an, welchen Bereich ein automatisch angelegtes Intervall umfassen soll. Bei der Füllung der Tabelle werden nun nach Bedarf neue Intervalle angelegt. Zunächst ein Wert, der in die initial angelegte Partition fällt:
SQL> insert into TEST_INTERVAL_PARTITION values (999); 1 Zeile wurde erstellt. SQL> select table_name 2 , partition_name 3 , HIGH_VALUE 4 , PARTITION_POSITION 5 from user_tab_partitions t 6 where table_name = 'TEST_INTERVAL_PARTITION'; TABLE_NAME PARTITION_NAME HIGH_VALUE PARTITION_POSITION ------------------------------ --------------- ---------- ------------------ TEST_INTERVAL_PARTITION TEST_P1 1000 1
Jetzt folgt ein Wert, der außerhalb der ersten Partition liegt:
SQL> insert into TEST_INTERVAL_PARTITION values (1000); 1 Zeile wurde erstellt. SQL> select table_name 2 , partition_name 3 , HIGH_VALUE 4 , PARTITION_POSITION 5 from user_tab_partitions t 6 where table_name = 'TEST_INTERVAL_PARTITION'; TABLE_NAME PARTITION_NAME HIGH_VALUE PARTITION_POSITION ------------------------------ --------------- ---------- ------------------ TEST_INTERVAL_PARTITION TEST_P1 1000 1 TEST_INTERVAL_PARTITION SYS_P25 2000 2
Um den Wert unterbringen zu können, legt das System eine neue Partition SYS_P25 an, die erwartungsgemäß an Position 2 erscheint. Nun ein deutlich höherer Wert:
SQL> insert into TEST_INTERVAL_PARTITION values (10000); 1 Zeile wurde erstellt. SQL> select table_name 2 , partition_name 3 , HIGH_VALUE 4 , PARTITION_POSITION 5 from user_tab_partitions t 6 where table_name = 'TEST_INTERVAL_PARTITION'; TABLE_NAME PARTITION_NAME HIGH_VALUE PARTITION_POSITION ------------------------------ --------------- ---------- ------------------ TEST_INTERVAL_PARTITION TEST_P1 1000 1 TEST_INTERVAL_PARTITION SYS_P25 2000 2 TEST_INTERVAL_PARTITION SYS_P26 11000 3
Das System legt eine weitere Partition SYS_P26 an Position 3 an. Jetzt ein Wert für den Raum zwischen den beiden automatisch erzeugten Partitionen:
SQL> insert into TEST_INTERVAL_PARTITION values (5000); 1 Zeile wurde erstellt. SQL> select table_name 2 , partition_name 3 , HIGH_VALUE 4 , PARTITION_POSITION 5 from user_tab_partitions t 6 where table_name = 'TEST_INTERVAL_PARTITION'; TABLE_NAME PARTITION_NAME HIGH_VALUE PARTITION_POSITION ------------------------------ --------------- ---------- ------------------ TEST_INTERVAL_PARTITION TEST_P1 1000 1 TEST_INTERVAL_PARTITION SYS_P25 2000 2 TEST_INTERVAL_PARTITION SYS_P27 6000 3 TEST_INTERVAL_PARTITION SYS_P26 11000 4
Die neue Partition SYS_P27 rückt an Position 3 und SYS_P26 auf Position 4.
Funktioniert also alles ziemlich genau so, wie man es erwarten würde. Interval Partitioning funktioniert übrigens nur für NUMBER und DATE Partitionsschlüssel, aber andere würde ich ohnehin nicht definieren wollen.
In Harald van Breederodes Blog finden sich übrigens noch ein paar interessante Hinweise zum Löschen von interval partitions:
- http://prutser.wordpress.com/2010/01/11/dropping-interval-partitions/
- http://prutser.wordpress.com/2010/07/26/dropping-interval-partitions-revisited/
Keine Kommentare:
Kommentar veröffentlichen