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
Índice
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.