Oracle Database 18cでは、「ALTERTABLEMODIFYPARTITION」SQLステートメントを使用してテーブルのパーティション化戦略をオンラインで変更します。
この新機能により、変更を行うために関連するダウンタイムを必要とせずに、テーブルのパーティション化方法を適応させることができます。
「ALTERTABLE」ステートメントの一部として「UPDATEINDEXES」句を指定しない限り:
–データベースは、結果として生じるすべての対応するローカルインデックスパーティションまたはサブパーティションをUNUSABLEとマークします。
–グローバルインデックス、またはパーティション化されたグローバルインデックスのすべてのパーティションは、UNUSABLEとマークされ、再構築する必要があります。
この例では、RANGEパーティションテーブルをHASHパーティションテーブルに変換するために必要なタスクを段階的に示します。
テーブル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
テーブルATP01_CRED_PAGのパーティショニング方法(RANGE)を表示します:
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パーティションテーブルをHASHパーティションテーブルにオンラインで変換します:
SQL> ALTER TABLE ATP01_CRED_PAG MODIFY PARTITION BY HASH (DT_COMPETENCIA) PARTITIONS 3 ONLINE; Table altered.
新しいパーティション分割方法(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
テーブルのパーティションを表示します:
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
参考資料
パーティション化されたテーブルとインデックスのメンテナンス操作。 https://docs.oracle.com/en/database/oracle/oracle-database/18/vldbg/maintenance-partition-tables-indexes.html#GUID-0E7793F7-B38A-427E-846B-7A8651F2A523
>