In Oracle Database 18c ora cambiamo la strategia di partizionamento online di una tabella tramite l'istruzione SQL "ALTER TABLE MODIFY PARTITION".
Questa nuova funzionalità ci consente di adattare il metodo di partizionamento di una tabella senza richiedere alcun tempo di inattività associato per apportare la modifica.
A meno che non specifichi la clausola "UPDATE INDEXES" come parte dell'istruzione "ALTER TABLE":
– Il database contrassegna INUTILIZZABILI tutte le partizioni o sottopartizioni di indice locali corrispondenti risultanti.
– Gli indici globali, o tutte le partizioni di indici globali partizionati, sono contrassegnati come INUTILIZZABILI e devono essere ricostruiti.
Questo esempio fornisce una dimostrazione passo passo delle attività necessarie per convertire la tabella delle partizioni RANGE in una tabella delle partizioni HASH.
Visualizza le partizioni della tabella ATP01_CRED_PAG:
# sqlplus / as sysdba SQL*Plus: Release 18.0.0.0.0 - Production on Wed Jun 17 16:39:51 2020 Version 18.2.0.0.0 Copyright (c) 1982, 2018, Oracle. All rights reserved. Connected to: Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production Version 18.2.0.0.0 SQL> select table_name, partition_name, partition_position from dba_tab_partitions where table_name='ATP01_CRED_PAG'; TABLE_NAME PARTITION_NAME PARTITION_POSITION ----------------------------------------------------- ATP01_CRED_PAG PART_199501 1 ATP01_CRED_PAG PART_199412 2 ATP01_CRED_PAG PART_199506 3 SQL> select count(1) from ATP01_CRED_PAG partition (PART_199501); COUNT(1) ---------- 3908 SQL> select count(1) from ATP01_CRED_PAG partition (PART_199412); COUNT(1) ---------- 3984 SQL> select count(1) from ATP01_CRED_PAG partition (PART_199506); COUNT(1) ---------- 1363
Visualizza il metodo di partizionamento (RANGE) della tabella ATP01_CRED_PAG:
SQL> select owner, table_name, partitioning_type, autolist, interval, autolist_subpartition from dba_part_tables where table_name = 'ATP01_CRED_PAG'; OWNER TABLE_NAME PARTITION AUT INTERVAL AUT -------- -------------- -------- ---- --------- ------ ADMIN ATP01_CRED_PAG RANGE NO NO
Converti tabella partizionata RANGE in tabella partizionata HASH ONLINE:
SQL> ALTER TABLE ATP01_CRED_PAG MODIFY PARTITION BY HASH (DT_COMPETENCIA) PARTITIONS 3 ONLINE; Table altered.
Visualizza il nuovo metodo di partizionamento (HASH):
SQL> select owner, table_name, partitioning_type, autolist, interval, autolist_subpartition from dba_part_tables where table_name = 'ATP01_CRED_PAG'; OWNER TABLE_NAME PARTITION AUT INTERVAL AUT -------- ------------- --------- --- -------- ----- ADMIN ATP01_CRED_PAG HASH NO NO
Visualizza le partizioni della tabella:
SQL> select table_name, partition_name, partition_position from dba_tab_partitions where table_name='ATP01_CRED_PAG'; TABLE_NAME PARTITION_NAME PARTITION_POSITION ----------------- ---------------- ------------------ ATP01_CRED_PAG SYS_P621 1 ATP01_CRED_PAG SYS_P622 2 ATP01_CRED_PAG SYS_P623 3 SQL> select count(1) from ATP01_CRED_PAG partition (SYS_P621); COUNT(1) ---------- 2651 SQL> select count(1) from ATP01_CRED_PAG partition (SYS_P622); COUNT(1) ---------- 6604 SQL> select count(1) from ATP01_CRED_PAG partition (SYS_P623); COUNT(1) ---------- 0
Riferimenti
Operazioni di manutenzione per tabelle e indici partizionati. Disponibile su https://docs.oracle.com/en/database/oracle/oracle-database/18/vldbg/maintenance-partition-tables-indexes.html#GUID-0E7793F7-B38A-427E-846B-7A8651F2A523