Cos'è Oracle Partitioned Table?
Il partizionamento divide una tabella, un indice o una tabella organizzata per indice in componenti più piccoli. Ogni componente è chiamato partizione (o sottopartizione per oggetti partizionati compositi). Ogni partizione ha un nome univoco e, facoltativamente, può avere caratteristiche di archiviazione individuali:gli esempi includono la compressione o l'archiviazione in tablespace diversi. Una strategia di partizionamento ben progettata può migliorare l'accesso alle query e gli aggiornamenti limitando l'operazione a una singola o sottoserie di partizioni.
Partizionamento per prestazioni – Eliminazione delle partizioni
La funzione Oracle Partitioned table consente a Query Optimizer di ignorare le partizioni che non sono richieste da una particolare istruzione SQL. A seconda dell'istruzione SQL, l'ottimizzatore può identificare le partizioni e le sottopartizioni a cui è necessario accedere, nonché quelle che non lo fanno. Ciò può comportare miglioramenti sostanziali delle prestazioni delle query, poiché l'ottimizzatore si concentra su un sottoinsieme specifico di dati che può essere ulteriormente perfezionato se esistono predicati aggiuntivi.
L'ottimizzatore esegue questa operazione utilizzando le informazioni sulla partizione archiviate nel dizionario dati per identificare il contenuto di una partizione senza interrogare i dati in essa contenuti. Il partizionamento è un livello aggiuntivo del dizionario di dati tra tabelle/indici e tablespace
Limitazione della tabella partizionata
In Oracle Database 11g, una tabella può avere un massimo di 1048575 (1024K – 1) partizioni. Con la sola eccezione delle tabelle contenenti colonne di tipi di dati LONG o LONG RAW, tutte le tabelle possono essere partizionate (comprese le colonne di tipo CLOB o BLOB).
Tipo di partizioni di tabelle
Il partizionamento è disponibile nel database Oracle dalla versione 8.0 e Oracle aggiunge continuamente sempre più funzionalità ad ogni versione. La tabella seguente mostra un riepilogo delle principali modifiche
Le principali strategie di partizione fornite da Oracle sono
(1)Range
(2)List
(3) Hash
(4)Composite
Come creare la tabella delle partizioni
A seconda dei tipi di partizione, ecco come creare la tabella delle partizioni
Partizionamento dell'intervallo
Oracle Partiziona i dati in base a intervalli consecutivi di valori della chiave di partizione.
Il punto finale di ciascuna partizione viene specificato utilizzando la seguente sintassi:
VALUES LESS THAN (value-list)
Esempio
CREATE TABLE EXP_RANGE (ID NUMBER(15) NOT NULL, CODE_ID NUMBER(15) NOT NULL, PERIOD_NAME VARCHAR2(15) NOT NULL, ACTUAL_FLAG VARCHAR2(1) NOT NULL, VERSION_ID NUMBER(15), LAST_UPDATE_DATE DATE NOT NULL, . . . . . . ) PARTITION BY RANGE (PERIOD_NAME) ( PARTITION PR1 VALUES LESS THAN ('JAN-2019'), PARTITION PR2 VALUES LESS THAN ('FEB-2019') . . . . . . );
Il partizionamento dell'intervallo è utile per il partizionamento dei dati storici e delle transazioni, poiché i limiti della partizione dell'intervallo definiscono l'ordine della partizione nelle tabelle e negli indici
Elenco partizionamento
In questo metodo, Oracle associa righe specifiche a partizioni, in base a un elenco statico di valori letterali. La chiave di partizione per il partizionamento degli elenchi può essere basata solo su una singola colonna.
CREATE TABLE EXP_LIST (ID NUMBER NOT NULL, ORG_ID NUMBER, OPEN_FLAG VARCHAR2(4) NOT NULL, . . . . . . ) PARTITION BY LIST (open_flag) ( PARTITION PR1 VALUES ('YES'), PARTITION PR2 VALUES ('NO') );
Partizionamento hash
In questo oracolo è stato utilizzato l'algoritmo di hashing per decidere il posizionamento fisico dei dati. Il partizionamento hash distribuirà i dati in modo uniforme su un numero fisso di partizioni.
CREATE TABLE EXP_HASH (ID NUMBER NOT NULL, ORG_ID NUMBER, ORDERED_ITEM VARCHAR2(2000), OPEN_FLAG VARCHAR2(1) NOT NULL, . . . . . . ) PARTITION BY HASH (ID) PARTITIONS 10 . . . . . .; );
Partizionamento composito
In questo oracolo è stata utilizzata la combinazione di range, list e hash partitioning.i metodi di partizionamento compositi sono range-hash o range-list.
CREATE TABLE sales_details ( prod_id NUMBER(6) , cust_id NUMBER , time_id DATE , channel_id VARCHAR2(1) , promo_id NUMBER(6) , quantity_sold NUMBER(3) , amount_sold NUMBER(10,2) ) PARTITION BY RANGE (time_id) SUBPARTITION BY HASH (cust_id) SUBPARTITIONS 8 STORE IN (ts1, ts2, ts3, ts4) ( PARTITION sales_q1_2019 VALUES LESS THAN (TO_DATE('01-APR-2019','dd-MON-yyyy')) , PARTITION sales_q2_2019 VALUES LESS THAN (TO_DATE('01-JUL-2019','dd-MON-yyyy')) , PARTITION sales_q3_2019 VALUES LESS THAN (TO_DATE('01-OCT-2019','dd-MON-yyyy')) , PARTITION sales_q4_2019 VALUES LESS THAN (TO_DATE('01-JAN-2019','dd-MON-yyyy')) );
Come spostare l'oggetto esistente in Oggetto partizionato
Ci sono molti modi per raggiungere questa impresa. Sto spiegando qui il metodo semplicistico
1.Crea una tabella partizionata vuota usando la clausola partizionata e con l'opzione parallela. Il nome della tabella deve avere un nome diverso dalla tabella non partizionata.
2.Popolare i dati per la partizione richiesta dalla tabella non partizionata.
3. Prendi in considerazione l'utilizzo dell'hint APPEND Oracle con un'istruzione INSERT come semplice modifica del codice che offre buone prestazioni. Se la registrazione è abilitata e gli indici sono presenti, l'hint INSERT /*+ APPEND */ potrebbe non essere efficace. Per ridurre al minimo il sovraccarico della manutenzione dell'indice, eliminare gli indici prima della migrazione e ricrearli una volta che la tabella partizionata è stata popolata.
4.Rinominare la tabella partizionata come la tabella originale o modificare il sinonimo.
5. Crea indici di tabella per la tabella partizionata
Legge anche
Oracle Partition Index
Oracle Parallel Query
https://docs.oracle.com/cd/B28359_01/server.111/b32024/partition.htm