lunes, 18 de febrero de 2008

Jobs de Oracle

Los jobs de Oracle son a grandes rasgos una herramienta para la planificación y/o programación de tareas dentro de la base de datos; tenemos una funcionalidad algo similar a la proporcionada por el cron de GNU/Linux. En versiónes Oracle 10g el paquete original ya está siendo sustituido por dbms_scheduler.

¿Qué se puede hacer cuando un job falla? En primer lugar, ver el fichero de alertas de Oracle, el alert.log, para comprobar la existencia de errores. Es posible que esos errores sean achacables a un fallo de programación; en ese caso, habría que contactar con los programadores para que sean ellos los que se encarguen de solucionar el fallo. En otros casos, la culpa será del Sistema (la bd ó el so), y ahí será el dba quien tenga que remangarse para arreglar el problema.

Consulta rápida para comprobar los jobs de una base de datos:

select job,failures,last_date,last_sec,next_date,next_sec,schema_user from dba_jobs;

Cuando un job falla 16 veces seguidas entra en un estado que se conoce como BROKEN y no vuelve a ser ejecutado por el planificador. En este caso será necesario primero solventar el error, y seguidamente cambiar el estado del job para que el planificador lo vuelva a ejecutar. Para hacer esto se pueden usar dos métodos:

exec dbms_job.run(job); –> job es el número de job resultado de la consulta anterior.

ó

exec dbms_job.broken(job,FALSE,next_date); –> next_date puede ser una fecha, en el formato que tenga la fecha en la base de datos, o una función que haga uso de SYSDATE.

Ejm:

DECLARE
X NUMBER;
BEGIN
SYS.DBMS_JOB.SUBMIT
( job => X
,what => 'TRUNC_TABLE;'
,next_date => to_date('29/02/2008 23:00:00','dd/mm/yyyy hh24:mi:ss')
,interval => 'last_day(sysdate) - 01/24'
,no_parse => TRUE
);
SYS.DBMS_OUTPUT.PUT_LINE('Job Number is: ' || to_char(x));
END;
/

commit;


Run Job:

EXECUTE DBMS_JOB.RUN(Numero de Job);