Suche…


Einführung

Partitionieren ist eine Funktion zum Aufteilen von Tabellen und Indizes in kleinere Teile. Es wird verwendet, um die Leistung zu verbessern und die kleineren Teile einzeln zu verwalten. Der Partitionsschlüssel ist eine Spalte oder eine Menge von Spalten, die definiert, in welcher Partition jede Zeile gespeichert wird. Überblick über die Partitionierung in der offiziellen Oracle-Dokumentation

Bemerkungen

Partitionieren ist eine zusätzliche Option und nur für die Enterprise Edition verfügbar.

Hash-Partitionierung

Dadurch wird eine durch Hash partitionierte Tabelle erstellt, in diesem Beispiel für die Store-ID.

CREATE TABLE orders (
    order_nr NUMBER(15),
    user_id VARCHAR2(2),
    order_value NUMBER(15),
    store_id NUMBER(5)
) 
PARTITION BY HASH(store_id) PARTITIONS 8;

Sie sollten eine Potenz von 2 für die Anzahl der Hash-Partitionen verwenden, um eine gleichmäßige Verteilung der Partitionsgröße zu erhalten.

Bereichsaufteilung

Dadurch wird eine nach Bereichen partitionierte Tabelle erstellt, in diesem Beispiel nach Auftragswerten.

CREATE TABLE orders (
    order_nr NUMBER(15),
    user_id VARCHAR2(2),
    order_value NUMBER(15),
    store_id NUMBER(5)
) 
PARTITION BY RANGE(order_value) (
    PARTITION p1 VALUES LESS THAN(10), 
    PARTITION p2 VALUES LESS THAN(40), 
    PARTITION p3 VALUES LESS THAN(100),
    PARTITION p4 VALUES LESS THAN(MAXVALUE)
); 

Wählen Sie vorhandene Partitionen aus

Überprüfen Sie die vorhandenen Partitionen im Schema

SELECT * FROM user_tab_partitions;

Partitionierung auflisten

Dadurch wird eine durch Listen partitionierte Tabelle erstellt, in diesem Beispiel für die Store-ID.

CREATE TABLE orders (
    order_nr NUMBER(15),
    user_id VARCHAR2(2),
    order_value NUMBER(15),
    store_id NUMBER(5)
) 
PARTITION BY LIST(store_id) (
    PARTITION p1 VALUES (1,2,3), 
    PARTITION p2 VALUES(4,5,6),
    PARTITION p3 VALUES(7,8,9),
    PARTITION p4 VALUES(10,11)
);

Partition ablegen

ALTER TABLE table_name DROP PARTITION partition_name;

Wählen Sie Daten von einer Partition aus

Wählen Sie Daten von einer Partition aus

SELECT * FROM orders PARTITION(partition_name);

Eine Partition abschneiden

ALTER TABLE table_name TRUNCATE PARTITION partition_name;

Benennen Sie eine Partition um

ALTER TABLE table_name RENAME PARTITION p3 TO p6;

Verschieben Sie die Partition in einen anderen Tabellenbereich

ALTER TABLE table_name 
MOVE PARTITION partition_name TABLESPACE tablespace_name;

Neue Partition hinzufügen

ALTER TABLE table_name 
ADD PARTITION new_partition VALUES LESS THAN(400);

Partition aufteilen

Teilt eine Partition in zwei Partitionen mit einer anderen hohen Grenze auf.

ALTER TABLE table_name SPLIT PARTITION old_partition 
    AT (new_high_bound) INTO (PARTITION new_partition TABLESPACE new_tablespace,
    PARTITION old_partition)

Partitionen zusammenführen

Verbinden Sie zwei Partitionen zu einer einzigen

ALTER TABLE table_name
  MERGE PARTITIONS first_partition, second_partition
  INTO  PARTITION  splitted_partition TABLESPACE new_tablespace

Tauschen Sie eine Partition aus

Tauschen Sie eine Partition in eine nicht partitionierte Tabelle um und umgekehrt. Dies ermöglicht ein schnelles "Verschieben" von Daten zwischen den Datensegmenten (im Gegensatz zu "Einfügen ... Auswählen" oder "Erstellen einer Tabelle ... Auswahl"), da die Operation DDL ist (die Partitionsaustauschoperation ist eine Datenmenge) Wörterbuchaktualisierung ohne Verschieben der tatsächlichen Daten) und nicht DML (großer Undo / Redo-Overhead).

Grundlegende Beispiele:

  1. Konvertieren Sie eine nicht partitionierte Tabelle (Tabelle "B") in eine Partition (von Tabelle "A"):

Tabelle "A" enthält keine Daten in Partition "OLD_VALUES" und Tabelle "B" enthält Daten

ALTER TABLE "A" EXCHANGE PARTITION "OLD_VALUES" WITH TABLE "B";

Ergebnis: Daten werden aus Tabelle "B" (enthält nach der Operation keine Daten) in die Partition "OLD_VALUES" verschoben.

  1. Konvertieren Sie eine Partition in eine nicht partitionierte Tabelle:

Tabelle "A" enthält Daten in Partition "OLD_VALUES" und Tabelle "B" enthält keine Daten

ALTER TABLE "A" EXCHANGE PARTITION "OLD_VALUES" WITH TABLE "B";

Ergebnis: Daten werden von der Partition "OLD_VALUES" (enthält nach der Operation keine Daten) in die Tabelle "B" verschoben.

Hinweis: Für diesen Vorgang gibt es einige zusätzliche Optionen, Funktionen und Einschränkungen

Weitere Informationen finden Sie unter diesem Link ---> " https://docs.oracle.com/cd/E11882_01/server.112/e25523/part_admin002.htm#i1107555 " (Abschnitt "Partitionen austauschen").



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow