Oracle
 sql >> Base de données >  >> RDS >> Oracle

Nouvelle fonctionnalité Oracle 18c :modification en ligne du partitionnement

Dans Oracle Database 18c, nous modifions maintenant la stratégie de partitionnement en ligne d'une table via l'instruction SQL "ALTER TABLE MODIFY PARTITION".

Cette nouvelle fonctionnalité nous permet d'adapter la méthode de partitionnement d'une table sans nécessiter de temps d'arrêt associé pour effectuer le changement.

Sauf si vous spécifiez la clause "UPDATE INDEXES" dans le cadre de l'instruction "ALTER TABLE":

– La base de données marque INUTILISABLE toutes les partitions ou sous-partitions d'index local correspondantes.
– Les index globaux, ou toutes les partitions d'index globaux partitionnés, sont marqués INUTILISABLES et doivent être reconstruits.

Cet exemple fournit une démonstration étape par étape des tâches requises pour convertir la table de partition RANGE en une table de partition HASH.

Affichez les partitions de la table 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

Affichez la méthode de partitionnement (RANGE) de la table 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

Convertissez la table partitionnée RANGE en table partitionnée HASH EN LIGNE :


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

Table altered.

Affiche la nouvelle méthode de partitionnement (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

Affichez les partitions de la table :


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

Références

Opérations de maintenance pour les tables et les index partitionnés. Disponible sur https://docs.oracle.com/en/database/oracle/oracle-database/18/vldbg/maintenance-partition-tables-indexes.html#GUID-0E7793F7-B38A-427E-846B-7A8651F2A523