Oracle Database

PEOUG en Facebook
Migrar DBMS_JOB a DBMS_SCHEDULER: Un ejemplo introductorio

La base de datos Oracle tiene la propiedad de ejecutar jobs o “trabajos”, en forma automática, de acuerdo a la necesidad de cada escenario. En Oracle 9i R2 tenemos la opción de programarlos en la base de datos haciendo uso del paquete DBMS_JOB, pero a partir de Oracle 10g se introduce DBMS_SCHEDULER, con el objetivo de mejorar la experiencia de programación de JOBS en bases de datos Oracle. ¿Que podemos hacer si quisieramos iniciar una migración de los jobs con DBMS_JOB a DBMS_SCHEDULER? y adicionalmente tener visibilidad de estos jobs vía Oracle Grid Control o Database Control en 10g o superior. A continuación les muestro un ejemplo introductorio:

1. Job Creado con DBMS_JOB

VARIABLE jobno number;
BEGIN
DBMS_JOB.SUBMIT(:jobno, ‘dbms_ddl.analyze_object(”TABLE”,”SYS”,”MIGUEL01”,”ESTIMATE”, NULL, 50);’, SYSDATE, ‘SYSDATE + 1′);
COMMIT;
END;
/

2. Consultar la información del JOB en la BD:

select job, log_user, next_date, next_sec, interval, what from user_jobs;

JOB LOG_USER NEXT_DATE NEXT_SEC INTERVAL WHAT
—– ——– ——— ——– ———— ——————————
6038 SYS 29-APR-09 01:23:47 SYSDATE + 1 dbms_ddl.analyze_object(’TABLE’,’SYS’,’MIGUEL01′,’ESTIMATE’,NULL, 50);

3. Ejecutar el siguiente QUERY para convertir “rápidamente” a DBMS_SCHEDULER. Se deberá revisar manualmente la sintaxis, estructura y demás datos necesarios para migrar a DBMS_SCHEDULER. Este script es util ya que nos da una idea de cómo podría quedar en DBMS_SCHEDULER.

select ‘dbms_scheduler.create_job( ‘ || chr(10)
|| ‘ job_name=>”’ || substr(upper(translate(what,’.(),;’,’_’)),1,20) ||’_JOB’ || ”’, ‘ || chr(10)
|| ‘ job_type=> ”PLSQL_BLOCK”,’ || chr(10)
|| ‘ job_action=> ”begin ‘ || what || ‘ end;”, ‘ || chr(10)
|| ‘ start_date => to_timestamp(”’ || to_char(next_date,’mm/dd/yyyy hh24:mi:ss’) || ”’, ”mm/dd/yyyy hh24:mi:ss”), ‘ || chr(10)
|| DECODE (interval,’null’,NULL, ‘ repeat_interval => ”’ || interval || ”’, ‘ || chr(10) )
|| ‘ enabled => true, auto_drop=> false, ‘ || chr(10)
|| ‘ comments => ”Converted from job ‘ || job || ”” || chr(10)
|| ‘);’ || chr(10) as OUTPUT
from user_jobs
where broken = ‘N’;

OUTPUT
————————————————————————————
dbms_scheduler.create_job(
job_name=> ‘DBMS_DDL_ANALYZE_OBJ_JOB’,
job_type=> ‘PLSQL_BLOCK’,
job_action=> ‘begin dbms_ddl.analyze_object(’TABLE’,’SYS’,’MIGUEL01′,’ESTIMATE’, NULL, 50); end;’,
start_date => to_timestamp(’04/29/2009 01:23:47′, ‘mm/dd/yyyy hh24:mi:ss’),
repeat_interval => ‘SYSDATE + 1′,
enabled => true, auto_drop=> false,
comments => ‘Converted from job 6038′
);

4. El OUTPUT del punto 3 nos muestra como seria el formato del mismo JOB pero en DBMS_SCHEDULER, hacemos los ajustes necesarios sobretodo para el parámetro job_action, start_date y repeat_interval si fuera necesario:

begin
dbms_scheduler.create_job(
job_name=>’DBMS_DDL_ANALYZE_OBJ_JOB’,
job_type=> ‘PLSQL_BLOCK’,
job_action=> ‘begin dbms_ddl.analyze_object(”TABLE”,”SYS”,”MIGUEL01”,”ESTIMATE”, NULL, 50); end;’,
start_date => to_timestamp(’04/29/2009 01:23:47′, ‘mm/dd/yyyy hh24:mi:ss’),
repeat_interval => ‘SYSDATE + 1′,
enabled => true, auto_drop=> false,
comments => ‘Converted from job 6038′
);
end;
/

PL/SQL procedure successfully completed.

5. Ahora podemos visualizar la información del JOB en Oracle Grid Control, la herramienta de gestión y monitoreo para el personal de soporte y DBA.

oracle

En: Oracle Database, Scheduler el 28 abril 2009

You must be logged in to post a comment.