In Oracle Database 18c ändern wir jetzt die Partitionierungsstrategie einer Tabelle online über das SQL-Statement „ALTER TABLE MODIFY PARTITION“.
Diese neue Funktion ermöglicht es uns, die Partitionierungsmethode für eine Tabelle anzupassen, ohne dass eine damit verbundene Ausfallzeit für die Änderung erforderlich ist.
Es sei denn, Sie geben die Klausel „UPDATE INDEXES“ als Teil der „ALTER TABLE“-Anweisung an:
– Die Datenbank markiert alle resultierenden entsprechenden lokalen Indexpartitionen oder Unterpartitionen als UNVERWENDBAR.
– Globale Indizes oder alle Partitionen partitionierter globaler Indizes werden als UNVERWENDBAR markiert und müssen neu erstellt werden.
Dieses Beispiel demonstriert Schritt für Schritt die Aufgaben, die zum Konvertieren einer RANGE-Partitionstabelle in eine HASH-Partitionstabelle erforderlich sind.
Anzeige der Partitionen der Tabelle 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
Anzeige der Partitionierungsmethode (RANGE) der Tabelle 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
RANGE-partitionierte Tabelle ONLINE in HASH-partitionierte Tabelle konvertieren:
SQL> ALTER TABLE ATP01_CRED_PAG MODIFY PARTITION BY HASH (DT_COMPETENCIA) PARTITIONS 3 ONLINE; Table altered.
Zeigt die neue Partitionierungsmethode (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
Anzeige der Partitionen der Tabelle:
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
Referenzen
Wartungsvorgänge für partitionierte Tabellen und Indizes. Verfügbar unter https://docs.oracle.com/en/database/oracle/oracle-database/18/vldbg/maintenance-partition-tables-indexes.html#GUID-0E7793F7-B38A-427E-846B-7A8651F2A523