Oracle Jobs. Planificando tareas en Oracle
1. Objetivo
Este artículo muestra como ORACLE maneja las tareas planificadas (oracle jobs) y qué parámetros y procesos afectan a esta planificación así como la manera de crearlos fácilmente a través de TOAD. (Para bases de datos ORACLE 9).
2. Introducción
La base de datos ORACLE ofrece una cola para planificar algunas operaciones que se hace rutinarias en una base de datos ORACLE. La funcionalidad de los Jobs de oracle es parecida al cron de UNIX en el cual se puede planificar una tarea a una determinada hora y con una periodicidad concreta. La diferencia notable que podríamos tener entre el cron de UNIX y el job de oracle es obvia. El job de oracle se programa dentro de la base de datos por lo tanto si la base de datos no está funcionando, el job no se ejecutará.
3. ¿Cómo se lleva a cabo la planificación?
La planificación (en oracle9i) se lleva a cabo a través del paquete DBMS_JOB. Dada la diferencia anotada anteriormente entre cron y job podemos decir que la utilización de jobs sería conveniente realizarla cuando la tarea que se realice afecte a la base de datos, que es la que tiene que estar funcionado. Para tareas del sistema en este caso sería más propio utilizar el cron o “gestor” de tareas programadas que tenga el sistema operativo.
ORACLE iniciará un proceso coordinador de esta cola de tareas coordinator job queue (CJQ0) para gestionar la planificación los jobs.
4. Parámetros en init.ora / spfile.ora
Para que cualquier Job de oracle se pueda ejecutar correctamente tenemos que tener en cuenta el parámetro job_queue_processes el cual nos indica el número de colas que gestionarán nuestros jobs. Si este parámetro está a cero, por muchos Jobs que programemos en nuestra base de datos, no se ejecutarán.
En este caso no se ejecutarían nuestros Jobs:
SQL> show parameter job_queue_processes
NAME TYPE VALUE
---------------------------------------
job_queue_processes integer 0
En este caso disponemos de una cola que gestionará todos nuestros JOBS:
SQL> show parameter job_queue_processes
NAME TYPE VALUE
---------------------------------------
job_queue_processes integer 1
Este parámetro debe de ser mayor del número de jobs que se desee ejecutar de forma simultánea. El máximo lo pone ORACLE en 1000. Una de las formas de cambiar este parámetro es lanzando la siguiente sentencia.
ALTER SYSTEM SET job_queue_processes = numero_colas
Para que esta operación tenga efecto se debe de reiniciar la base de datos ya que es un parámetro estático.
5. Vistas para ver los jobs de la base de datos
Estas son las vistas a través de las cuales se pueden ver los jobs que están planificados en la base de datos.
DBA_JOBS: Muestra la información de todos los jobs de la base de datos.
ALL_JOBS: Muestra la misma información que dba_jobs pero sólo los jobs a los cuales puede acceder el usuario actual con el que se está realizando la consulta.
USER_JOBS: Muestra la misma información que dba_jobs pero solo con los jobs del cual es propietario el usuario con el que se realiza la consulta.
DBA_JOBS_RUNNING: Esta vista contiene la información de todos los jobs que actualmente están corriendo en la base de datos.
6. Manejo de jobs con TOAD
Mediante el cliente Toad es muy sencillo gestionar los JOBS de oracle, tanto su creación como su modificación y planificación.
En la pestaña Jobs podemos gestionar estas tareas a través de una sencilla interfaz.
Cuando seleccionamos el job que queremos modificar se activan los demás botones para gestionar estos jobs. El primer icono indica la “creación de un nuevo Job”. El segundo icono indica la “modificación del Job seleccionado”. El tercer icono que no está resaltada indicaría la puesta en marcha de ese Job ya que significaría que estaría parado. El cuarto icono sería para parar la ejecución de ese job. El quinto icono sería para ejecutar la tarea en ese preciso instante. Y el último icono sería para borrar el job seleccionado.
A continuación mostramos la pantalla que TOAD utilizaría para crear y modificar estos jobs.
Como podemos ver es tan sencillo como indicar el momento en el que queremos que se ejecute por primera vez (At this time) , la periodicidad (Interval) con la que queremos que se ejecute y el código que queremos que se ejecute. ( What to execute )
NOTA: Oracle 10g modifica algunos conceptos sobre los oracle jobs