Ricerca…


introduzione

Il partizionamento è una funzionalità per dividere tabelle e indici in parti più piccole. È usato per migliorare le prestazioni e gestire i pezzi più piccoli individualmente. La chiave di partizione è una colonna o un insieme di colonne che definisce in quale partizione verrà memorizzata ciascuna riga. Panoramica del partizionamento nella documentazione ufficiale di Oracle

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:

  1. 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"

  1. 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")



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow