Avec Oracle Database 19c : un nouveau concept appelé Tables Partitionnées Hybrides a été introduit. Comme son nom l’indique, les partitions peuvent exister à la fois à l’intérieur de Oracle database dans les espaces de table et à l’extérieur dans des sources externes telles que les fichiers Linux, les fichiers sur Hadoop Distributed File System (HDFS) et les fichiers dans le Cloud Object Storage. Les tables partitionnées hybrides améliorent la fonctionnalité du partitionnement pour les scénarios mixtes de Big Data où de grandes portions d’une table peuvent résider dans des partitions externes.
Grâce à cette fonctionnalité, vous pourriez vouloir déplacer les anciennes partitions de tables non actives vers des options de stockage moins chères en dehors de la base de données – tandis que les données actives sont hébergées dans des partitions stockées à l’intérieur du Oracle database. La fonction Tables de partitions hybrides permet l’intégration de partitions internes et externes – toutes dans la même table.
La fonctionnalité Tables Partitionnées Hybrides étend le partitionnement Oracle en permettant aux partitions de résider dans les deux – Oracle database segments, fichiers externes et sources. Pour y parvenir, les deux concepts – la fonctionnalité des tables externes et le partitionnement – ont été intégrés. Les tables partitionnées hybrides prennent en charge tous les types de pilotes de tables externes existants pour les partitions externes, y compris ORACLE_ DATAPUMP, ORACLE_LOADER, ORACLE_HDFS et ORACLE_ HIVE.
ORACLE_LOADER est le pilote d’accès par défaut aux tables externes pour lire les données à partir de fichiers plats. Cependant, le pilote d’accès ORACLE_DATAPUMP peut écrire des données dans un fichier de vidage au format binaire qui ne peut être lu que par le pilote d’accès ORACLE_DATAPUMP. Avec ORACLE_HDFS et ORACLE_HIVE, les données stockées dans les tables HDFS et Hive sur les clients Hadoop et Hive peuvent être consultées comme si elles étaient stockées dans des tables dans un Oracle database. Comme prérequis, il faut accéder à un objet répertoire dans la base de données pour accéder aux sources externes.
Examinons cette fonctionnalité et comprenons comment combiner les partitions internes et externes en une seule table partitionnée hybride dans Oracle Database 19C.

Les tables partitionnées hybrides prennent en charge les types de tables externes suivants pour les partitions externes.
- ORACLE_DATAPUMP
- ORACLE_LOADER
- ORACLE_HDFS
- ORACLE_HIVE
- Restrictions
Les ORACLE_LOADER et ORACLE_DATAPUMP exemples :
- Créer une table partitionnée hybride (ORACLE_LOADED)
- Créer une table partitionnée hybride (ORACLE_DATAPUMP)
- Opérations DML sur les partitions externes
- Ajout et suppression de partitions
Création d’une table partitionnée hybride (ORACLE_LOADER)
Créez des fichiers plats avec des données fictives pour les utiliser avec les partitions de table externes.
SET MARKUP CSV ON QUOTE ON SET TRIMSPOOL ON LINESIZE 1000 FEEDBACK OFF PAGESIZE 0 SPOOL /tmp/gbr1.txt SELECT 'GBR', object_id, owner, object_name FROM all_objects WHERE object_id <= 3999 AND rownum <= 1000; SPOOL OFF; SPOOL /tmp/gbr2.txt SELECT 'GBR', object_id, owner, object_name FROM all_objects WHERE object_id BETWEEN 4000 AND 5999 AND rownum <= 1000; SPOOL OFF; SPOOL /tmp/ire1.txt SELECT 'IRE', object_id, owner, object_name FROM all_objects WHERE object_id <= 3999 AND rownum <= 1000; SPOOL OFF; SPOOL /tmp/ire2.txt SELECT 'IRE', object_id, owner, object_name FROM all_objects WHERE object_id BETWEEN 4000 AND 5999 AND rownum <= 1000; SPOOL OFF; SET MARKUP CSV OFF SET TRIMSPOOL ON LINESIZE 1000 FEEDBACK ON PAGESIZE 14
L’exemple suivant crée une table partitionnée hybride. Il utilise le partitionnement par liste, avec une partition interne unique pour les données USA et deux partitions externes pour les données GBR et IRE respectivement.
--TABLE TEST_OL_HYBRID_PART_TAB PURGE;
CRÉER TABLE TEST_OL_HYBRID_PART_TAB ( country_code VARCHAR2(3) NON NULLE,
object_id NOMBRE NON NUL,
PROPRIÉTAIRE VARCHAR2(128) NON NUL,
object_name VARCHAR2(128) NON NUL)
ATTRIBUTS DE PARTITION EXTERNE(
TAPEZ ORACLE_LOADER RÉPERTOIRE PAR DÉFAUT tmp_dir1
PARAMÈTRES D’ACCÈS (
CHAMPS CSV AVEC INCRUSTÉ TERMINÉ PAR ', OPTIONNELLEMENT ENFERMÉS PAR '"'
LES VALEURS MANQUANTES DES CHAMPS SONT NULLES
(country_code, object_id, propriétaire, object_name)
LIMITE DE REFUS ILLIMITÉE )
PARTITION PAR LISTE (country_code)
( PARTITION USA VALEURS ('USA'), PARTITION valeurs gbr ('GBR')
EMPLACEMENT EXTERNE (« gbr1.txt », « gbr2.txt »),
VALEURS D’IRA DE PARTITION (« IRE »)
EMPLACEMENT tmp_dir2 RÉPERTOIRE EXTERNE PAR DÉFAUT ('ire1.txt', 'ire2.txt') );
La clause ATTRIBUTS DE PARTITION EXTERNE définit les paramètres de table externe au niveau de la table. Pour les partitions externes, la clause EXTERNAL sert à définir les attributs au niveau de la partition, tels que les emplacements de fichiers et les objets de répertoire non par défaut.
La colonne HYBRID dans le CDB|DBA|ALL|USER}_TABLES montre qu’il s’agit d’une table hybride.
FORMAT table_name COLONNE A30 FORMAT HYBRIDE COLONNE A6 SELECT table_name, hybride DEPUIS user_tables; TABLE_NAME HYBRIDE ------------------------------ ------ TEST_OL_HYBRID_PART_TAB OUI
Actuellement, il n’y a que des données dans les partitions externes.
FORMAT country_code COLONNE A12 SÉLECTIONNEZ country_code, COMPTE(*) comme montant DE TEST_OL_HYBRID_PART_TAB GROUPER PAR country_code ORDRE PAR country_code;
COUNTRY_CODE MONTANT ------------ ---------- GBR 2000 IRE 2000
Les commandes DML fonctionnent normalement sur la partition interne.
INSERT INTO TEST_OL_HYBRID_PART_TAB SELECT 'USA', object_id, owner, object_name FROM all_objects wHERE rownum <= 2000; COMMIT; COLUMN country_code FORMAT A12 SELECT country_code, COUNT(*) as amount FROM TEST_OL_HYBRID_PART_TAB GROUP BY country_code ORDER BY country_code; COUNTRY_CODE AMOUNT ------------ ---------- GBR 2000 IRE 2000 USA 2000
Comme on peut s’y attendre, essayer d’insérer des données dans les partitions externes donne une erreur.
Note : Sachez que vous ne pouvez pas effectuer d’opérations DML sur les partitions externes. La manipulation des données peut être effectuée sur les partitions internes dont les données résident dans les segments de la base de données. Tenter d’effectuer une opération DML sur la partition externe échouera et générera l’erreur suivante.
INSERT INTO TEST_OL_HYBRID_PART_TAB VALUES ('GBR', 9999, 'X', 'X');
*
ERROR at line 1:
ORA-14466: Data in a read-only partition or subpartition cannot be modified.
SQL> delete from TEST_OL_HYBRID_PART_TAB where object_id <= 2000;
delete from TEST_OL_HYBRID_PART_TAB where object_id <= 2000
*
ERROR at line 1:
ORA-14466: Data in a read-only partition or subpartition cannot be modified.
SQL> update TEST_OL_HYBRID_PART_TAB set object_id=436 WHERE object_id=4363;
update TEST_OL_HYBRID_PART_TAB set object_id=436 WHERE object_id=4363
*
ERROR at line 1:
ORA-14466: Data in a read-only partition or subpartition cannot be modified.
SQL>
Création d’une table partitionnée hybride (ORACLE_DATAPUMP)
Dans cet exemple, nous avons créé un fichier dump appelé « bgr_xt.dmp » contenant des données BGR. La création de la table externe génère le fichier de vidage Data Pump. Quand on dépose la table, le fichier de vidage reste sur le système de fichiers de la base de données, donc on peut l’utiliser pour notre test.
CREATE TABLE bgr_xt
ORGANIZATION EXTERNAL (TYPE ORACLE_DATAPUMP DEFAULT DIRECTORY tmp_dir1
LOCATION ('bgr_xt.dmp') ) AS SELECT 'BGR' AS country_code,
object_id,owner, object_name FROM all_objects where rownum <= 2000;
DROP TABLE bgr_xt;
L’exemple suivant crée une table partitionnée hybride. Il utilise le partitionnement par listes, avec une partition interne unique pour les données USA, et une partition externe de pompe de données pour les données BGR.
--TABLE test_dp_hybrid_part_tab PURGE;
CRÉER test_dp_hybrid_part_tab TABLEAU (
country_code VARCHAR2(3) NON NUL,
object_id NOMBRE NON NUL,
PROPRIÉTAIRE VARCHAR2(128) NON NUL,
object_name VARCHAR2(128) NON NUL
) ATTRIBUTS DE PARTITION EXTERNE (
TAPEZ ORACLE_DATAPUMP RÉPERTOIRE PAR DÉFAUT tmp_dir1)
PARTITION PAR LISTE (country_code) (
PARTITION USA VALUES (« USA »),
PARTITION VALEURS BGR (« BGR ») EXTERNE
EMPLACEMENT ('bgr_xt.dmp'));
La clause EXTERNAL PARTITION ATTRIBUTES définit les paramètres externes de la table Data Pump au niveau de la table. Pour les partitions externes, la clause EXTERNAL sert à définir les attributs au niveau de la partition, tels que les emplacements de fichiers et les objets de répertoire non par défaut.
La colonne HYBRID dans le CDB|DBA|ALL|USER}_TABLES montre qu’il s’agit d’une table hybride.
FORMAT table_name COLONNE A30 FORMAT HYBRIDE COLONNE A6 SQL> SELECT table_name, hybride FROM user_tables; TEST_OL_HYBRID_PART_TAB OUI TEST_DP_HYBRID_PART_TAB OUI
Actuellement, il n’y a que des données dans les partitions externes.
FORMAT country_code COLONNE A12 SÉLECTIONNEZ country_code, COMPTE(*) comme montant DE test_dp_hybrid_part_tab GROUPER PAR country_code ORDRE PAR country_code; COUNTRY_CODE MONTANT ------------ ---------- BGR 2000 SQL >
Les commandes DML fonctionnent normalement sur la partition interne.
INSERT INTO test_dp_hybrid_part_tab SELECT 'USA', object_id, owner, object_name FROM all_objects WHERE rownum <= 2000; COMMIT; COLUMN country_code FORMAT A12 SELECT country_code, COUNT(*) as amount FROM test_dp_hybrid_part_tab GROUP BY country_code ORDER BY country_code;
COUNTRY_CODE MONTANT ------------ ---------- BGR 2000 États-Unis 2000
Note : Veuillez noter que vous ne pouvez pas effectuer d’opérations DML sur les partitions externes. La manipulation des données ne peut être effectuée que sur les partitions internes dont les données résident dans les segments de la base de données. Tenter d’effectuer une opération DML sur la partition externe échouera et générera l’erreur ci-dessous.
Vous pouvez lire les données de la partition de table externe et insérer (et aussi mettre à jour ou supprimer) des données sur la partition interne. Et rappelez-vous, vous ne pouvez utiliser des opérations DML que sur les partitions internes d’une table partitionnée hybride, car les partitions externes sont traitées comme des partitions en lecture seule. Il n’y a aucune restriction sur les opérations de partition standard telles que l’ajout ou la suppression de partitions.
mINSERT DANS test_dp_hybrid_part_tab VALEURS ('GBR', 9999, 'X', 'X');
*ERREUR à la ligne 1 :
ORA-14466 : Les données dans une partition ou sous-partition en lecture seule ne peuvent pas être modifiées.
Ajout et suppression de partitions
Il n’y a aucune restriction sur les opérations de partition standard telles que l’ajout ou la suppression de partitions. Dans l’exemple ci-dessous, la partition des données IRE de la table TEST_OL_HYBRID_PART_TAB a été supprimée.
MODIFIER LA TABLE TEST_OL_HYBRID_PART_TAB DROP PARTITION Ire; FORMAT country_code COLONNE A12 SÉLECTIONNEZ country_code, COMPTE(*) comme montant DE TEST_OL_HYBRID_PART_TAB GROUPER PAR country_code ORDRE PAR country_code; COUNTRY_CODE MONTANT ------------ ---------- GBR 2000 États-Unis 2000 SQL >
La partition de données IRE peut aussi être rajoutée.
MODIFIER TABLE TEST_OL_HYBRID_PART_TAB AJOUTER DES VALEURS DE PARTITION IRE (« IRE ») EXTERNE
EMPLACEMENT tmp_dir2 RÉPERTOIRE PAR DÉFAUT ('ire1.txt', 'ire2.txt');
FORMAT country_code COLONNE A12
SELECT country_code, COUNT(*) comme montant
DE TEST_OL_HYBRID_PART_TAB GROUPE PAR country_code
COMMANDE PAR country_code;
COUNTRY_CODE MONTANT
------------ ----------
GBR 2000
IRE 2000
États-Unis 2000
Dans cet exemple, les données BGR de la table TEST_DP_HYBRID_PART_TAB ont été supprimées.
ALTER TABLE test_dp_hybrid_part_tab DROP PARTITION bgr; FORMAT country_code COLONNE A12 SELECT country_code, COUNT(*) comme montant DE test_dp_hybrid_part_tab GROUPE PAR country_code COMMANDE PAR country_code; COUNTRY_CODE MONTANT ------------ ---------- États-Unis 2000
Et ci-dessous, la partition de données BGR a été rajoutée.
MODIFIER TABLE test_dp_hybrid_part_tab AJOUTER PARTITION BGR VALUES ('BGR') EXTERNE
RÉPERTOIRE PAR DÉFAUT tmp_dir2 EMPLACEMENT ('bgr_xt.dmp');
FORMAT country_code COLONNE A12
SELECT country_code, COUNT(*) comme montant
DE test_dp_hybrid_part_tab GROUPE PAR country_code
COMMANDE PAR country_code;
COUNTRY_CODE MONTANT
------------ ----------
BGR 2000
États-Unis 2000
Restrictions
Les restrictions pour les tables partitionnées hybrides incluent :
- Vous ne pouvez utiliser que le partitionnement RANGE ou LIST
- Il n’y a pas de support pour le partitionnement REFERENCE et SYSTEM
La liste complète des restrictions se trouve dans la documentation Oracle du 19e siècle. Pour plus d’informations, voir :
- Tables partitionnées hybrides
- Gestion des tables partitionnées hybrides
- Tables partitionnées hybrides dans Oracle Database 19e siècle
- Partitionnement : Tous les articles
- Tables externes : Requête des données provenant de fichiers plats dans Oracle
- Data Pump : tables externes (déchargement/chargement des données à l’aide de tables externes)
- ORACLE_DATAPUMP Améliorations des pilotes d’accès
- ORACLE_LOADER Améliorations des pilotes d’accès
- Tableaux externes : Tous les articles
- Data Pump (expdp, impdp) : Tous les articles
Conclusion
Les tables partitionnées hybrides Oracle intègrent les partitions internes et externes dans une seule table partitionnée. La combinaison des tables partitionnées internes classiques et des tables partitionnées externes forme un concept appelé tables partitionnées hybrides. Les tables partitionnées hybrides sont particulièrement attrayantes pour la gestion du cycle de vie et les options de stockage moins chères.
En divisant une grande table en partitions plus petites, vous pouvez aussi améliorer la performance des requêtes. Les requêtes qui n’accèdent qu’à une fraction des données peuvent s’exécuter plus rapidement parce qu’il y a moins de données à analyser. Décomposer les données par version en partitions distinctes permet d’obtenir des données plus récentes dans la mémoire de la base de données, ce qui utilise les pools de tampons de base de données plus efficacement.
