ORA-39358: La exportación de la versión de archivo de volcado no es compatible con la versión de destino

El ORA-39358 aparece cuando queremos recargar un export dump (expdp) realizado en una versión superior de Oracle Database en una versión anterior. Es decir que el expdp es de una versión más reciente de la base de datos y, por tanto, no podemos cargarlo en una versión más antigua (o al menos así de buenas a primeras no podemos).

Puede aparecer con distintos números de versionado, pero el error siempre será algo parecido a esto:

ORA-39002: operación no válida
ORA-39358: La exportación de la versión de archivo de volcado 19.0.0.0.0 no es compatible con la versión de destino 18.1.0.0.0

Comprobaciones previas

La solución es muy sencilla pero antes tendremos que realizar algunas comprobaciones. Para ello lanzamos el siguiente comando en ambas bases de datos:

show parameter compatible;

En mi caso me devolvía lo siguiente:

Base de datos orígen (donde realicé el expdp):

NAME              TYPE    VALUE  
----------------- ------- ------ 
compatible        string  19.0.0 
noncdb_compatible boolean FALSE  

Base de datos destino (donde realicé el impdp):

NAME              TYPE    VALUE  
----------------- ------- ------ 
compatible        string  18.0.0 
noncdb_compatible boolean FALSE  

Solución al ORA-39358

Para poder importar los datos correctamente tendremos que hacer un nuevo expdp de base de datos incluyendo el parámetro versión:

version=18.0

Donde el número de versión será el valor que nos ha devuelto la base de datos destino (donde queremos importar). El valor siempre será la primera cifra seguida del punto y la segunda cifra. El resto lo podemos ignorar. En mi caso 18.0 pero en el vuestro podría ser otro totalmente diferente. Hace algunos años era habitual encontrarse esta problemática con Oracle 12, como vemos en este ejemplo.

Solución alternativa al ORA-39358

Otra solución es modificar el parámetro de compatibilidad en la base de datos destino para hacerla compatible con el expdp que ya tenemos. Personalmente no lo recomiendo porque puede afectar a la base de datos en otros sentidos y además implica reiniciar, pero os dejo también la solución por si, en vuestro caso en particular, lo preferís así.

Podéis cambiar la compatibilidad con la siguiente sentencia:

alter system set compatible='18.0.0' scope=spfile;

El valor compatible en este caso es idéntico al que hemos extraído en las comprobaciones previas. Después de esto tendremos que reiniciar la base de datos:

shutdown immediate;

Después de esto ya seremos capaces de importar la copia.

Deja un comentario