ORA-56935: les travaux Data Pump existants utilisent une version différente du fichier de données de fuseau horaire. En voilà une drôle d’erreur renvoyée par la console SQL Plus d’un serveur Oracle.

Dans un exemple de migration d’une base de données entre un serveur Oracle 11g et un 12c, l’erreur ORA56935 est apparue, empêchant ainsi l’import de la base au format datapump. Cela peut aussi arriver entre Oracle 10g et 11g, de 10 à 12, etc.

Cela parle d’un problème de fuseau horaire alors que les deux serveurs sont dans le même réseau et avec le même serveur de temps NTP. Il s’agit d’une erreur connue des DBA Oracle et voici la solution pour réussir à importer la base de données récalcitrante. L’opération s’applique au serveur complet et pas juste au tablespace en question.

 

Erreur lors d’un import Oracle

ORA-39006 : erreur interne
ORA-39065 : exception de processus maître inattendue dans DISPATCH
ORA-56935 : les travaux Data Pump existants utilisent une version différente du fichier de données de fuseau horaire
ORA-39097 : Le travail Data Pump a détecté une erreur inattendue -56935

 

Solution officielle Oracle

Sur le site du support Oracle référençant les Database Error Messages (lien) :

ORA-56935 : existing datapump jobs are using a different version of time zone data file
Cause: An attempt was made from a datapump job to request a different version of time zone data file from the one used by existing datapump jobs.
Action: Wait until existing datapump jobs unload the secondary time zone data file.

 

Solution efficace

La manipulation se fait avec une simple ligne de commande, au niveau du serveur SGBDR, pas d’un tablespace.

1. Ouvrir une console SQLPlus sur le serveur Oracle 12c (celui qui reçoit l’import de BDD).

2. Se connecter avec un compte sys ou équivalent.

sqlplus oracle sql plus

3. Entrer et valider les commandes suivantes :

ALTER SESSION SET EVENTS ‘30090 TRACE NAME CONTEXT FOREVER, LEVEL 32’;

exec dbms_dst.unload_secondary;

tutoriel Oracle fuseau horaire ora 56935

4. On peut vérifier la nouvelle valeur du fuseau horaire / timezone par cette commande (via Oracle SQL Developer par exemple) :

SELECT PROPERTY_NAME, SUBSTR (property_value, 1, 30) value
FROM DATABASE_PROPERTIES
WHERE PROPERTY_NAME LIKE ‘DST_%’
ORDER BY PROPERTY_NAME;

5. Le résultat doit être celui-ci :

DST_PRIMARY_TT_VERSION
26

DST_SECONDARY_TT_VERSION
0

DST_UPGRADE_STATE
NONE

tutoriel Oracle fuseau horaire ora 56935

Si le résultat est différent, il faudra peut-être appliquer une seconde fois les deux commandes de l’étape 3.

tutoriel Oracle fuseau horaire ora 56935

5. Le serveur peut maintenant accepter un import de datapump sans provoquer d’erreur de fuseau horaire ORA-56935.