Procedimientos en Batch

Saludos, te quería preguntar como ejecutar procesos almacenados en batch (creo que se tiene que utilizar dbms_job) y que instrucciones se tienen que ejecutar, si tienes alguna documentación acerca de esto te lo agradecería.
Gigio

1 respuesta

Respuesta
1
Te presento una breve exposición acerca del intervalo, tomado del manual:
Job Execution Interval
The INTERVAL date function is evaluated immediately before a job is executed. If the job completes successfully, the date calculated from INTERVAL becomes the new NEXT_DATE. If the INTERVAL date function evaluates to NULL and the job completes successfully, the job is deleted from the queue.
If a job should be executed periodically at a set interval, use a date expression similar to 'SYSDATE + 7' in the INTERVAL parameter. For example, if you set the execution interval to 'SYSDATE + 7' on Monday, but for some reason (such as a network failure) the job is not executed until Thursday, 'SYSDATE + 7' then executes every Thursday, not Monday.
If you always want to automatically execute a job at a specific time, regardless of the last execution (for example, every Monday), the INTERVAL and NEXT_DATE parameters should specify a date expression similar to 'NEXT_DAY(TRUNC(SYSDATE), ''MONDAY'')'.
Below are shown some common date expressions used for job execution intervals.
Date Expression Evaluation
'SYSDATE + 7'
Exactly seven days from the last execution
'SYSDATE + 1/48'
Every half hour
'NEXT_DAY(TRUNC(SYSDATE), ''MONDAY'') + 15/24'
Every Monday at 3PM
'NEXT_DAY(ADD_MONTHS(TRUNC(SYSDATE, ''Q''), 3),
''THURSDAY'')'
First Thursday of each quarter
Note:
When specifying NEXT_DATE or INTERVAL, remember that date literals and strings must be enclosed in single quotation marks. Also, the value of INTERVAL must be enclosed in single quotation marks.
Nota: esta referencia fiel y exacta tomada del manual es con fines puramante ilustrativos y pedagógicos, en ningún momento el que lo hace tiene intención de Plagio o Lucro.
_________________________
H.G.
Cc's Venezuela.
Ok, gracias, perdón por haber finalizado la otra pregunta, como soy nuevo en este "foro", la finalice por error.
Al leer tu respuesta me surgieron estas dudas:
*.-¿Es necesario el cambio en el archivo init.ora para que funcione el dbms_job?
En realidad en la organización para la que trabajo, no soy el encargado de la base de datos, por lo que no puedo reinicializarla y aplicar cambios al archivo init. Ora.
*.-¿sysdate+(10/86400) es para que se execute cada 10 minutos?¿y si nada mas quiero que se ejecute una sola vez?
Gracias por tu respuesta
Gigio
O.K.
.-¿Es necesario el cambio en el archivo init. Ora para que funcione el dbms_job?
Re: Si es necesario, Oracle trata este tema y la mayoría como servicios, es necesario colocar tales parámetros en el "init.ora" y reiniciarla.
Nota: Comunícale al DBA la necesidad que tienes, seguro que con buenos argumentos puedes lograr cambios como estos. Y un buen argumento es que al colocarlo de esta manera y no con el esquematizador del Sistema Operativo("crontab": Unix/Linux; "at": Windos/DOS) haces que el procedimiento en "batch" sea independiente del sistema operativo, algo que en momentos de Migraciones es bien conveniente.
.-¿sysdate+(10/86400): si lo que deseas es que se ejecute una vez al día, entonces esta es la manera: "sysdate+1".
Espero haber dado respuestas a tu inquietud, si estas conforme por favor valora la respuesta y ciérrala, en todo caso siéntete libre de seguir preguntando.
Por otra parte te recomiendo que le des una hojeada a los manuales de Oracle(Por lo general vienen en un "CD") específicamente en la sección de "Application Reference" en el tema de "Oracle8i Supplied PL/SQL Packages Reference" te aseguro que esta muy bien explicado y documentado con ejemplos el tema que hemos tratado acá.
Un cordial saludo,
__________________________
Hugo Gonzalez,
Cc's venezuela.
Muchísimas gracias por tu ayuda, ha sido de gran utilidad, gracias por la paciencia y por la atención.
Saludos y Gracias
Gigio
O.K. ¿Vamos a hacer paso a paso un ejemplo te parece?
Creo que así le sacaras más provecho a mi respuesta.
En cada paso vamos a asegurarnos que tienes todo claro te parece.
Por favor no cierres esta pregunta y no hagas otra con el mismo tema, para que estemos organizados.
Por cierto, puedes decirme el Sistema Operativo en el cual trabajas, me seria bien útil.
1) Coloca en el archivo de parámetros(init. Ora) lo siguiente:
job_queue_processes=2
job_queue_interval=2
y luego reinicia la B.D.
Si estas en Unix/Linux al aplicar "pues -ax" debe aparecer unos nuevos procesos, p.e: ora_snp0_BD y ora_snp1_BD
2) Aplica desde una sesión de sqlplus lo siguiente:
exec dbms_job.isumit(1,'prc_xx',sysdate,'sysdate+(10/86400)');
Donde prc_xx, es el procedimiento y sysdate+(10/86400) es el periodo, para nuestro caso es cada 10 minutos.
Por favor ejecuta estop y dame noticias, para que verifiquemos estos dos primeros puntos.
En espera de respuestas,
_________________________
Hugo Gonzalez,
Cc's Venezuela.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas