Précédent   Forum des professionnels en informatique > Bases de données > Oracle > PL/SQL
PL/SQL Forum d'entraide sur le PL/SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 01/08/2011, 16h05   #1
Futur Membre du Club
 
Inscription : juin 2005
Messages : 41
Détails du profil
Informations forums :
Inscription : juin 2005
Messages : 41
Points : 17
Points : 17
Par défaut [DBMS_SCHEDULER] Job qui ne veut pas s'exécuter.

Bonjour à tous!

J'ai un petit problème pour faire exécuter un job via dbms_scheduler (que je suis en train de découvrir et de tester).

J'ai d'abord créé un job de test :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
BEGIN
   DBMS_SCHEDULER.create_job (
      job_name        =>  'TEST_JOB',
      job_type        => 'PLSQL_BLOCK',
      job_action      => 'BEGIN
                             INSERT INTO TEMP_JOB
                             SELECT CLIENT_CODE
                             FROM FACTURES
                             WHERE CLIENT_TYPE IN (1,5,8)
                             AND INVOICE_DATE BETWEEN ''01/01/2011'' and ''28/02/2011'';
 
                             commit; 
 
                          END;',
      start_date      => sysdate + 5/1440,
      repeat_interval => 'FREQ=MINUTELY; INTERVAL=10',
      enabled         => TRUE);
END;

Ce job marche parfaitement et s'exécute sans problème. Jusque là tout va bien, sauf que moi, pour des raisons de monitoring, j'ai besoins que le JOB s'exécute sur un service particulier (et non le SYS$USER comme c'est le cas par défaut).

En cherchant dans la doc, j'ai vu qu'il fallait créer une "JOB_CLASS" faisant référence à ce service, et d'utiliser cette classe pour l'éxécution du JOB.

Donc pas de problème :

Code :
1
2
3
4
5
6
Begin
dbms_scheduler.create_job_class(
  job_class_name => 'MY_JOB_CLASS',
  service => 'MyServiceName',
  comments => 'Test job_class');
end;
=> La classe se créé bien. Et la je drop mon job initial pour le recréé avec le paramètre "Job_class" (j'aurai pu faire un set_attribute mais bon ^^) :


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
BEGIN
   DBMS_SCHEDULER.create_job (
      job_name        =>  'TEST_JOB',
      job_type        => 'PLSQL_BLOCK',
      job_class => 'MY_JOB_CLASS',
      job_action      => 'BEGIN
                             INSERT INTO TEMP_JOB
                             SELECT_XXXXX
                             FROM FACTURES
                             WHERE CLIENT_TYPE IN (1,5,8)
                             AND INVOICE_DATE BETWEEN ''01/01/2011'' and ''28/02/2011'';
 
                             commit; 
 
                          END;',
      start_date      => sysdate + 5/1440,
      repeat_interval => 'FREQ=MINUTELY; INTERVAL=10',
      enabled         => TRUE);
END;
Mon job se créé sans erreur, mais par contre, il ne s'exécute jamais... Et c'est là que j'aurai besoin de vous : Pourquoi?????

Merci d'avance
hellmaster78 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/08/2011, 16h18   #2
Rédacteur
 
Inscription : décembre 2002
Messages : 2 387
Détails du profil
Informations personnelles :
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : décembre 2002
Messages : 2 387
Points : 3 265
Points : 3 265
Vu de 1000 mètres, je dirais que c'est à cause du nom de service ; on ne peut pas choisir n'importe quoi.
Il faut que ce nom de service soit défini dans la base, et visible dans DBA_SERVICES, ou par SHOW PARAMETER SERVICE_NAMES.
__________________
Consultant / formateur Oracle indépendant
Certifié OCP 10g et 11g, sécurité 11g
Pomalaix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/08/2011, 16h51   #3
Futur Membre du Club
 
Inscription : juin 2005
Messages : 41
Détails du profil
Informations forums :
Inscription : juin 2005
Messages : 41
Points : 17
Points : 17
En fait le service existe bien (d'ailleurs, il est impossible de créer une classe avec un service inexistant).

Par contre, la différence était sur la casse du service. J'ai tout mis en minuscule, alors que dans DBA_SERVICES, la casse est différente. Je viens de retester avec la bonne casse, et le job s'exécute cette fois. Par contre, l'exécution a "failed" (alors qu'exactement le même job sans la "job_class" s'exécute normalement...
hellmaster78 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/08/2011, 16h59   #4
Futur Membre du Club
 
Inscription : juin 2005
Messages : 41
Détails du profil
Informations forums :
Inscription : juin 2005
Messages : 41
Points : 17
Points : 17
Bon voilà, j'ai drop le job, j'ai tout recréé avec la bonne casse, et tout fonctionne bien avec le service désiré!

Merci!!!
hellmaster78 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h01.


 
 
 
 
Partenaires

Hébergement Web