Hoy vamos a ver como solucionar el problema de relanzar algunos datapumps fallidos cuando nos devuelven el error ORA-31633
Una de las principales diferencias entre el export tradicional y el nuevo expdp es que el expdp crea un job en la base de datos que es quien se encarga de la labor de sacar los datos.
Cuando detenemos esta exportación de manera no controlada, puede ser que la definición del trabajo creada por el export quede dentro de la base de datos, con lo que, al volver a lanzar el trabajo del export recibamos un error «ORA-31633: unable to create master table XXX»
ORA-31626: job does not exist ORA-31633: unable to create master table "SYSTEM.EXPORT_DIAR" ORA-06512: at "SYS.DBMS_SYS_ERROR", line 95 ORA-06512: at "SYS.KUPV$FT", line 863 ORA-01031: insufficient privileges
Para solucionar este problema, lo primero que tenemos que hacer es comprobar que trabajos no se encuentran en estado RUNNING
SET lines 200 SELECT owner_name, job_name, operation, job_mode, state, attached_sessions FROM dba_datapump_jobs ORDER BY 1,2;
Esta consulta nos devuelve la informacion de los trabajos de datapump que hay en la base de datos, el resultado es una tabla del tipo
OWNER_NAME JOB_NAME OPERATION JOB_MODE STATE ATTACHED ———- ——————- ——— ——— ———– ——– SCOTT EXPORT_TABLA_1 EXPORT TABLE NOT RUNNING 0 SYSTEM EXPORT_DIARIA EXPORT FULL NOT RUNNING 0
Aquí podemos ver como tenemos dos trabajos, uno del usuario SCOTT y otro de SYSTEM que están en estado NOT RUNNING, con lo que podemos eliminarlos.
Ahora buscaremos cual es la «master table» del job con la consulta
SELECT o.status, o.object_id, o.object_type,
o.owner||’.'||object_name “OWNER.OBJECT”
FROM dba_objects o, dba_datapump_jobs j
WHERE o.owner=j.owner_name AND o.object_name=j.job_name
AND j.job_name NOT LIKE ‘BIN$%’ ORDER BY 4,2;
STATUS OBJECT_ID OBJECT_TYPE OWNER.OBJECT
——- ———- ———— ————————-
VALID 15223 TABLE SCOTT. EXPORT_TABLA_1
VALID 15293 TABLE SYSTEM.EXPORT_DIARIA
Ahora podemos eliminar las tablas de los trabajos con la consulta.
SQL> DROP TABLE SCOTT. EXPORT_TABLA_1; SQL> DROP TABLE SYSTEM.EXPORT_DIARIA;
Con esto habremos limpiado la tabla de los jobs del datapump, con lo que podremos volver a lanzar nuestro script sin problemas