En este articulo les quiero enseñar, cómo podemos tener un poco más de control sobre nuestros backups o importaciones generados con Data Pump.
En algunos casos, podemos tener la necesidad de detener o matar definitivamente nuestro procesos de backup o nuestras importaciones. Este, ya sea porque se requiere realizar una actividad de alta prioridad o alguna otra razón.
Tomando como ejemplo, la ejecucion de un expdp
expdp system directory=BKP dumpfile=expdp_$ORACLE_SID'_'$fecha.dmp logfile=expdp_$ORACLE_SID'_'$fecha.log full=y exclude=statistics
Si presionamos la combinación Ctrl+c desde la línea de comando con la cual ejecutamos nuestro expdp, entraremos a el modo interactivo de Data Pump
Export: Release 11.2.0.4.0 - Production on Tue Dec 15 11:50:47 2020
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
Password:
Connected to: Oracle Database 11g Release 11.2.0.4.0 - 64bit Production
Starting "SYSTEM"."SYS_EXPORT_FULL_01": system/******** directory=BKP dumpfile=expdp_soyundba_15Dec2020_1027.dmp logfile=expdp_soyundba_15Dec2020_1027.log full=y exclude=statistics
Estimate in progress using BLOCKS method...
^C
Export>
A partir de este momento, estaremos realizando la interacción con el job de Data Pump. Teniendo en cuenta que cuando realizamos un export o import con Data Pump, se realiza automáticamente la creación de un job en la base de datos
También se puede presentar el caso, en el cual no ejecutemos directamente el expdp o impdp. Ya sea porque este se ejecutó a través del crontab u otro medio. Para estos casos, con la siguiente consulta, obtendremos el estado de los jobs
SQL> SELECT OWNER_NAME, JOB_NAME, OPERATION, JOB_MODE,
STATE, ATTACHED_SESSIONS
FROM DBA_DATAPUMP_JOBS
WHERE JOB_NAME NOT LIKE 'BIN$%'
ORDER BY 1,2;
OWNER_NAME JOB_NAME
------------------------------ ------------------------------
OPERATION
--------------------------------------------------------------------------------
JOB_MODE
--------------------------------------------------------------------------------
STATE ATTACHED_SESSIONS
------------------------------ -----------------
SYSTEM SYS_EXPORT_FULL_01
EXPORT
FULL
EXECUTING 1
SQL>
Obteniendo el JOB_NAME, entonces podremos realizar la conexión a la consola de Data Pump
[oracle@soyundba ~]$ expdp system attach=SYS_EXPORT_FULL_01
Export: Release 11.2.0.4.0 - Production on Wed Dec 30 11:51:25 2020
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
Password:
Connected to: Oracle Database 11g Release 11.2.0.4.0 - 64bit Production
Job: SYS_EXPORT_FULL_01
Owner: SYSTEM
Operation: EXPORT
Creator Privs: TRUE
GUID: B7B2505DA94210CFE0539A27A8C06106
Start Time: Wednesday, 30 December, 2020 11:51:09
Mode: FULL
Instance: soyundba
Max Parallelism: 1
EXPORT Job Parameters:
Parameter Name Parameter Value:
CLIENT_COMMAND system/******** directory=BKP dumpfile=expdp_soyundba_30Dec2020_1151.dmp logfile=expdp_soyundba_30Dec2020_1151.log full=y exclude=statistics
State: EXECUTING
Bytes Processed: 0
Current Parallelism: 1
Job Error Count: 0
Dump File: /backup/soyundba/dpump/expdp_soyundba_30Dec2020_1151.dmp
bytes written: 4,096
Worker 1 Status:
Process Name: DW00
State: EXECUTING
Object Type: DATABASE_EXPORT/SYSTEM_PROCOBJACT/POST_SYSTEM_ACTIONS/PROCACT_SYSTEM
Completed Objects: 4
Total Objects: 4
Worker Parallelism: 1
Export>
Detener Data Pump
Para detener nuestro proceso, ejecutaremos stop_job en la consola
Export> stop_job=immediate
Are you sure you wish to stop this job ([yes]/no): yes
[oracle@soyundba ~]$
Ahora validando con el query anterior, el estado del job, podremos observar que se encuentra en NOT RUNNING
SQL> /
OWNER_NAME JOB_NAME
------------------------------ ------------------------------
OPERATION
--------------------------------------------------------------------------------
JOB_MODE
--------------------------------------------------------------------------------
STATE ATTACHED_SESSIONS
------------------------------ -----------------
SYSTEM SYS_EXPORT_FULL_01
EXPORT
FULL
NOT RUNNING 0
SQL>
Reanudar Data Pump
Para reanudar el proceso, ejecutaremos continue_client en la consola
Export> continue_client
Job SYS_EXPORT_FULL_01 has been reopened at Wed Dec 30 12:42:05 2020
Restarting "SYSTEM"."SYS_EXPORT_FULL_01": system/******** directory=BKP dumpfile=expdp_soyundba_30Dec2020_1213.dmp logfile=expdp_soyundba_30Dec2020_1213.log full=y exclude=statistics
Processing object type DATABASE_EXPORT/SCHEMA/PACKAGE/PACKAGE_SPEC
Al momento de reanudar, éste además continuará desde donde quedó y nos enseñará la continuidad del log
Validando con el query anterior, el estado del job, podremos observar que se encuentra en EXECUTING
SQL> /
OWNER_NAME JOB_NAME
------------------------------ ------------------------------
OPERATION
--------------------------------------------------------------------------------
JOB_MODE
--------------------------------------------------------------------------------
STATE ATTACHED_SESSIONS
------------------------------ -----------------
SYSTEM SYS_EXPORT_FULL_01
EXPORT
FULL
EXECUTING 1
SQL>
Podemos validar de igual manera el log del expdp, en este nos mostrará el momento en que se detuvo el Data Pumo y así mismo el momento en que se reanudo
Processing object type DATABASE_EXPORT/SCHEMA/TABLE/COMMENT
Processing object type DATABASE_EXPORT/SCHEMA/PACKAGE/PACKAGE_SPEC
Job "SYSTEM"."SYS_EXPORT_FULL_01" stopped due to fatal error at Wed Dec 30 12:14:00 2020 elapsed 0 00:00:38
Job SYS_EXPORT_FULL_01 has been reopened at Wed Dec 30 12:42:05 2020
Restarting "SYSTEM"."SYS_EXPORT_FULL_01": system/******** directory=BKP dumpfile=expdp_soyundba_30Dec2020_1213.dmp logfile=expdp_soyundba_30Dec2020_1213.log full=y exclude=statistics
Processing object type DATABASE_EXPORT/SCHEMA/PACKAGE/PACKAGE_SPEC
Processing object type DATABASE_EXPORT/SCHEMA/PACKAGE/GRANT/OWNER_GRANT/OBJECT_GRANT
Matar Data Pump
Para matar el proceso, ejecutaremos kill_job en la consola
Export> kill_job
Are you sure you wish to stop this job ([yes]/no): yes
[oracle@soyundba ~]$
De este modo, matamos el proceso definitivamente, sin dejar ningún rastros.
Te invito a seguir consultando más articulos relacionados a Oracle dando clic aquí.
Ya, claro… eso es lo fácil. Y si el proceso no muere con kill_job ?? ¿Qué haces?
Holas Antonio,
Lo que puedes realizar es borrar directamente la tabla que se genera temporalmente con la ejecución del job datapump.
Con la consulta que está el artículo (la anexo más abajo), obtienes el JOB_NAME y el OWNER, teniendo estos dos datos, te debes conectar con un usuario que tenga los privilegios y ejecutar el drop a la tabla.
Ejemplo:
drop table SYSTEM.SYS_EXPORT_FULL_01 purge;
Query:
SELECT OWNER_NAME, JOB_NAME, OPERATION, JOB_MODE,
STATE, ATTACHED_SESSIONS
FROM DBA_DATAPUMP_JOBS
WHERE JOB_NAME NOT LIKE ‘BIN$%’
ORDER BY 1,2;