{"id":8691,"date":"2021-06-08T10:00:50","date_gmt":"2021-06-08T09:00:50","guid":{"rendered":"https:\/\/blog.capdata.fr\/?p=8691"},"modified":"2021-06-07T16:43:34","modified_gmt":"2021-06-07T15:43:34","slug":"oracle-19c-les-partitions-hybrides-sur-les-tables","status":"publish","type":"post","link":"https:\/\/blog.capdata.fr\/index.php\/oracle-19c-les-partitions-hybrides-sur-les-tables\/","title":{"rendered":"Oracle 19c : Les partitions hybrides"},"content":{"rendered":"<a class=\"synved-social-button synved-social-button-share synved-social-size-24 synved-social-resolution-single synved-social-provider-twitter nolightbox\" data-provider=\"twitter\" target=\"_blank\" rel=\"nofollow\" title=\"Share on Twitter\" href=\"https:\/\/twitter.com\/intent\/tweet?url=https%3A%2F%2Fblog.capdata.fr%2Findex.php%2Fwp-json%2Fwp%2Fv2%2Fposts%2F8691&#038;text=Article%20sur%20le%20blog%20de%20la%20Capdata%20Tech%20Team%20%3A%20\" style=\"font-size: 0px;width:24px;height:24px;margin:0;margin-bottom:5px;margin-right:5px\"><img loading=\"lazy\" decoding=\"async\" alt=\"twitter\" title=\"Share on Twitter\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"24\" height=\"24\" style=\"display: inline;width:24px;height:24px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/blog.capdata.fr\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/48x48\/twitter.png\" \/><\/a><a class=\"synved-social-button synved-social-button-share synved-social-size-24 synved-social-resolution-single synved-social-provider-linkedin nolightbox\" data-provider=\"linkedin\" target=\"_blank\" rel=\"nofollow\" title=\"Share on Linkedin\" href=\"https:\/\/www.linkedin.com\/shareArticle?mini=true&#038;url=https%3A%2F%2Fblog.capdata.fr%2Findex.php%2Fwp-json%2Fwp%2Fv2%2Fposts%2F8691&#038;title=Oracle%2019c%20%3A%20Les%20partitions%20hybrides\" style=\"font-size: 0px;width:24px;height:24px;margin:0;margin-bottom:5px;margin-right:5px\"><img loading=\"lazy\" decoding=\"async\" alt=\"linkedin\" title=\"Share on Linkedin\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"24\" height=\"24\" style=\"display: inline;width:24px;height:24px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/blog.capdata.fr\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/48x48\/linkedin.png\" \/><\/a><a class=\"synved-social-button synved-social-button-share synved-social-size-24 synved-social-resolution-single synved-social-provider-mail nolightbox\" data-provider=\"mail\" rel=\"nofollow\" title=\"Share by email\" href=\"mailto:?subject=Oracle%2019c%20%3A%20Les%20partitions%20hybrides&#038;body=Article%20sur%20le%20blog%20de%20la%20Capdata%20Tech%20Team%20%3A%20:%20https%3A%2F%2Fblog.capdata.fr%2Findex.php%2Fwp-json%2Fwp%2Fv2%2Fposts%2F8691\" style=\"font-size: 0px;width:24px;height:24px;margin:0;margin-bottom:5px\"><img loading=\"lazy\" decoding=\"async\" alt=\"mail\" title=\"Share by email\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"24\" height=\"24\" style=\"display: inline;width:24px;height:24px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/blog.capdata.fr\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/48x48\/mail.png\" \/><\/a><p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-8696 size-full\" src=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2021\/06\/hybrid_watishybrid.jpg\" alt=\"\" width=\"600\" height=\"334\" srcset=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2021\/06\/hybrid_watishybrid.jpg 600w, https:\/\/blog.capdata.fr\/wp-content\/uploads\/2021\/06\/hybrid_watishybrid-300x167.jpg 300w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>Hello<\/p>\n<p>il ne m&#8217;a pas \u00e9t\u00e9 encore possible de tester la nouvelle version Oracle 21c, dans la mesure ou cette version est pour le moment &#8220;Cloud only&#8221;. Je vous propose donc, pour le moment, un article au sujet d&#8217;une des nouveaut\u00e9s int\u00e9ressantes du moteur Oracle 19c.<br \/>\nIl s&#8217;agit, pour l&#8217;option partitionning, des partitions dites &#8220;hybrides&#8221; sur les tables Oracle.<\/p>\n<p>Nous savons que depuis la version 12c, Oracle prend en charge la partie partitionning sur des donn\u00e9es provenant de source externes (fichiers csv, datapump&#8230;.).<\/p>\n<p>Avec la version 19c, il est possible de &#8216;mixer&#8217; la source de donn\u00e9es au sein d&#8217;une m\u00eame table dans des partitions contenant \u00e0 la fois, donn\u00e9es de sources internes, et donn\u00e9es de sources externes.<\/p>\n<p>C&#8217;est notamment tr\u00e8s pratique lorsque l&#8217;on veut &#8220;merger&#8221; des donn\u00e9es \u00e0 la fois provenant d&#8217;un csv, mais aussi d&#8217;un datapump avec des donn\u00e9es internes ins\u00e9r\u00e9es de facon conventionnelle (INSERT INTO classique).<br \/>\nL&#8217;avantage, c&#8217;est obtenir au sein d&#8217;une m\u00eame table un ensemble complet de donn\u00e9es indexable, sans passer par des jointures internes entre plusieurs tables.<\/p>\n<p>Les donn\u00e9es externes peuvent provenir de diff\u00e9rentes sources de donn\u00e9es, \u00e0 savoir<\/p>\n<ul>\n<li>ORACLE_LOADER<\/li>\n<li>ORACLE_DATAPUMP<\/li>\n<li>ORACLE_HDFS<\/li>\n<li>ORACLE_HIVE<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<h2>Mise en place<\/h2>\n<p>Pour utiliser cette fonctionnalit\u00e9, il faudra disposer<\/p>\n<ul>\n<li>d&#8217;une version Oracle 19c Enterprise Edition<\/li>\n<li>une base avec ou sans multitenant<\/li>\n<li>un sch\u00e9ma Oracle disposant des droits de cr\u00e9ation de tables et de droits d&#8217;acc\u00e8s en lecture\/\u00e9criture sur les directories.<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<h4><span style=\"color: #000080;\"><em>Cr\u00e9ation des directories pour les donn\u00e9es externes<\/em><\/span><\/h4>\n<pre>SQL&gt; create directory dir1 as '\/data\/oradata\/dir1';\r\nSQL&gt; create directory dir2 as '\/data\/oradata\/dir2';\r\nSQL&gt; create directory dir3 as '\/data\/oradata\/dir3';<\/pre>\n<p>&nbsp;<\/p>\n<pre>SQL&gt; grant read,write on directory dir1 to manu;\r\nSQL&gt; grant read,write on directory dir2 to manu;\r\nSQL&gt; grant read,write on directory dir3 to manu;<\/pre>\n<p>&nbsp;<\/p>\n<p>Pour notre atelier exemple, nous allons cr\u00e9er 3 &#8220;directories&#8221; Oracle ainsi qu&#8217;une table d&#8217;employ\u00e9s d&#8217;une soci\u00e9t\u00e9 de service informatique.<br \/>\nLes donn\u00e9es pr\u00e9sentes au sein de cette table seront, l&#8217;id de l&#8217;employ\u00e9, son job, et sa date de naissance.<\/p>\n<p>Nous placerons des fichiers CSV r\u00e9partis dans ces 3 directories diff\u00e9rents.<br \/>\nUn premier fichier csv nomm\u00e9 &#8220;avant80.csv&#8221;\u00e0 placer dans le r\u00e9pertoire &#8220;dir1&#8221; auparavant cr\u00e9\u00e9.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-8702\" src=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2021\/06\/avant80.jpg\" alt=\"\" width=\"214\" height=\"170\" \/><\/p>\n<p>Un second csv nomm\u00e9 &#8220;avant90.csv&#8221;dans &#8220;dir2&#8221;.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-8703\" src=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2021\/06\/avant90-300x198.jpg\" alt=\"\" width=\"276\" height=\"182\" srcset=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2021\/06\/avant90-300x198.jpg 300w, https:\/\/blog.capdata.fr\/wp-content\/uploads\/2021\/06\/avant90.jpg 314w\" sizes=\"auto, (max-width: 276px) 100vw, 276px\" \/><\/p>\n<p>Enfin un 3e fichier &#8220;avant2000.csv&#8221; dans &#8220;dir3&#8221;.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-8704\" src=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2021\/06\/avant2000-300x146.jpg\" alt=\"\" width=\"341\" height=\"166\" srcset=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2021\/06\/avant2000-300x146.jpg 300w, https:\/\/blog.capdata.fr\/wp-content\/uploads\/2021\/06\/avant2000.jpg 432w\" sizes=\"auto, (max-width: 341px) 100vw, 341px\" \/><\/p>\n<p>Pour le stockage des donn\u00e9es internes, nous utiliserons le tablespace par d\u00e9faut du sch\u00e9ma Oracle, \u00e0 savoir le tablespace USERS.<\/p>\n<h2><\/h2>\n<h2>Table hybride avec donn\u00e9es ORACLE_LOADER<\/h2>\n<p>Le DDL de cr\u00e9ation de table, pour notre exemple, sera le suivant :<\/p>\n<pre>SQL&gt; connect manu\r\nEnter password:\r\nConnected.<\/pre>\n<pre>SQL&gt; CREATE TABLE EMPLOYES (id NUMBER , job varchar2(20), naissance DATE) \r\nTABLESPACE users\r\n  EXTERNAL PARTITION ATTRIBUTES\r\n\u00a0 (TYPE ORACLE_LOADER\r\n\u00a0 DEFAULT DIRECTORY dir3\r\n \u00a0ACCESS PARAMETERS\r\n \u00a0(FIELDS TERMINATED BY ','\r\n(id , job, naissance DATE 'dd-MON-yyyy')\r\n\u00a0)\r\n\u00a0REJECT LIMIT UNLIMITED\r\n)\r\nPARTITION BY RANGE (naissance)\r\n\u00a0 (PARTITION av80 VALUES LESS THAN (TO_DATE('01-Jan-1980','dd-MON-yyyy'))\r\n\u00a0  EXTERNAL DEFAULT DIRECTORY dir1 LOCATION ('avant80.csv'),\r\n\u00a0 PARTITION av90 VALUES LESS THAN (TO_DATE('01-Jan-1990','dd-MON-yyyy'))\r\n\u00a0 \u00a0EXTERNAL DEFAULT DIRECTORY dir2 LOCATION ('avant90.csv'),\r\n\u00a0 PARTITION av2000 VALUES LESS THAN (TO_DATE('01-Jan-2000','dd-MON-yyyy'))\r\n\u00a0 \u00a0EXTERNAL LOCATION('avant2000.csv'),\r\n\u00a0 PARTITION POST2000 VALUES LESS THAN (TO_DATE('01-Jan-2021','dd-MON-yyyy'))\r\n\u00a0 )\r\n\u00a0\/\u00a0\r\n\r\n<\/pre>\n<p>Nous avons ici une table nomm\u00e9e EMPLOYES partitionn\u00e9e par range sur le champs &#8220;naissance&#8221;, avec un stockage par d\u00e9faut des donn\u00e9es internes sur le tablespace USERS, et un stockage des donn\u00e9es externes par d\u00e9faut dans le directory &#8220;dir3&#8221;.<\/p>\n<p>Les donn\u00e9es propres \u00e0 la partition av90 sont dans le fichier CSV du directory &#8220;dir2&#8221; , la partition av80 contient les donn\u00e9es du fichier CSV du directory &#8220;dir1&#8221;.<\/p>\n<pre>[oracle@ oradata]$ pwd\r\n\/data\/oradata\r\n[oracle@ oradata]$ ls -l d*\r\ndir1:\r\ntotal 4\r\n-rw-r--r--. 1 oracle dba 220 Jun 4 08:28 avant80.csv\r\n\r\ndir2:\r\ntotal 4\r\n-rw-r--r--. 1 oracle dba 241 Jun 4 08:29 avant90.csv\r\n\r\ndir3:\r\ntotal 4\r\n-rw-r--r--. 1 oracle dba 281 Jun 4 08:29 avant2000.csv<\/pre>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h4>Utilisation<\/h4>\n<p>&nbsp;<\/p>\n<p>Notre table est bien marqu\u00e9e comme table contenant des donn\u00e9es hybrides dans le dictionnaire de donn\u00e9es Oracle<\/p>\n<pre>SQL&gt; col TABLE_NAME for a20\r\nSQL&gt; SELECT table_name, hybrid FROM user_tables;\r\n\r\nTABLE_NAME           HYB\r\n-------------------- ---\r\nEMPLOYES             YES<\/pre>\n<p>&nbsp;<\/p>\n<p>Celle ci\u00a0 ne contient, pour le moment, que des donn\u00e9es externes, provenant de nos CSV, pas de donn\u00e9es d&#8217;employ\u00e9s n\u00e9s apr\u00e8s 2000, car nous n&#8217;en avons pas ins\u00e9r\u00e9 dans la partition correspondant \u00e0 cette valeur.<\/p>\n<pre>SQL&gt; select job , count(id) from employes group by job order by 2;\r\n\r\nJOB                  COUNT(ID)\r\n-------------------- ----------\r\nARCHITECTE SYS        1\r\nARCHITECTE SI         1\r\nDSI                   1\r\nDAF                   1\r\nDIRECTEUR             1\r\nDRH                   2\r\nASSOCIE               2\r\nADMINISTRATEUR SYS    2\r\nCOMMERCIAL            3\r\nDEVOPS                4\r\nDBA                   4\r\nDEVELOPPEUR           6\r\n\r\n12 rows selected.\r\n\r\n\r\nSQL&gt; select id, job, naissance from employes where naissance &gt; to_date('01-JAN-00');\r\n\r\nno rows selected<\/pre>\n<p>&nbsp;<\/p>\n<p>Nous alimentons la partition des donn\u00e9es &#8220;Post 2000&#8221;, celle ci est une partition interne classique.<\/p>\n<pre>SQL&gt; insert into employes values(210,'STAGIAIRE','10-MAR-2001');\r\n1 row created.\r\n\r\nSQL&gt; insert into employes values(220,'DEVOPS JUNIOR','08-APR-2002');\r\n1 row created.\r\n\r\nSQL&gt; commit;\r\nCommit complete.\r\n\r\nSQL&gt; select id, job, naissance from employes where naissance &gt; to_date('01-JAN-00');\r\nID         JOB                  NAISSANCE\r\n---------- -------------------- ---------\r\n210        STAGIAIRE            10-MAR-01\r\n220        DEVOPS JUNIOR        08-APR-02<\/pre>\n<p>&nbsp;<\/p>\n<p>Mais bien entendu, nous ne pouvons alimenter les partitions externes de cette table<\/p>\n<pre>SQL&gt; insert into employes values(121,'DBA','12-MAR-1996');\r\ninsert into employes values(121,'DBA','12-MAR-1996')\r\n*\r\nERROR at line 1:\r\nORA-14466: Data in a read-only partition or subpartition cannot be modified.<\/pre>\n<p>&nbsp;<\/p>\n<p>En effet, il faudra aller directement alimenter le fichier CSV sur le serveur :<\/p>\n<pre>[oracle@ dir3]$ echo \"121,DBA,12-Mar-1996\" &gt;&gt; avant2000.csv<\/pre>\n<p>&nbsp;<\/p>\n<p>Et v\u00e9rifier que notre ligne existe bien dans la table, et surtout, dans la bonne partition &#8220;av2000&#8221; pour notre DBA portant l&#8217;ID 121 :<\/p>\n<pre>SQL&gt; select id, job, naissance from employes partition (av2000) where ID=121;\r\n\r\nID         JOB                  NAISSANCE\r\n---------- -------------------- ---------\r\n121        DBA                  12-MAR-96<\/pre>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #ff0000;\">\/!\\ Lorsque la donn\u00e9e externe est ins\u00e9r\u00e9e \u00e0 la vol\u00e9e dans un fichier CSV, comme nous venons de le faire,\u00a0 c&#8217;est \u00e0 l&#8217;utilisateur de bien faire attention \u00e0 la partition \u00e0 laquelle appartient ce fichier.<\/span><br \/>\n<span style=\"color: #ff0000;\">En effet, si nous avions ins\u00e9r\u00e9 la ligne de notre nouveau DBA portant l&#8217;ID 121 de 1996 dans la partition &#8220;av80&#8221;, par exemple, Oracle n&#8217;aurait pas pu automatiquement chang\u00e9 la partition par d\u00e9faut de celui ci. La ligne &#8220;121,DBA,12-Mar-1996&#8221; serait donc rester dans la partition &#8220;av80&#8221;, ce qui consisterait en une erreur logique.<\/span><\/p>\n<p>Oracle ne sait organiser la donn\u00e9e dans une partition que lorsqu&#8217;il s&#8217;agit d&#8217;une partition de donn\u00e9es internes, via un INSERT INTO classique (bon \u00e0 savoir).<\/p>\n<p>C&#8217;\u00e9tait d\u00e9j\u00e0 le cas dans la version Oracle12c et la prise en charge des partitions externes.<\/p>\n<p>&nbsp;<\/p>\n<h2>Table hybride avec donn\u00e9es ORACLE_DATAPUMP<\/h2>\n<p>Pour cette exemple, nous allons cr\u00e9er une table externe, avec un dumpfile, issue de notre table des employ\u00e9s mais ne contenant que les d\u00e9veloppeurs.<\/p>\n<pre>SQL&gt; CREATE TABLE EMPLOYES_DEV\r\n\u00a0 ORGANIZATION EXTERNAL\r\n\u00a0 (\r\n\u00a0 TYPE ORACLE_DATAPUMP\r\n\u00a0 DEFAULT DIRECTORY dir1\r\n\u00a0 LOCATION ('empl_dev.dmp')\r\n\u00a0 ) AS\r\n\u00a0 \u00a0SELECT ID, JOB, NAISSANCE from employes\r\n\u00a0 \u00a0WHERE JOB = 'DEVELOPPEUR'\r\n\/\r\n\r\nTable created.<\/pre>\n<p>&nbsp;<\/p>\n<p>On s&#8217;assure que le dump est bien la, puis on supprime la table Oracle (bien entendu cela ne supprime pas le dumpfile)<\/p>\n<pre>[oracle@ dir1]$ ls -l\r\ntotal 20\r\n-rw-r--r--. 1 oracle dba 220 Jun 4 08:28 avant80.csv\r\n<span style=\"color: #993366;\">-rw-r-----. 1 oracle dba 12288 Jun 4 09:45 empl_dev.dmp<\/span>\r\n-rw-r--r--. 1 oracle dba 41 Jun 4 09:45 EMPLOYES_DEV_1906.log\r\n\r\n\r\nSQL&gt; drop table EMPLOYES_DEV;\r\n\r\nTable dropped.<\/pre>\n<p>&nbsp;<\/p>\n<p>Par la suite, cr\u00e9er une autre table partitionn\u00e9e avec 1 partition interne pour les employ\u00e9s ayant le job DBA, et une partition externe d\u00e9di\u00e9e pour les d\u00e9veloppeurs (oui je sais ce n&#8217;est pas tr\u00e8s &#8220;corporate&#8221; pour nos amis d\u00e9veloppeurs &#8230;.).<\/p>\n<pre>SQL&gt; CREATE TABLE EMPLOYES_JOB (id NUMBER , job varchar2(20), naissance DATE) \r\nTABLESPACE users\r\n\u00a0EXTERNAL PARTITION ATTRIBUTES (\r\n\u00a0 TYPE ORACLE_DATAPUMP\r\n\u00a0 DEFAULT DIRECTORY dir1\r\n\u00a0 )\r\n\u00a0 PARTITION BY LIST (job)\r\n(\r\nPARTITION dba VALUES ('DBA'),\r\nPARTITION developpeur VALUES ('DEVELOPPEUR') EXTERNAL\r\n\u00a0 \u00a0LOCATION ('empl_dev.dmp')\r\n);\r\n\r\nTable created.<\/pre>\n<p>&nbsp;<\/p>\n<p>la table est bien cr\u00e9\u00e9e en mode hybride<\/p>\n<pre>SQL&gt; SELECT table_name, hybrid FROM user_tables where hybrid = 'YES';\r\n\r\nTABLE_NAME           HYB\r\n-------------------- ---\r\nEMPLOYES             YES\r\nEMPLOYES_JOB         YES<\/pre>\n<p>&nbsp;<\/p>\n<p>Nous retrouvons les donn\u00e9es externes des 6 d\u00e9veloppeurs de notre soci\u00e9t\u00e9 dans cette table<\/p>\n<pre>SQL&gt; select JOB,count(id) from employes_job partition(developpeur) group by job;\r\n\r\nJOB                  COUNT(ID)\r\n-------------------- ----------\r\nDEVELOPPEUR          6<\/pre>\n<p>&nbsp;<\/p>\n<p>Auxquels nous pourrons rajouter des DBA sur la partition interne nomm\u00e9e dba.<\/p>\n<pre>SQL&gt; insert into employes_job values(121,'DBA','12-MAR-1996');\r\n1 row created.\r\n\r\nSQL&gt; insert into employes_job values(122,'DBA','30-JUL-1979');\r\n1 row created.\r\n\r\n\r\nSQL&gt; select id,job,naissance from employes_job partition(dba) ;\r\n\r\nID         JOB                  NAISSANCE\r\n---------- -------------------- ---------\r\n121        DBA                  12-MAR-96\r\n122        DBA                  30-JUL-79\r\n\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>La table EMPLOYES_JOB comporte donc \u00e9galement un mix des 2 partitions, externe et interne<\/p>\n<pre>SQL&gt; select JOB,count(id) from employes_job group by job;\r\n\r\nJOB                  COUNT(ID)\r\n-------------------- ----------\r\nDBA                   2\r\nDEVELOPPEUR           6<\/pre>\n<p>&nbsp;<\/p>\n<h2>Ajout \/ suppression de partition<\/h2>\n<p>Il sera bien sur possible d&#8217;ajouter ou bien supprimer une partition dans une table \u00e0 partitions hybrides.<\/p>\n<p>S&#8217;il l&#8217;on reprend notre table EMPLOYES, voici les partitions que celle ci comporte<\/p>\n<pre>SQL&gt; col HIGH_VALUE for a25\r\nSQL&gt; set long 25\r\nSQL&gt; select TABLE_NAME,PARTITION_NAME,HIGH_VALUE,TABLESPACE_NAME \r\nfrom user_tab_partitions where TABLE_NAME='EMPLOYES';\r\n\r\nTABLE_NAME           PARTITION_NAME       HIGH_VALUE                TABLESPACE_NAME\r\n-------------------- -------------------- ------------------------- ----------------\r\nEMPLOYES             AV2000               TO_DATE(' 2000-01-01 00:0 SYSTEM\r\nEMPLOYES             AV80                 TO_DATE(' 1980-01-01 00:0 SYSTEM\r\nEMPLOYES             AV90                 TO_DATE(' 1990-01-01 00:0 SYSTEM\r\nEMPLOYES             POST2000             TO_DATE(' 2021-01-01 00:0 USERS<\/pre>\n<p>&nbsp;<\/p>\n<p>Supprimons la partition AV80 par exemple<\/p>\n<pre>SQL&gt; alter table EMPLOYES drop partition AV80;\r\nTable altered.\r\n\r\nSQL&gt; select TABLE_NAME,PARTITION_NAME,HIGH_VALUE,TABLESPACE_NAME \r\nfrom user_tab_partitions where TABLE_NAME='EMPLOYES';\r\n\r\nTABLE_NAME           PARTITION_NAME       HIGH_VALUE                TABLESPACE_NAME\r\n-------------------- -------------------- ------------------------- ----------------\r\nEMPLOYES             AV2000               TO_DATE(' 2000-01-01 00:0 SYSTEM\r\nEMPLOYES             AV90                 TO_DATE(' 1990-01-01 00:0 SYSTEM\r\nEMPLOYES             POST2000             TO_DATE(' 2021-01-01 00:0 USERS\r\n\r\nSQL&gt; select job,naissance from EMPLOYES where naissance between to_date('01-JAN-70') \r\nand to_date('01-JAN-80');\r\n\r\nno rows selected<\/pre>\n<p>&nbsp;<\/p>\n<p>Ajoutons une autre partition externe, avec les enfants des employ\u00e9s par exemple ! Attention, dans cet exercice, il faudra &#8220;splitter&#8221; la derni\u00e8re partition car celle ci comporte toutes donn\u00e9es jusqu&#8217;\u00e0 2021.<\/p>\n<p>&nbsp;<\/p>\n<pre>SQL&gt; alter table EMPLOYES split partition POST2000 \r\nat (to_date('01-Jan-2010','dd-MON-yyyy'));\r\nTable altered.\r\n\r\nSQL&gt; select TABLE_NAME,PARTITION_NAME,HIGH_VALUE,TABLESPACE_NAME \r\nfrom user_tab_partitions where TABLE_NAME='EMPLOYES';\r\n\r\nTABLE_NAME           PARTITION_NAME       HIGH_VALUE                TABLESPACE_NAME\r\n-------------------- -------------------- ------------------------- ----------------\r\nEMPLOYES             AV2000               TO_DATE(' 2000-01-01 00:0 SYSTEM\r\nEMPLOYES             AV90                 TO_DATE(' 1990-01-01 00:0 SYSTEM\r\nEMPLOYES             SYS_P241             TO_DATE(' 2010-01-01 00:0 USERS\r\nEMPLOYES             SYS_P242             TO_DATE(' 2021-01-01 00:0 USERS<\/pre>\n<p>&nbsp;<\/p>\n<p>Une fois splitt\u00e9, la partition prend des noms d\u00e9finis par Oracle (SYS_). Il s&#8217;agira maintenant de supprimer la derni\u00e8re partition ne contenant aucune donn\u00e9e, puis renommer la partition des donn\u00e9es inf\u00e9rieures \u00e0 2010.<\/p>\n<pre>SQL&gt; select count(*) from EMPLOYES partition (SYS_P242);\r\n\r\nCOUNT(*)\r\n----------\r\n0\r\n\r\nSQL&gt; alter table EMPLOYES drop partition SYS_P242;\r\nTable altered.\r\n\r\n\r\nSQL&gt; alter table EMPLOYES rename partition SYS_P241 to AV2010;\r\nTable altered.<\/pre>\n<p>&nbsp;<\/p>\n<p>Nous pourrons alors cr\u00e9er des donn\u00e9es externes dans un csv &#8220;avant2020.csv&#8221; du directory &#8220;dir1&#8221;<\/p>\n<pre>[oracle@ dir1]$ vi avant2020.csv\r\n[oracle@ dir1]$ cat avant2020.csv\r\n1001,DIRECTEUR,12-Jan-2010\r\n1002,ASSOCIE,01-Fev-2014\r\n1003,ASSOCIE,08-Mar-2013\r\n1004,ASSOCIE,10-Jun-2012<\/pre>\n<p>&nbsp;<\/p>\n<p>Puis d\u00e9clarer cette nouvelle partition<\/p>\n<pre>SQL&gt; alter table EMPLOYES add partition AV2020 VALUES \r\nLESS THAN (TO_DATE('01-Jan-2020','dd-MON-yyyy')) \r\nEXTERNAL DEFAULT DIRECTORY dir1 LOCATION ('avant2020.csv');\r\n\r\nTable altered.<\/pre>\n<p>&nbsp;<\/p>\n<p>La partition a bien \u00e9t\u00e9 prise en compte dans la table<\/p>\n<pre>SQL&gt; select TABLE_NAME,PARTITION_NAME,HIGH_VALUE from user_tab_partitions \r\nwhere TABLE_NAME='EMPLOYES';\r\n\r\nTABLE_NAME           PARTITION_NAME       HIGH_VALUE\r\n-------------------- -------------------- -------------------------\r\nEMPLOYES             AV2000               TO_DATE(' 2000-01-01 00:0\r\nEMPLOYES             AV90                 TO_DATE(' 1990-01-01 00:0\r\nEMPLOYES             AV2010               TO_DATE(' 2010-01-01 00:0\r\nEMPLOYES             AV2020               TO_DATE(' 2020-01-01 00:0\r\n\r\nSQL&gt; select id, naissance from employes where naissance &gt; to_date('01-JAN-2010');\r\n\r\nID         NAISSANCE\r\n---------- ---------\r\n1001       12-JAN-10\r\n1002       01-FEB-14\r\n1003       08-MAR-13\r\n1004       10-JUN-12<\/pre>\n<p>&nbsp;<\/p>\n<p>Autre exemple avec notre table EMPLOYES_JOB dont le partitionning est fait par LIST et dont une des partitions porte sur un fichier dump.<\/p>\n<pre>SQL&gt; select TABLE_NAME,PARTITION_NAME,HIGH_VALUE,TABLESPACE_NAME \r\nfrom user_tab_partitions where TABLE_NAME='EMPLOYES_JOB';\r\n\r\nTABLE_NAME           PARTITION_NAME       HIGH_VALUE                TABLESPACE_NAME\r\n-------------------- -------------------- ------------------------- ----------------\r\nEMPLOYES_JOB         DBA                  'DBA'                     USERS\r\nEMPLOYES_JOB         DEVELOPPEUR          'DEVELOPPEUR'             SYSTEM<\/pre>\n<p>&nbsp;<\/p>\n<p>Supprimons la partition des d\u00e9veloppeurs qui est externe. Nous n&#8217;avons alors plus que des DBAs !<\/p>\n<pre>SQL&gt; alter table EMPLOYES_JOB drop partition DEVELOPPEUR;\r\n\r\nTable altered.\r\n\r\nSQL&gt; select TABLE_NAME,PARTITION_NAME,HIGH_VALUE,TABLESPACE_NAME \r\nfrom user_tab_partitions where TABLE_NAME='EMPLOYES_JOB';\r\n\r\nTABLE_NAME           PARTITION_NAME        HIGH_VALUE               TABLESPACE_NAME\r\n-------------------- -------------------- ------------------------- -----------------\r\nEMPLOYES_JOB         DBA                  'DBA'                     USERS\r\n\r\nSQL&gt; select JOB,count(id) from employes_job group by job;\r\n\r\nJOB                  COUNT(ID)\r\n-------------------- ----------\r\nDBA                  2<\/pre>\n<p>&nbsp;<\/p>\n<p>Et puis&#8230;. non,\u00a0 rajoutons la finalement (on a bien besoin de d\u00e9veloppeurs en fin de compte !)<\/p>\n<pre>SQL&gt; alter table EMPLOYES_JOB add partition DEVELOPPEUR values ('DEVELOPPEUR') \r\nexternal location ('empl_dev.dmp');\r\n\r\nTable altered.\r\n\r\nSQL&gt; select TABLE_NAME,PARTITION_NAME,HIGH_VALUE,TABLESPACE_NAME \r\nfrom user_tab_partitions where TABLE_NAME='EMPLOYES_JOB';\r\n\r\nTABLE_NAME           PARTITION_NAME       HIGH_VALUE                TABLESPACE_NAME\r\n-------------------- -------------------- ------------------------- -----------------\r\nEMPLOYES_JOB         DBA                  'DBA'                     USERS\r\nEMPLOYES_JOB         DEVELOPPEUR          'DEVELOPPEUR'             USERS\r\n\r\nSQL&gt; select JOB,count(id) from employes_job group by job;\r\n\r\nJOB                  COUNT(ID)\r\n-------------------- ----------\r\nDBA                  2\r\nDEVELOPPEUR          6<\/pre>\n<p>&nbsp;<\/p>\n<p>Nos d\u00e9veloppeurs sont \u00e0 nouveau pr\u00e9sents dans cette table.<\/p>\n<h2>Quelques limites<\/h2>\n<p>comme toute nouveaut\u00e9 Oracle fraichement lanc\u00e9e sur un moteur r\u00e9cent, la prise en charge des partitions hybrides comporte certaines limites d&#8217;utilisation.<\/p>\n<ul>\n<li>pas de partition HASH pour le type de partitionnement, seuls le RANGE et le LIST sont pris en compte<\/li>\n<li>comme nous avons pu le voir, Oracle sait classer dans la bonne partition logique toute donn\u00e9e ins\u00e9r\u00e9e via ordre SQL dans une partition interne. Pour la partition externe, c&#8217;est \u00e0 l&#8217;utilisateur de faire attention \u00e0 ins\u00e9rer la ligne dans le bon CSV correspondant si besoin de modification.<\/li>\n<li>Le partitionnement est hybride dans la mesure ou l&#8217;on peut mixer donn\u00e9es internes et donn\u00e9es externes, mais il ne sera pas possible de mixer des donn\u00e9es externes provenant d&#8217;un fichier dump ET d&#8217;un CSV. Lors de l&#8217;interrogation d&#8217;une table avec partitions externes de type ORACLE_DATAPUMP, par exemple, vous rencontreriez cette erreur\n<ul>\n<li>\n<pre>SQL&gt; select JOB,count(id) from employes_job group by job;\r\nERROR:\r\nORA-29913: error in executing ODCIEXTTABLEOPEN callout\r\nORA-31619: invalid dump file \"\/data\/oradata\/dir1\/avant80.csv\"<\/pre>\n<\/li>\n<\/ul>\n<\/li>\n<li>Pour supprimer une partition ayant l&#8217;attribut EXTERNAL, supprimer auparavant la partition attach\u00e9e par son nom.\n<ul>\n<li>\n<pre>SQL&gt; alter table EMPLOYES_JOB drop partition DEVELOPPEUR;\r\nSQL&gt; alter table EMPLOYES_JOB drop external partition attributes();<\/pre>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p>\ud83d\ude42<\/p>\n<p>Emmanuel RAMI<\/p>\n<a class=\"synved-social-button synved-social-button-share synved-social-size-24 synved-social-resolution-single synved-social-provider-twitter nolightbox\" data-provider=\"twitter\" target=\"_blank\" rel=\"nofollow\" title=\"Share on Twitter\" href=\"https:\/\/twitter.com\/intent\/tweet?url=https%3A%2F%2Fblog.capdata.fr%2Findex.php%2Fwp-json%2Fwp%2Fv2%2Fposts%2F8691&#038;text=Article%20sur%20le%20blog%20de%20la%20Capdata%20Tech%20Team%20%3A%20\" style=\"font-size: 0px;width:24px;height:24px;margin:0;margin-bottom:5px;margin-right:5px\"><img loading=\"lazy\" decoding=\"async\" alt=\"twitter\" title=\"Share on Twitter\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"24\" height=\"24\" style=\"display: inline;width:24px;height:24px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/blog.capdata.fr\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/48x48\/twitter.png\" \/><\/a><a class=\"synved-social-button synved-social-button-share synved-social-size-24 synved-social-resolution-single synved-social-provider-linkedin nolightbox\" data-provider=\"linkedin\" target=\"_blank\" rel=\"nofollow\" title=\"Share on Linkedin\" href=\"https:\/\/www.linkedin.com\/shareArticle?mini=true&#038;url=https%3A%2F%2Fblog.capdata.fr%2Findex.php%2Fwp-json%2Fwp%2Fv2%2Fposts%2F8691&#038;title=Oracle%2019c%20%3A%20Les%20partitions%20hybrides\" style=\"font-size: 0px;width:24px;height:24px;margin:0;margin-bottom:5px;margin-right:5px\"><img loading=\"lazy\" decoding=\"async\" alt=\"linkedin\" title=\"Share on Linkedin\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"24\" height=\"24\" style=\"display: inline;width:24px;height:24px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/blog.capdata.fr\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/48x48\/linkedin.png\" \/><\/a><a class=\"synved-social-button synved-social-button-share synved-social-size-24 synved-social-resolution-single synved-social-provider-mail nolightbox\" data-provider=\"mail\" rel=\"nofollow\" title=\"Share by email\" href=\"mailto:?subject=Oracle%2019c%20%3A%20Les%20partitions%20hybrides&#038;body=Article%20sur%20le%20blog%20de%20la%20Capdata%20Tech%20Team%20%3A%20:%20https%3A%2F%2Fblog.capdata.fr%2Findex.php%2Fwp-json%2Fwp%2Fv2%2Fposts%2F8691\" style=\"font-size: 0px;width:24px;height:24px;margin:0;margin-bottom:5px\"><img loading=\"lazy\" decoding=\"async\" alt=\"mail\" title=\"Share by email\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"24\" height=\"24\" style=\"display: inline;width:24px;height:24px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/blog.capdata.fr\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/48x48\/mail.png\" \/><\/a>","protected":false},"excerpt":{"rendered":"<p>&nbsp; Hello il ne m&#8217;a pas \u00e9t\u00e9 encore possible de tester la nouvelle version Oracle 21c, dans la mesure ou cette version est pour le moment &#8220;Cloud only&#8221;. Je vous propose donc, pour le moment, un article au sujet d&#8217;une&hellip; <a href=\"https:\/\/blog.capdata.fr\/index.php\/oracle-19c-les-partitions-hybrides-sur-les-tables\/\" class=\"more-link\">Continuer la lecture <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":32,"featured_media":8696,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[],"class_list":["post-8691","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-oracle"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v20.8 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Oracle 19c : Les partitions hybrides - Capdata TECH BLOG<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blog.capdata.fr\/index.php\/oracle-19c-les-partitions-hybrides-sur-les-tables\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Oracle 19c : Les partitions hybrides - Capdata TECH BLOG\" \/>\n<meta property=\"og:description\" content=\"&nbsp; Hello il ne m&#8217;a pas \u00e9t\u00e9 encore possible de tester la nouvelle version Oracle 21c, dans la mesure ou cette version est pour le moment &#8220;Cloud only&#8221;. Je vous propose donc, pour le moment, un article au sujet d&#8217;une&hellip; Continuer la lecture &rarr;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.capdata.fr\/index.php\/oracle-19c-les-partitions-hybrides-sur-les-tables\/\" \/>\n<meta property=\"og:site_name\" content=\"Capdata TECH BLOG\" \/>\n<meta property=\"article:published_time\" content=\"2021-06-08T09:00:50+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-06-07T15:43:34+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2021\/06\/hybrid_watishybrid.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"600\" \/>\n\t<meta property=\"og:image:height\" content=\"334\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Emmanuel RAMI\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"Emmanuel RAMI\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"13 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/blog.capdata.fr\/index.php\/oracle-19c-les-partitions-hybrides-sur-les-tables\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/blog.capdata.fr\/index.php\/oracle-19c-les-partitions-hybrides-sur-les-tables\/\"},\"author\":{\"name\":\"Emmanuel RAMI\",\"@id\":\"https:\/\/blog.capdata.fr\/#\/schema\/person\/797b9b6698fa35f7ce3e9a70a8b102ae\"},\"headline\":\"Oracle 19c : Les partitions hybrides\",\"datePublished\":\"2021-06-08T09:00:50+00:00\",\"dateModified\":\"2021-06-07T15:43:34+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/blog.capdata.fr\/index.php\/oracle-19c-les-partitions-hybrides-sur-les-tables\/\"},\"wordCount\":1283,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/blog.capdata.fr\/#organization\"},\"articleSection\":[\"Oracle\"],\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/blog.capdata.fr\/index.php\/oracle-19c-les-partitions-hybrides-sur-les-tables\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blog.capdata.fr\/index.php\/oracle-19c-les-partitions-hybrides-sur-les-tables\/\",\"url\":\"https:\/\/blog.capdata.fr\/index.php\/oracle-19c-les-partitions-hybrides-sur-les-tables\/\",\"name\":\"Oracle 19c : Les partitions hybrides - Capdata TECH BLOG\",\"isPartOf\":{\"@id\":\"https:\/\/blog.capdata.fr\/#website\"},\"datePublished\":\"2021-06-08T09:00:50+00:00\",\"dateModified\":\"2021-06-07T15:43:34+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/blog.capdata.fr\/index.php\/oracle-19c-les-partitions-hybrides-sur-les-tables\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blog.capdata.fr\/index.php\/oracle-19c-les-partitions-hybrides-sur-les-tables\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blog.capdata.fr\/index.php\/oracle-19c-les-partitions-hybrides-sur-les-tables\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/blog.capdata.fr\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Oracle 19c : Les partitions hybrides\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/blog.capdata.fr\/#website\",\"url\":\"https:\/\/blog.capdata.fr\/\",\"name\":\"Capdata TECH BLOG\",\"description\":\"Le blog technique sur les bases de donn\u00e9es de CAP DATA Consulting\",\"publisher\":{\"@id\":\"https:\/\/blog.capdata.fr\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/blog.capdata.fr\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/blog.capdata.fr\/#organization\",\"name\":\"Capdata TECH BLOG\",\"url\":\"https:\/\/blog.capdata.fr\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/blog.capdata.fr\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/01\/logo_capdata.webp\",\"contentUrl\":\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/01\/logo_capdata.webp\",\"width\":800,\"height\":254,\"caption\":\"Capdata TECH BLOG\"},\"image\":{\"@id\":\"https:\/\/blog.capdata.fr\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.linkedin.com\/company\/cap-data-consulting\/mycompany\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/blog.capdata.fr\/#\/schema\/person\/797b9b6698fa35f7ce3e9a70a8b102ae\",\"name\":\"Emmanuel RAMI\",\"sameAs\":[\"https:\/\/blog.capdata.fr\"],\"url\":\"https:\/\/blog.capdata.fr\/index.php\/author\/erami\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Oracle 19c : Les partitions hybrides - Capdata TECH BLOG","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blog.capdata.fr\/index.php\/oracle-19c-les-partitions-hybrides-sur-les-tables\/","og_locale":"fr_FR","og_type":"article","og_title":"Oracle 19c : Les partitions hybrides - Capdata TECH BLOG","og_description":"&nbsp; Hello il ne m&#8217;a pas \u00e9t\u00e9 encore possible de tester la nouvelle version Oracle 21c, dans la mesure ou cette version est pour le moment &#8220;Cloud only&#8221;. Je vous propose donc, pour le moment, un article au sujet d&#8217;une&hellip; Continuer la lecture &rarr;","og_url":"https:\/\/blog.capdata.fr\/index.php\/oracle-19c-les-partitions-hybrides-sur-les-tables\/","og_site_name":"Capdata TECH BLOG","article_published_time":"2021-06-08T09:00:50+00:00","article_modified_time":"2021-06-07T15:43:34+00:00","og_image":[{"width":600,"height":334,"url":"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2021\/06\/hybrid_watishybrid.jpg","type":"image\/jpeg"}],"author":"Emmanuel RAMI","twitter_card":"summary_large_image","twitter_misc":{"\u00c9crit par":"Emmanuel RAMI","Dur\u00e9e de lecture estim\u00e9e":"13 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blog.capdata.fr\/index.php\/oracle-19c-les-partitions-hybrides-sur-les-tables\/#article","isPartOf":{"@id":"https:\/\/blog.capdata.fr\/index.php\/oracle-19c-les-partitions-hybrides-sur-les-tables\/"},"author":{"name":"Emmanuel RAMI","@id":"https:\/\/blog.capdata.fr\/#\/schema\/person\/797b9b6698fa35f7ce3e9a70a8b102ae"},"headline":"Oracle 19c : Les partitions hybrides","datePublished":"2021-06-08T09:00:50+00:00","dateModified":"2021-06-07T15:43:34+00:00","mainEntityOfPage":{"@id":"https:\/\/blog.capdata.fr\/index.php\/oracle-19c-les-partitions-hybrides-sur-les-tables\/"},"wordCount":1283,"commentCount":0,"publisher":{"@id":"https:\/\/blog.capdata.fr\/#organization"},"articleSection":["Oracle"],"inLanguage":"fr-FR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blog.capdata.fr\/index.php\/oracle-19c-les-partitions-hybrides-sur-les-tables\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blog.capdata.fr\/index.php\/oracle-19c-les-partitions-hybrides-sur-les-tables\/","url":"https:\/\/blog.capdata.fr\/index.php\/oracle-19c-les-partitions-hybrides-sur-les-tables\/","name":"Oracle 19c : Les partitions hybrides - Capdata TECH BLOG","isPartOf":{"@id":"https:\/\/blog.capdata.fr\/#website"},"datePublished":"2021-06-08T09:00:50+00:00","dateModified":"2021-06-07T15:43:34+00:00","breadcrumb":{"@id":"https:\/\/blog.capdata.fr\/index.php\/oracle-19c-les-partitions-hybrides-sur-les-tables\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.capdata.fr\/index.php\/oracle-19c-les-partitions-hybrides-sur-les-tables\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/blog.capdata.fr\/index.php\/oracle-19c-les-partitions-hybrides-sur-les-tables\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/blog.capdata.fr\/"},{"@type":"ListItem","position":2,"name":"Oracle 19c : Les partitions hybrides"}]},{"@type":"WebSite","@id":"https:\/\/blog.capdata.fr\/#website","url":"https:\/\/blog.capdata.fr\/","name":"Capdata TECH BLOG","description":"Le blog technique sur les bases de donn\u00e9es de CAP DATA Consulting","publisher":{"@id":"https:\/\/blog.capdata.fr\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blog.capdata.fr\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/blog.capdata.fr\/#organization","name":"Capdata TECH BLOG","url":"https:\/\/blog.capdata.fr\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/blog.capdata.fr\/#\/schema\/logo\/image\/","url":"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/01\/logo_capdata.webp","contentUrl":"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/01\/logo_capdata.webp","width":800,"height":254,"caption":"Capdata TECH BLOG"},"image":{"@id":"https:\/\/blog.capdata.fr\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.linkedin.com\/company\/cap-data-consulting\/mycompany\/"]},{"@type":"Person","@id":"https:\/\/blog.capdata.fr\/#\/schema\/person\/797b9b6698fa35f7ce3e9a70a8b102ae","name":"Emmanuel RAMI","sameAs":["https:\/\/blog.capdata.fr"],"url":"https:\/\/blog.capdata.fr\/index.php\/author\/erami\/"}]}},"_links":{"self":[{"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/posts\/8691","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/users\/32"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/comments?post=8691"}],"version-history":[{"count":48,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/posts\/8691\/revisions"}],"predecessor-version":[{"id":8759,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/posts\/8691\/revisions\/8759"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/media\/8696"}],"wp:attachment":[{"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/media?parent=8691"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/categories?post=8691"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/tags?post=8691"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}