Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Novo recurso do Oracle 18c:modificação online de particionamento


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

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

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

– O banco de dados marca UNUSABLE todas as partições ou subpartições de índice local correspondentes.
– Índices globais, ou todas as partições de índices globais particionados, são marcados como UNUSABLE e devem ser reconstruídos.

Este exemplo fornece uma demonstração passo a passo das tarefas necessárias para converter a tabela de partição RANGE em uma tabela de partição HASH.

Exiba 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




Exiba o 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 tabela particionada RANGE para tabela particionada HASH 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




Exiba 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

Operações de manutenção para tabelas e índices particionados. Disponível em https://docs.oracle.com/en/database/oracle/oracle-database/18/vldbg/maintenance-partition-tables-indexes.html#GUID-0E7793F7-B38A-427E-846B-7A8651F2A523