Voici un emploi simple.
SQL> create table log1 (ts timestamp)
2/
Table created.
SQL> create or replace procedure printe as
2 begin
3 insert into log1 values (systimestamp);
4 commit;
5 end;
6/
Procedure created.
SQL>
Donc, la première chose à faire est de le soumettre avec l'heure et l'intervalle de début correctement spécifiés. Si vous ne pouvez pas vous rappeler combien de minutes il y a dans une journée (1440), c'est une bonne idée d'utiliser des crochets. Comparons soumettre le travail avec vos spécifications date ...
SQL> var job_no number
SQL> BEGIN
2 DBMS_JOB.SUBMIT
3 (
4 job =>:job_no,
5 WHAT=>'printe;',--Procedure
6 next_date=>sysdate+1/24*60,
7 interval=>'sysdate+1/24*60'
8 );
9 commit;
10 END;
11/
PL/SQL procedure successfully completed.
SQL> print job_no
JOB_NO
----------
71
SQL>
... avec des crochets pour avoir préséance ...
SQL> BEGIN
2 DBMS_JOB.SUBMIT
3 (
4 job =>:job_no,
5 WHAT=>'printe;',--Procedure
6 next_date=>sysdate+1/(24*60),
7 interval=>'sysdate+1/(24*60)'
8 );
9 commit;
10 END;
11/
PL/SQL procedure successfully completed.
SQL> print job_no
JOB_NO
----------
72
SQL>
Il est clair que l'emploi 71 n'a pas courir et ne va pas courir pendant un certain temps encore:
SQL> select job, what, last_date, next_date, interval
2 from user_jobs
3 where job in (71,72)
4/
JOB WHAT LAST_DATE NEXT_DATE INTERVAL
------ ------------ -------------------- -------------------- -----------------
71 printe; 05-MAY-2010 17:35:34 sysdate+1/24*60
72 printe; 03-MAY-2010 05:44:42 03-MAY-2010 05:45:34 sysdate+1/(24*60)
SQL>
travail de surveillance 72 ....
SQL> select * from log1
2/
TS
-------------------------------------------------------------------
03-MAY-10 05:43:39.250000
03-MAY-10 05:44:42.296000
SQL>
Donc, si cela ne fonctionne toujours pas pour vous, que devriez-vous faire? La première chose à faire est de vérifier si la base de données est configurée pour exécuter des tâches. Vous aurez besoin d'un accès DBA pour cela.
SQL> select value
2 from v$parameter
3 where name='job_queue_processes'
4/
VALUE
-------------------------
1000
SQL>
Si je me souviens bien, dans Oracle 9i la valeur par défaut de ce paramètre est 0. Il doit être réglé à une valeur non nulle pour les travaux à exécuter.
Et si ce n'est pas le problème, vous devez vérifier les messages d'erreur dans le journal des alertes. Le répertoire background_dump_dest
peut également avoir des fichiers .trc produits par un travail défaillant.
Comment vérifiez-vous si la procédure est exécutée? Qu'est ce que ça fait? –
Cet intervalle semble incorrect. Si vous voulez qu'il s'exécute toutes les minutes, l'intervalle ne devrait-il pas être 'SYSDATE + ((1/24)/60)'? Comme spécifié, je pense que ça va se répéter toutes les 60 heures. –