Zu Oracle

Bereich:
Versionsinfo:
DBA, SQL, Neuerungen 9i
9.2.0.8, 10.2.0.4, 11.1.0.6
Erstellung:
Letzte Überarbeitung:
01/2003 MP
06/2009 MM
 Als PDF Downloaden!

LIST Partitionierung

Die List Partitionierung ermöglicht es Zeilen in Partitionen abzulegen, die vom Partitionierungskriterium in einer Werteliste zusammen gefasst sind.

Beispiele für die Einteilung können sein:

  • Partitionierung nach Beruf

    • Partition1: MANAGER und SALESMAN
    • Partition2: CLERK und PRESIDENT
    • Partition3: ANALYST
  • Partitionierung nach Abteilung
    • Partition1: 10,30
    • Partition2: 20,40 

Beispiel:

CREATE TABLE emp_listpart
    
(
      mitarb_nr NUMBER(10),
      vorname   VARCHAR2(20),
      nachname  VARCHAR2(20),
      abteilung NUMBER(3),
      beruf     VARCHAR2(100)
     )
     PARTITION BY LIST (beruf)
     (
      PARTITION beruf_1 VALUES ('MANAGER','SALESMAN'),
      PARTITION beruf_2 VALUES ('CLERK','PRESIDENT'),
      PARTITION beruf_unbekannt VALUES (NULL)
     );


Folgende Einschränkungen gelten für die List-Partitionierung:

  • Nur für normale Tabellen verfügbar (ab Version 10g auch für index-organisierte (IOT)) 
  • Mehrspaltige Partitionierung ist nicht erlaubt. 
  • Alle Einträge der Werteliste müssen eindeutig sein. 
  • NULL ist ein gültiger Eintrag in der Werteliste. 
  • Es gibt kein MAXVALUE wie bei der Range-Partitionierung. 
  • Alle Wertelisten müssen auf jeden Fall mindestens einen Wert besitzen. 
  • Die Wertelisten können nicht größer sein als 4KB. 


Vorteile:

  • Partition Pruning, Partition Wise Joins und Parallelisierung werden unterstützt. 
  • Lokale Indizes und globale Bereichs-Partitionierte-Indizes werden unterstützt.
  • Wertebereiche müssen nicht aneinander grenzen


Operationen mit List-Partitionen:

CREATE TABLE emp_list (
      
empno     NUMBER(6),
       ename     VARCHAR2(20),
       hiredate  date,
       deptno    number(2))
     PARTITION BY LIST (deptno)(
       PARTITION u_werte VALUES (10, 30) TABLESPACE users_1,
       PARTITION g_werte VALUES (20, 40) TABLESPACE users_2);

SELECT table_name, partition_name partition, high_value,
            partition_position position
       FROM user_tab_partitions
      WHERE table_name='EMP_LIST';

TABLE_NAME PARTITION HIGH_VALUE POSITION
---------- --------- ---------- --------
EMP_LIST   G_WERTE        20,40        2
EMP_LIST   U_WERTE        10,30        1

Wenn aus der List Partition Werte gelöscht werden sollen, kann DROP VALUES benutzt werden:

ALTER TABLE emp_list MODIFY PARTITION g_werte DROP VALUES (40);

SELECT table_name, partition_name partition, high_value,            
       partition_position position
  FROM user_tab_partitions
 WHERE table_name='EMP_LIST';

TABLE_NAME  PARTITION  HIGH_VALUE POSITION
----------- ---------- ---------- --------
EMP_LIST    G_WERTE            20        2
EMP_LIST    U_WERTE         10,30        1

Mit der Option ADD Values können wieder Werte zu einer Partition hinzugefügt werden:

ALTER TABLE emp_list MODIFY PARTITION g_werte ADD VALUES (40);

Auch neue Partitionen lassen sich nachträglich hinzufügen mit:

ALTER TABLE emp_list ADD PARTITION s_werte VALUES (0, -10);

TABLE_NAME PARTITION HIGH_VALUE POSITION
---------- --------- ---------- --------
EMP_LIST   G_WERTE        20,40        2
EMP_LIST   S_WERTE        0,-10        3
EMP_LIST   U_WERTE        10,30        1

Wenn zwei Partition zur einer verschmolzen werden sollen benutzt man MERGE PARTITIONS:

ALTER TABLE emp_list MERGE PARTITIONS u_werte, s_werte
  INTO PARTITION u_werte;

TABLE_NAME PARTITION     HIGH_VALUE POSITION
---------- --------- -------------- --------
EMP_LIST   G_WERTE               20        2
EMP_LIST   U_WERTE   0, -10, 10, 30        1

Mit der Option SPLIT PARTITION kann eine Partition in zwei aufteilt werden:

ALTER TABLE emp_list SPLIT PARTITION u_werte VALUES (0)
  INTO (PARTITION n_werte, PARTITION u_werte);

Zum Umbenennen einer Partition wird RENAME PARTITION benutzt:

ALTER TABLE emp_list RENAME PARTITION g_werte TO gerade_werte;

Wenn eine Partition mit TRUNCATE geleert werden soll, kann folgende Syntax benutzt werden:

ALTER TABLE emp_list TRUNCATE PARTITION u_werte DROP STORAGE;

Suche

Kontakt

Telefon:
  089 6228 6789-0

Telefon (gültig bis Ende 2010):
  089 679090-40

E-Mail Verteiler Monatstipps

Bitte nehmen Sie mich in den Verteiler der monatlichen Tipps & Tricks auf.