Overblog
Editer l'article Suivre ce blog Administration + Créer mon blog
LAMI DBA

Articles autour des SGBD Oracle, SQL Server & PostgreSQL

IMPDP - PARTITION_OPTIONS

 

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.

  • Installer un noyau Standard Edition
  • Créer une base (c'est mieux)
  • Effectuer un export sur la base en Enterprise
  • Et finalement importer sur la nouvelle base en Standard Edition.

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.

  • none                 => Valeur par défaut
  • departition        => Transformera chaque partition en une table.
  • merge               => Fusionnera les partitions.

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 !

 

 

Partager cet article
Repost0
Pour être informé des derniers articles, inscrivez vous :
Commenter cet article