sql >> データベース >  >> RDS >> Oracle

Oracle 18cの新機能:パーティショニングのオンライン変更

    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>


    1. データベースで循環参照を使用できますか?

    2. 大きなCLOBを使用してC#からストアドプロシージャを呼び出す際の問題

    3. ターゲットマシンがアクティブに接続を拒否したため、接続できませんでした(PHP / WAMP)

    4. Postgres/JSON-すべての配列要素を更新します