Oracle 18c New Feature: Modificando Online o tipo de Particionamento

Oracle 18c New Feature: Modificando Online o tipo de Particionamento

No Oracle Database 18c agora alteramos a estratégia de particionamento de uma tabela de forma ONLINE por meio da instrução SQL “ALTER TABLE MODIFY PARTITION”.

Esse novo recurso nos permite adaptar o método de particionamento de uma tabela sem exigir nenhum tempo de inatividade associado para realizar a mudança.

A menos que você especifique a cláusula “UPDATE INDEXES” como parte da instrução do comando “ALTER TABLE”:

– O banco de dados marca como “UNUSABLE” todas os índices locais das partições ou subpartições.
– Os índices globais, ou todas as partições dos índices globais particionados, são marcados como “UNUSABLE” e devem ser reconstruídos.

Exibe as Partições da tabela 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

 

Método de particionamento (RANGE) da tabela 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

 

Converter o método de particionamento da tabela de “RANGE” para “HASH” de forma ONLINE:


SQL> ALTER TABLE ATP01_CRED_PAG MODIFY PARTITION BY HASH (DT_COMPETENCIA) PARTITIONS 3 ONLINE;

Table altered.

 

Exibe o novo método de particionamento (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

 

Exibir as partições da tabela:


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

Referências

Maintenance Operations for Partitioned Tables and Indexes. Available at https://docs.oracle.com/en/database/oracle/oracle-database/18/vldbg/maintenance-partition-tables-indexes.html#GUID-0E7793F7-B38A-427E-846B-7A8651F2A523