Oracle Database
Partizionamento delle tabelle
Ricerca…
introduzione
Osservazioni
Il partizionamento è un'opzione di costo aggiuntivo e disponibile solo per l'edizione Enterprise.
Hash partizionamento
Questo crea una tabella partizionata da hash, in questo esempio sull'id del negozio.
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;
È necessario utilizzare una potenza pari a 2 per il numero di partizioni hash, in modo da ottenere una distribuzione uniforme nella dimensione della partizione.
Range partitioning
Questo crea una tabella partizionata da intervalli, in questo esempio sui valori dell'ordine.
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)
);
Seleziona le partizioni esistenti
Controllare le partizioni esistenti su Schema
SELECT * FROM user_tab_partitions;
Elenco partizionamento
Questo crea una tabella partizionata da liste, in questo esempio sull'id del negozio.
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)
);
Rilascia la partizione
ALTER TABLE table_name DROP PARTITION partition_name;
Seleziona i dati da una partizione
Seleziona i dati da una partizione
SELECT * FROM orders PARTITION(partition_name);
Tronca una partizione
ALTER TABLE table_name TRUNCATE PARTITION partition_name;
Rinominare una partizione
ALTER TABLE table_name RENAME PARTITION p3 TO p6;
Sposta la partizione in un tablespace diverso
ALTER TABLE table_name
MOVE PARTITION partition_name TABLESPACE tablespace_name;
Aggiungi nuova partizione
ALTER TABLE table_name
ADD PARTITION new_partition VALUES LESS THAN(400);
Divisione partizione
Divide alcune partizioni in due partizioni con un altro limite elevato.
ALTER TABLE table_name SPLIT PARTITION old_partition
AT (new_high_bound) INTO (PARTITION new_partition TABLESPACE new_tablespace,
PARTITION old_partition)
Unisci partizioni
Unisci due partizioni in una sola
ALTER TABLE table_name
MERGE PARTITIONS first_partition, second_partition
INTO PARTITION splitted_partition TABLESPACE new_tablespace
Scambio di una partizione
Scambia / converti una partizione in una tabella non partizionata e viceversa. Questo facilita un rapido "spostamento" di dati tra i segmenti di dati (opposto a fare qualcosa come "inserire ... selezionare" o "creare tabella ... come selezionare") come l'operazione è DDL (l'operazione di scambio di partizione è un dato aggiornamento del dizionario senza spostare i dati effettivi) e non DML (overhead di annullamento / ripristino di grandi dimensioni).
La maggior parte degli esempi di base:
- Convertire una tabella non partizionata (tabella "B") in una partizione (della tabella "A"):
La tabella "A" non contiene dati nella partizione "OLD_VALUES" e la tabella "B" contiene dati
ALTER TABLE "A" EXCHANGE PARTITION "OLD_VALUES" WITH TABLE "B";
Risultato: i dati vengono "spostati" dalla tabella "B" (non contiene dati dopo l'operazione) alla partizione "OLD_VALUES"
- Convertire una partizione in una tabella non partizionata:
La tabella "A" contiene dati nella partizione "OLD_VALUES" e la tabella "B" non contiene dati
ALTER TABLE "A" EXCHANGE PARTITION "OLD_VALUES" WITH TABLE "B";
Risultato: i dati vengono "spostati" dalla partizione "OLD_VALUES" (non contiene dati dopo l'operazione) alla tabella "B"
Nota: ci sono alcune opzioni, caratteristiche e restrizioni aggiuntive per questa operazione
Ulteriori informazioni sono disponibili su questo link ---> " https://docs.oracle.com/cd/E11882_01/server.112/e25523/part_admin002.htm#i1107555 " (sezione "Scambio di partizioni")