La tarea de Oracle (tareas programadas) implementado por la función en el paquete DBMS_JOB.
trabajo de conocimientos teóricos puede referirse https://blog.csdn.net/apextrace/article/details/7767506
A, DBMS_JOB relacionado con el conocimiento
1. Crear trabajo:
variable de jobno Número;
DBMS_JOB.SUBMIT (: jobno, el número --job
'your_procedure;', - procedimiento para ejecutar, almacena ';' no se puede omitir
next_date, - tiempo de ejecución siguiente
'intervalo' - cada intervalo de tiempo, intervalo en días
);
- el sistema asignará automáticamente un número de tarea jobno.
2, elimine el trabajo: DBMS_JOB.REMOVE (jobno);
3, para llevar a cabo trabajo de las operaciones de modificación: dbms_job.what (jobno, qué); --lo que es una nueva operación (procedimientos almacenados)
4, modificar el tiempo de ejecución siguiente: DBMS_JOB .next_date (jobno, next_date);
. 5, modificado intervalo: dbms_job.interval (jobno, intervalo El);
. 6, empezar de empleo: dbms_job.run (jobno);
. 7, trabajo parada: dbms_job.broken (jobno, roto, nextdate) ; -broken Un booleano
En segundo lugar, los parámetros de inicialización job_queue_processes
1, Oracle job_queue_process pueden ser representados por el número de trabajo concurrente, cuando el valor job_queue_process de 0 indica que el trabajo de Oracle están detenido.
2, Vista Parámetro job_queue_processes
Método a
job_queue_process Mostrar Parámetro;
Método dos:
SELECT *, en que a partir del nombre del parámetro V $ = ''; job_queue_processes
. 3, job_queue_processes modificar los parámetros
alter job_queue_processes de referencia del sistema = 10;
Tres, user_jobs estructura de la tabla
El campo (columna) Tipo Descripción tareas Número de trabajo único número de identificación varchar2 log_user (30) de la tarea de usuario varchar2 PRIV_USER (30), dado el mandato del usuario varchar2 schema_user (30) a la tarea de analizar el modo de usuario último éxito fecha last_date tiempo para ejecutar la tarea varchar2 last_sec (8) como HH24: ss horas de formato de fecha last_date, minutos y segundos: mm this_date hora de inicio de la fecha se está ejecutando la tarea, si la tarea no se está ejecutando era nula this_sec VARCHAR2 (8) como HH24: mm : ss formato de fecha this_date horas, minutos y segundos de tiempo para ejecutar la tarea en una fecha regular de next_date
En cuarto lugar, el ejemplo
1, se crea en la Tabla plsql:
Crear tabla T (
ID VARCHAR2 (30),
(30) de nombres VARCHAR2
);
2 crear un procedimiento almacenado en plsql son,:
crear o sustituir Procedimiento proce_t IS
la comienzan
INSERT INTO T (ID, Nombre) valores ('. 1' , TO_CHAR (SYSDATE, 'AAAA-mM-dD HH24: mi: SS'));
el commit;
proce_t Fin;
/
3, crear una tarea de trabajo (1 minuto ejecuta una vez.):
ejecutar SQL> después:
jobno variables número;
el inicio
DBMS_JOB.SUBMIT (: jobno, 'proce_t;', SYSDATE, 'SYSDATE + 24/1/60');
el cometer;
Fin;
/
sumisión Consejo:
Procedimiento PL / SQL terminado con éxito
jobno
------ ---
25
4, la tarea de seguimiento (véase la cola de tareas):
SQL> al seleccionar el trabajo, next_date, next_sec, fracasos, Broken desde user_jobs;
fracasos rotos next_date next_sec el empleo
---------- ----------- ---------------- -------- - ------
25 14/09/2012 10:59:46 1 0 n- la
tarea de descripción ha sido creada con éxito.
Ejecutar SELECT * FROM t; ver los resultados de las tareas programadas. Se puede observar que el momento de las tareas se llevan a cabo normalmente.
5, se detiene la tarea del temporizador
(1) Ver tarea de números de petición de tiempo.
SQL> SELECT de empleo, next_date, next_sec, fracasos, Los Rotos de user_jobs;
empleo next_date fracasos next_sec The Broken
---------- ----------- --------- ------- ---------- ------
25 0 n a 2012/9/14 11:01:48 1.
(2) para detener que se ha iniciado una tarea de temporizador:
el inicio
DBMS_JOB .broken (25, true, sysdate);
el cometer;
Fin;
/
expresan trabajo parada para la tarea 25.
si (3) Ver programado tarea se ha detenido correctamente
Después de la pantalla se realiza como sigue:
Procedimiento PL / SQL terminado con éxito
si (3) Ver programado tarea ha comenzado
SQL> SELECT de empleo, next_date, next_sec, fracasos, Los Rotos de user_jobs;
empleo next_date fracasos next_sec The Broken
---------- ----------- --------- ------- ---------- ------
25 0 4000/1/1 00:00:00 Y
valor Broken de Y, una tarea de temporización se detuvo.
6, el momento de iniciar la tarea
(1) se detiene la tarea temporizador Vista
SQL> SELECT de empleo, next_date, next_sec, fracasos, Los Rotos de user_jobs;
empleo next_date fracasos next_sec The Broken
---------- -------- --- ---------------- ---------- ------
25 0 4000/1/1 00:00:00 Y
valor Roto ay, una tarea de tiempo se ha detenido.
(2) la tarea de temporización comienza
el inicio
dbms_job.run (25);
el commit;
Fin;
/
SQL> SELECT de empleo, next_date, next_sec, fracasos, Los Rotos de user_jobs;
empleo next_date fracasos next_sec The Broken
---------- ----------- --------- ------- ---------- ------
25 0 09/14/2012 11:06:17. 1 n-
roto es n, una temporización para iniciar la tarea con éxito.
7, ver el número de procesos
mostrar job_queue_processes de parámetros;
debe ser mayor que 0, de lo contrario ejecutar el siguiente comando para cambiar:
el Sistema ALTER job_queue_processes el SET = 10;
8, a continuación, crear una tarea (realizado una vez cada 5 minutos):
variable de Número El jobno;
la comienzan
DBMS_JOB.SUBMIT ( : jobno, 'proce_t;', sysdate, 'sysdate + 24/1/12'); --interval en un unidades diarias de
la cometen;
Fin;
/
9, la implementación de.
seleccionar un trabajo, next_date, next_sec, fracasos , roto desde user_jobs ;
resultar:
SQL> select trabajo, next_date, next_sec, fracasos, roto desde user_jobs;
Trabajo next_date fracasos next_sec The Broken
---------- ----------- ---------------- ---------- --- ---
26 2012/9/14 1 11:12:08 0 n
25 2012/9/14 1 11:07:18 0 n
V. Resumen
关于job运行时间
(1)每分钟执行
Interval => TRUNC(sysdate,'mi') + 1/(24*60)
(2)每天定时执行
例如:每天的凌晨1点执行
Interval => TRUNC(sysdate) + 1 +1/(24)
(3)每周定时执行
例如:每周一凌晨1点执行
Interval => TRUNC(next_day(sysdate,'星期一'))+1/24
(4)每月定时执行
例如:每月1日凌晨1点执行
Interval =>TRUNC(LAST_DAY(SYSDATE))+1+1/24
(5)每季度定时执行
例如每季度的第一天凌晨1点执行
Interval => TRUNC(ADD_MONTHS(SYSDATE,3),'Q') + 1/24
(6)每半年定时执行
例如:每年7月1日和1月1日凌晨1点
Interval => ADD_MONTHS(trunc(sysdate,'yyyy'),6)+1/24
(7)每年定时执行
例如:每年1月1日凌晨1点执行
Interval =>ADD_MONTHS(trunc(sysdate,'yyyy'), 12)+1/24
job的运行频率设置
(1)每天固定时间运行,比如早上8:10分钟:Trunc(Sysdate+1) + (8*60+10)/24*60
(2)Toad中提供的:
每天:trunc(sysdate+1)
每周:trunc(sysdate+7)
每月:trunc(sysdate+30)
每个星期日:next_day(trunc(sysdate),'星期日')
每天6点:trunc(sysdate+1)+6/24
半个小时:sysdate+30/(24*60)
每个小时的第15分钟运行,比如:8:15,9:15,10:15…:trunc(sysdate,'hh')+(60+15)/(24*60)