impdp – erreur ORA-00439 en 11g !

Lors d’une duplication de schéma entre deux databases 11g, via les outils DataPump d’Oracle « expdp / impdp », un client nous appelle car il  tombe sur une erreur ORA—00439 dans la phase d’import :
ORA-00439: fonction non activée : Deferred Segment Creation
Il lui semble que le problème vient de la base source, car après des recherches avec son ami « G….e », il lui semble qu’il faut modifier le paramètre « deferred_segment_creation » pour le passer à FALSE.
Il redémarre l’instance source, fait un export complet avec expdp, puis  importe à nouveau le schéma désiré via impdp MAIS toujours la même erreur.
Il nous envoie donc son log en nous demandant de l’aide pour ce transfert de schéma qui ne devait lui prendre que quelques minutes :

Import: Release 11.2.0.1.0 - Production on … 2014
Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.
;;;
Connecté à : Oracle Database 11g Release 11.2.0.1.0 - 64bit Production
Table maître "SYSTEM"."SYS_IMPORT_SCHEMA_01" chargée/déchargée avec succès
Démarrage de "SYSTEM"."SYS_IMPORT_SCHEMA_01" : system/********@XXXXX directory=datapump dumpfile=XXXXX.DMP schemas=XXXXX
Traitement du type d'objet SCHEMA_EXPORT/USER
Traitement du type d'objet SCHEMA_EXPORT/SYSTEM_GRANT
Traitement du type d'objet SCHEMA_EXPORT/ROLE_GRANT
Traitement du type d'objet SCHEMA_EXPORT/DEFAULT_ROLE
Traitement du type d'objet SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
Traitement du type d'objet SCHEMA_EXPORT/TYPE/TYPE_SPEC
Traitement du type d'objet SCHEMA_EXPORT/SEQUENCE/SEQUENCE
Traitement du type d'objet SCHEMA_EXPORT/TABLE/TABLE
ORA-39083: Echec de la création du type d'objet TABLE:"XXXXX"."DATA" avec erreur :
ORA-00439: fonction non activée : Deferred Segment Creation
SQL en échec :
CREATE TABLE ...
  ....
  ....
Traitement du type d'objet SCHEMA_EXPORT/TABLE/TRIGGE
Traitement du type d'objet SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Traitement du type d'objet SCHEMA_EXPORT/TABLE/INDEX/DOMAIN_INDEX/INDEX
Traitement du type d'objet SCHEMA_EXPORT/JOB
Travail "SYSTEM"."SYS_IMPORT_SCHEMA_01" terminé avec 105 erreur(s) à 10:15:40

Nous lui demandons de préciser la version et l’édition de la database  source  :
11.2.0.3.0   Enterprise Edition
La version cible : 11.2.0.1.0 Standard Edition est donnée dans la trace de l’impdp.
Notre premier réflexe :  l’orienter sur notre blog préféré 😉 Où l’article suivant nous explique tout sur ce paramètre « à surprise » Deferred Segment Creation en 11gR2 :
http://arkzoyd.wpengine.com/2011/04/18/effet-cache-de-la-database-11g-deferred-segment-creation/?lang=fr
Et là tout s’éclaire : On ne peut pas importer en Standard Edition des Tables créées avec ce paramètre, qui est fait pour une fonctionnalité utilisable en Enterprise Edition…
Faut-il donc passer sur toutes les tables et indexes de la base source ? pour passer une instruction du type :

alter table  allocate extent;

Mais non ! Car impdp a tout prévu : quand on exporte / importe des databases de versions différentes, il est judicieux de préciser le paramètre « version ».
Nous allons donc tromper « impdp »  en positionnant le paramètre « version=11.1 » qui va faire ignorer à l’import les fonctionnalités « par défaut » de la 11.2. Car c’est seulement depuis la 11.2 que le paramètre deferred_segment_creation est à TRUE par défaut.
Donc si le deferred_segment_creation n’a pas été mis explicitement, lors de la création des tables et indexes du schéma, cette option sera ignorée à l’import.
Nous proposons donc à notre client de faire un import du style :

impdp <tous les paramètres comme avant> version=11.1

Puis de nous appeler et nous envoyer des logs si le problème persiste ou si un autre survient.
ET la bonne nouvelle c’est que … pas de nouvelle !   L’astuce a donc fonctionné.