Oracle Database
Tabelindeling
Zoeken…
Invoering
Opmerkingen
Partitioneren is een extra kostenoptie en alleen beschikbaar voor de Enterprise-editie.
Hash partitionering
Hiermee maakt u een tabel gepartitioneerd door hash, in dit voorbeeld op winkel-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;
U moet een macht van 2 gebruiken voor het aantal hash-partities, zodat u een gelijkmatige verdeling in partitiegrootte krijgt.
Bereikindeling
Hiermee maakt u een tabel gepartitioneerd door bereiken, in dit voorbeeld op bestelwaarden.
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)
);
Selecteer bestaande partities
Controleer bestaande partities op schema
SELECT * FROM user_tab_partitions;
Lijstindeling
Hiermee maakt u een tabel gepartitioneerd door lijsten, in dit voorbeeld op winkel-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)
);
Drop partitie
ALTER TABLE table_name DROP PARTITION partition_name;
Selecteer gegevens van een partitie
Selecteer gegevens van een partitie
SELECT * FROM orders PARTITION(partition_name);
Een partitie afkappen
ALTER TABLE table_name TRUNCATE PARTITION partition_name;
Hernoem een partitie
ALTER TABLE table_name RENAME PARTITION p3 TO p6;
Verplaats partitie naar andere tabelruimte
ALTER TABLE table_name
MOVE PARTITION partition_name TABLESPACE tablespace_name;
Nieuwe partitie toevoegen
ALTER TABLE table_name
ADD PARTITION new_partition VALUES LESS THAN(400);
Partitie splitsen
Splitst een partitie in twee partities met een andere high-bound.
ALTER TABLE table_name SPLIT PARTITION old_partition
AT (new_high_bound) INTO (PARTITION new_partition TABLESPACE new_tablespace,
PARTITION old_partition)
Partities samenvoegen
Voeg twee partities samen in één
ALTER TABLE table_name
MERGE PARTITIONS first_partition, second_partition
INTO PARTITION splitted_partition TABLESPACE new_tablespace
Wissel een partitie uit
Wissel / converteer een partitie naar een niet-gepartitioneerde tabel en vice versa. Dit vergemakkelijkt een snelle "verplaatsing" van gegevens tussen de gegevenssegmenten (in tegenstelling tot iets als "invoegen ... selecteren" of "tabel maken ... als selecteren") aangezien de bewerking DDL is (de partitie-uitwisselingsbewerking is een gegevens woordenboekupdate zonder de feitelijke gegevens te verplaatsen) en niet DML (grote overhead ongedaan maken / opnieuw uitvoeren).
Meest elementaire voorbeelden:
- Converteer een niet-gepartitioneerde tabel (tabel "B") naar een partitie (van tabel "A"):
Tabel "A" bevat geen gegevens in partitie "OLD_VALUES" en tabel "B" bevat gegevens
ALTER TABLE "A" EXCHANGE PARTITION "OLD_VALUES" WITH TABLE "B";
Resultaat: gegevens worden "verplaatst" van tabel "B" (bevat geen gegevens na bewerking) naar partitie "OLD_VALUES"
- Converteer een partitie naar een niet-gepartitioneerde tabel:
Tabel "A" bevat gegevens in partitie "OLD_VALUES" en tabel "B" bevat geen gegevens
ALTER TABLE "A" EXCHANGE PARTITION "OLD_VALUES" WITH TABLE "B";
Resultaat: gegevens worden "verplaatst" van partitie "OLD_VALUES" (bevat geen gegevens na bewerking) naar tabel "B"
Opmerking: er zijn nogal wat extra opties, functies en beperkingen voor deze bewerking
Verdere info is te vinden op deze link ---> " https://docs.oracle.com/cd/E11882_01/server.112/e25523/part_admin002.htm#i1107555 " (sectie "Partities uitwisselen")