14 Mai 2018
Hello,
Ah ce mois de mai.... peu propice au travail, mais plutôt à rêver de nouvelles aventures Africaines (Février 2019 ... que ça va être long). Heureusement Oracle nous offre toujours des petits sujets intéressants.
Avec Oracle, pour bon nombre de clients le nerf de la guerre, c'est l'argent.... Alors cela n'est pas rare de voir des clients passer d'une voiture de luxe (Enterprise avec toutes options comme le partitionning entre autre) à une Deux CV (Standard Edition).
Et quand cela se produit, et bien il faut migrer... Il n'y a pas de miracle... pour un downgrade Enterprise-> Standard Edition, il faut.
Et c'est à ce moment que souvent tout ne se passe pas comme prévu....
Typiquement, voila ce qui m'arrive pendant l'import !
Processing object type SCHEMA_EXPORT/TABLE/TABLE
ORA-39083: Object type TABLE:"LOLO"."CLIENTS" failed to create with error:
ORA-00439: feature not enabled: Partitioning
Et oui mon dump provient d'une version enterprise ou le partitionning était activé...
Et pas possible de jouer les demi-riches avec ORacle, donc on n'oublie tout de suite la tentation de prendre l'option partitionning sur notre Standard Edition..
Les options payantes d'Oracle (Partitionning, Diagnostick Pack,...), nous ne pouvons les payer que si l'on a déjà payé l'Enterprise..
En fonction du nombre de tables concernées, on pourrait extraire le ddl du dump, créer les tables en questions en enlevant tout ce qui concerne le paritionning et lancer l'import.
Il n'aura échapper à personne que je suis fainéant...
Depuis ORacle 11g, il est possible d'utiliser le paramètre PARTITION_OPTIONS avec IMPDP. Celui-ci peut prendre 3 valeurs.
C'est évidemment la dernière option qui va nous intéresser car cela reviendra au final à avoir une table sans partition... et ca tombe bien ... C'est ce que l'on recherche.
Remarque : Les indexes partitionnés deviendront de la même façon des indexes non partitionnés.
J'en vois au fond qui sont sceptiques... Let's go !
[oracle@rasta db_2]$ impdp system/**** directory=test dumpfile=test.dmp PARTITION_OPTIONS=merge Import: Release 12.2.0.1.0 - Production on Mon May 14 21:01:03 2018 Copyright (c) 1982, 2017, Oracle and/or its affiliates. All rights reserved. Connected to: Oracle Database 12c Standard Edition Release 12.2.0.1.0 - 64bit Production Master table "SYSTEM"."SYS_IMPORT_FULL_01" successfully loaded/unloaded Starting "SYSTEM"."SYS_IMPORT_FULL_01": system/******** directory=test dumpfile=test.dmp PARTITION_OPTIONS=merge Processing object type SCHEMA_EXPORT/USER ORA-31684: Object type USER:"LOLO" already exists Processing object type SCHEMA_EXPORT/SYSTEM_GRANT Processing object type SCHEMA_EXPORT/ROLE_GRANT Processing object type SCHEMA_EXPORT/DEFAULT_ROLE Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA Processing object type SCHEMA_EXPORT/TABLE/TABLE Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA . . imported "LOLO"."CLIENTS":"P75" 5.914 KB 1 rows . . imported "LOLO"."CLIENTS":"P78" 5.929 KB 2 rows . . imported "LOLO"."CLIENTS":"P95" 0 KB 0 rows Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX Processing object type SCHEMA_EXPORT/STATISTICS/MARKER Job "SYSTEM"."SYS_IMPORT_FULL_01" completed with 1 error(s) at Mon May 14 21:01:06 2018 elapsed 0 00:00:02 [oracle@rasta db_2]$
Et voila le tour est joué.. mes trois partitions (P75,78 et P95) sont bien importées et j'ai ma table avec ses trois lignes.( 1 issue de P75 & 2 de P78)
SQL> SQL> SQL> select count(*) from lolo.clients; COUNT(*) ---------- 3 SQL>
On peut bien sur vérifier qu'il n'y a plus de partitions.
SQL> SQL> select count(*) from dba_tab_partitions where table_owner='LOLO'; COUNT(*) ---------- 0 SQL> select count(*) from dba_ind_partitions where index_owner='LOLO'; COUNT(*) ---------- 0 SQL>
alors que sur la base en version Enterprise
SQL> select count(*) from dba_tab_partitions where table_owner='LOLO'; COUNT(*) ---------- 3 SQL> SQL> select count(*) from dba_ind_partitions where index_owner='LOLO'; COUNT(*) ---------- 3 SQL>
Remarque: Il n'est pas exclu d'avoir d'autres soucis à l'import... mais cela fera déjà au moins un de regler.
Enjoy !