Précédent   Forum des professionnels en informatique > Bases de données > Oracle > Outils > Forms
Forms Forum d'entraide sur Oracle Forms
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 26/04/2007, 17h20   #1
Rédacteur
 
Homme Salim
Développeur et DBA Oracle
Inscription : octobre 2006
Messages : 872
Détails du profil
Informations personnelles :
Nom : Homme Salim
Localisation : Canada

Informations professionnelles :
Activité : Développeur et DBA Oracle

Informations forums :
Inscription : octobre 2006
Messages : 872
Points : 1 100
Points : 1 100
Par défaut [Forms]Oracle 9i, Comment lancer un job en arrière plan?

Salut,

En 9i, je cherche a lancer un job mais en arrière plan pour me permettre de continuer mon execution
j'ai trouvé ça
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
BACKGROUND_PROCESS 
Indicates whether execution IS a  background process OR foreground process.
 
FOR internal USE only. dbms_job.background_process RETURN BOOLEAN 
SET serveroutput ON
 
DECLARE
 b BOOLEAN;
BEGIN
  IF dbms_job.background_process THEN
    dbms_output.put_line('TRUE');
  ELSE
    dbms_output.put_line('FALSE');
END IF;
salim11 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2007, 18h05   #2
Expert Confirmé
 
Homme
Chef de projet en SSII
Inscription : janvier 2004
Messages : 2 866
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Chef de projet en SSII
Secteur : Conseil

Informations forums :
Inscription : janvier 2004
Messages : 2 866
Points : 3 448
Points : 3 448
Salut Salim,
Selon moi, les jobs lancés avec dbms_job sont tous asynchrones sauf si tu forces l'exécution avec dbms_job.run.
__________________
Un problème sans solution est un problème mal posé

Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.
plaineR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2007, 18h22   #3
Rédacteur
 
Homme Salim
Développeur et DBA Oracle
Inscription : octobre 2006
Messages : 872
Détails du profil
Informations personnelles :
Nom : Homme Salim
Localisation : Canada

Informations professionnelles :
Activité : Développeur et DBA Oracle

Informations forums :
Inscription : octobre 2006
Messages : 872
Points : 1 100
Points : 1 100
Salut PlaineR,

Merci pour ta réponse PlaineR.

Meme avec dbms_job.run je ne suis pas capable de prendre la main jusqu'a la fin d'execution de la procedure.

Voici ce que je veux: lancer le job avec dbms_job et recupérer la main pour f suivre l'éxecution de cette procédure.
Code :
1
2
3
4
5
dbms_job.isubmit('1245','lang_laufend;',sysdate,null);
   commit ;
   synchronize;
   dbms_job.run('1245')
Avec la 10g, quand je lance le job avec le dbms_scheduler il me rend la main et je suis capable de suivre la progression de l'execution de ma procédure.
salim11 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2007, 18h33   #4
Expert Confirmé
 
Homme
Chef de projet en SSII
Inscription : janvier 2004
Messages : 2 866
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Chef de projet en SSII
Secteur : Conseil

Informations forums :
Inscription : janvier 2004
Messages : 2 866
Points : 3 448
Points : 3 448
Vire le dbms_job.run et tu devrais récupérer la main aussitôt.
__________________
Un problème sans solution est un problème mal posé

Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.
plaineR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2007, 18h38   #5
Rédacteur
 
Homme Salim
Développeur et DBA Oracle
Inscription : octobre 2006
Messages : 872
Détails du profil
Informations personnelles :
Nom : Homme Salim
Localisation : Canada

Informations professionnelles :
Activité : Développeur et DBA Oracle

Informations forums :
Inscription : octobre 2006
Messages : 872
Points : 1 100
Points : 1 100
salut PlaineR,

Mais le problème il va la mettre dans une fille d'attente et je ne sais pas quand il va l'executer, Alors je ne peux pas suivre la progression de l'éxecution de ma procèdure
salim11 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2007, 18h43   #6
Expert Confirmé
 
Homme
Chef de projet en SSII
Inscription : janvier 2004
Messages : 2 866
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Chef de projet en SSII
Secteur : Conseil

Informations forums :
Inscription : janvier 2004
Messages : 2 866
Points : 3 448
Points : 3 448
Normalement il va l'exécuter à la date que tu lui as indiqué :
Citation:
NEXT_DATE is the date at which the job will next be automatically run,
assuming there are background processes attempting to run it
=> il faut que tu vérifies que le paramètre job_queue_processes est correctement paramétré (normalement nombre maxi de job simultané + 1)
__________________
Un problème sans solution est un problème mal posé

Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.
plaineR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2007, 18h45   #7
Rédacteur
 
Homme Salim
Développeur et DBA Oracle
Inscription : octobre 2006
Messages : 872
Détails du profil
Informations personnelles :
Nom : Homme Salim
Localisation : Canada

Informations professionnelles :
Activité : Développeur et DBA Oracle

Informations forums :
Inscription : octobre 2006
Messages : 872
Points : 1 100
Points : 1 100
Salut PlaineR,

Avec un dbms_lock.sleep(10); avant de rentrer dans la boucle qui suit la progression de l'execution

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
 
begin 
dbms_job.isubmit('1245','lang_laufend;',sysdate,NULL);
   forms_ddl('commit') ;
    -- dbms_job.run('1245') ;
    dbms_lock.sleep(10);
end ;
declare 
v_percent  number;
begin 
set_item_property('blo_progress.progressbar',width,	0);
	v_percent :=0;
	loop
  	exit when v_percent =100;
    SELECT (sofar / totalwork) * 100
      INTO v_percent
    FROM v$session_longops
    WHERE opname = 'APEX__JOB_LANG_LAUFEND' AND sofar < totalwork;
   -- message(v_percent);
   pause;
    :blo_progress.percent:= v_percent||'%';
    set_item_property('blo_progress.progressbar',width,	round( v_percent,2));
    synchronize;
    dbms_lock.sleep(2);
	end loop;
 
	 exception
    when NO_DATA_FOUND then
      v_percent := -1;
  	  set_item_property('blo_progress.progressbar',width,	100);
		  :blo_progress.percent:= '100'||'%';
    when TOO_MANY_ROWS then
      v_percent := -1;
   	  DBMS_SCHEDULER.drop_job (job_name => 'APEX__JOB_LANG_LAUFEND',FORCE=> true) ;
end ;
Ca fonctionne maintenent

Chapeau plaineR
salim11 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2007, 23h14   #8
Rédacteur

 
Avatar de SheikYerbouti
 
Inscription : mai 2003
Messages : 6 533
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 6 533
Points : 6 469
Points : 6 469
__________________
Rédacteur Oracle (Oracle ACE)
Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
Je ne réponds pas aux questions techniques par MP
Blogs: Forms-PL/SQL-J2EE - Forms Java Beans
SheikYerbouti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/04/2007, 11h17   #9
Rédacteur

 
Avatar de SheikYerbouti
 
Inscription : mai 2003
Messages : 6 533
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 6 533
Points : 6 469
Points : 6 469
Il y a malheureusement un bug lorsque DBMS_JOB est utilisé depuis Forms 9i (9.0.2) sur une base 9i. Le job ne s'exécute réellement qu'avec DBMS_JOB.Run(), et l'on perd le coté asynchrone
__________________
Rédacteur Oracle (Oracle ACE)
Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
Je ne réponds pas aux questions techniques par MP
Blogs: Forms-PL/SQL-J2EE - Forms Java Beans
SheikYerbouti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/04/2007, 11h59   #10
Expert Confirmé
 
Homme
Chef de projet en SSII
Inscription : janvier 2004
Messages : 2 866
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Chef de projet en SSII
Secteur : Conseil

Informations forums :
Inscription : janvier 2004
Messages : 2 866
Points : 3 448
Points : 3 448
Et si on fait une procédure stockée pour lancer le job, cela ne contourne pas le problème ?
__________________
Un problème sans solution est un problème mal posé

Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.
plaineR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/04/2007, 12h06   #11
Rédacteur

 
Avatar de SheikYerbouti
 
Inscription : mai 2003
Messages : 6 533
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 6 533
Points : 6 469
Points : 6 469
Citation:
Envoyé par plaineR
Et si on fait une procédure stockée pour lancer le job, cela ne contourne pas le problème ?
Non, c'est pareil.
__________________
Rédacteur Oracle (Oracle ACE)
Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
Je ne réponds pas aux questions techniques par MP
Blogs: Forms-PL/SQL-J2EE - Forms Java Beans
SheikYerbouti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/04/2007, 14h17   #12
Rédacteur
 
Homme Salim
Développeur et DBA Oracle
Inscription : octobre 2006
Messages : 872
Détails du profil
Informations personnelles :
Nom : Homme Salim
Localisation : Canada

Informations professionnelles :
Activité : Développeur et DBA Oracle

Informations forums :
Inscription : octobre 2006
Messages : 872
Points : 1 100
Points : 1 100
Salut,

Il n'y a pas un vue qui nous informe le commencement de l'éxecution de la job , Si on la trouve le problème sera réglé.
salim11 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/04/2007, 14h21   #13
Rédacteur

 
Avatar de SheikYerbouti
 
Inscription : mai 2003
Messages : 6 533
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 6 533
Points : 6 469
Points : 6 469
Code :
1
2
 
SELECT * FROM all_objects WHERE object_name LIKE '%JOB%' AND object_type = 'VIEW'
__________________
Rédacteur Oracle (Oracle ACE)
Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
Je ne réponds pas aux questions techniques par MP
Blogs: Forms-PL/SQL-J2EE - Forms Java Beans
SheikYerbouti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/04/2007, 14h32   #14
Rédacteur
 
Homme Salim
Développeur et DBA Oracle
Inscription : octobre 2006
Messages : 872
Détails du profil
Informations personnelles :
Nom : Homme Salim
Localisation : Canada

Informations professionnelles :
Activité : Développeur et DBA Oracle

Informations forums :
Inscription : octobre 2006
Messages : 872
Points : 1 100
Points : 1 100
Salut,

Merci Mr sheik.

J'ai trouvé la vue user_jobs qui contient l'information sur mes jobs que je lancent, et j'ai remarque quand il termine le job ,il figurera plus dans la vue user_jobs .
salim11 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/04/2007, 14h54   #15
Rédacteur
 
Homme Salim
Développeur et DBA Oracle
Inscription : octobre 2006
Messages : 872
Détails du profil
Informations personnelles :
Nom : Homme Salim
Localisation : Canada

Informations professionnelles :
Activité : Développeur et DBA Oracle

Informations forums :
Inscription : octobre 2006
Messages : 872
Points : 1 100
Points : 1 100
Salut,
Ça fonctionne, je vous remercie tous.

C'est un vrai travail d'equipe wow.

L'explication : avant de tracker la progression de l'execution ma procédure je vérifier avant que ma job a commencer a s'executer dans user_jobs c'est a dire total_time!=0 is not null

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
 
begin 
--	appel;
	/* Lancement de la procédure par le package dbms_job pour la version 9i*/
   dbms_job.isubmit('1245','lang_laufend;',sysdate,NULL);
   forms_ddl('commit') ;
 
/*	 Lancement de la procédure par le package dbms_scheduler pour la version 10g*/
/*	
 dbms_scheduler.create_job(
    job_name   => 'APEX__JOB_LANG_LAUFEND'
   ,job_type   => 'stored_procedure'
   ,job_action => 'lang_laufend'
   ,start_date => SYSDATE
   ,enabled    => TRUE
  );*/
end;
 
  declare
     v_percent number:=0;
     nb number :=0;
  begin 
      loop 
       	SELECT count(job)
      	INTO nb 
      	 FROM user_jobs
      	 WHERE job='1245' AND total_time!=0;
              IF  nb!=0 then 
      	 	  set_item_property('blo_progress.progressbar',width,	0);
						v_percent :=0;
						loop/* pour suivre la progression de l'éxecution de la procedure lancée par dbms_job*/
					  	exit when v_percent =100;
					    SELECT (sofar / totalwork) * 100
					      INTO v_percent
					    FROM v$session_longops
					    WHERE opname = 'APEX__JOB_LANG_LAUFEND' AND sofar < totalwork;
 
					    :blo_progress.percent:= v_percent||'%';
					    set_item_property('blo_progress.progressbar',width,	round( v_percent,2));
					    synchronize;
					    dbms_lock.sleep(2);
						end loop;
		end IF;
			exit when nb!=0 ;
		end loop;	 	
						exception
					    when NO_DATA_FOUND then
					      v_percent := -1;
					  	  set_item_property('blo_progress.progressbar',width,	100);
							  :blo_progress.percent:= '100'||'%';
					    when TOO_MANY_ROWS then
					      v_percent := -1;
					   	  DBMS_SCHEDULER.drop_job (job_name => 'APEX__JOB_LANG_LAUFEND',FORCE=> true) ;
end;
salim11 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/04/2007, 15h02   #16
Rédacteur

 
Avatar de SheikYerbouti
 
Inscription : mai 2003
Messages : 6 533
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 6 533
Points : 6 469
Points : 6 469
Cela ne change rien dans la mesure ou sous Forms 9i, isubmit() ne démarre pas le job. Il faut utiliser Run().
__________________
Rédacteur Oracle (Oracle ACE)
Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
Je ne réponds pas aux questions techniques par MP
Blogs: Forms-PL/SQL-J2EE - Forms Java Beans
SheikYerbouti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/04/2007, 15h15   #17
Rédacteur
 
Homme Salim
Développeur et DBA Oracle
Inscription : octobre 2006
Messages : 872
Détails du profil
Informations personnelles :
Nom : Homme Salim
Localisation : Canada

Informations professionnelles :
Activité : Développeur et DBA Oracle

Informations forums :
Inscription : octobre 2006
Messages : 872
Points : 1 100
Points : 1 100
Salut Mr sheik

Notre problème on rentre dans la boucle qui tracke la progression de l'execution de la procédure avant que le job soit lancé c'etais ca l'inconvenient de ne pas utiliser le RUN.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
III-A. SUBMIT
Cette procédure va nous permettre de soumettre un job dans la file 
d'attente : 
 
III-B. ISUBMIT
Cette procédure effectue le même travail que SUBMIT, cependant sans pour
 autant se baser sur la séquence interne Oracle. L'utilisateur donne lui-même 
le numéro de job.  
 
III-C. RUN
Cette procédure va nous permettre de lancer "à la main" le job.
salim11 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/04/2007, 15h20   #18
Rédacteur

 
Avatar de SheikYerbouti
 
Inscription : mai 2003
Messages : 6 533
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 6 533
Points : 6 469
Points : 6 469
Alors je récapitule.
isubmit() ne lance pas le Job avec Forms9i.
et si le job n'est pas lancé, le programme boucle indéfiniment puisque le % n'atteint jamais 100%.
La seule façon de démarrer le traitement est d'utiliser Run(), mais dans ce cas, le job ne rend la main à Forms que lorsqu'il est terminé (synchrone).
La barre de progression passe donc direct de 0% à 100%.
__________________
Rédacteur Oracle (Oracle ACE)
Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
Je ne réponds pas aux questions techniques par MP
Blogs: Forms-PL/SQL-J2EE - Forms Java Beans
SheikYerbouti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/04/2007, 15h22   #19
Rédacteur
 
Homme Salim
Développeur et DBA Oracle
Inscription : octobre 2006
Messages : 872
Détails du profil
Informations personnelles :
Nom : Homme Salim
Localisation : Canada

Informations professionnelles :
Activité : Développeur et DBA Oracle

Informations forums :
Inscription : octobre 2006
Messages : 872
Points : 1 100
Points : 1 100
Salut,

Moi je la teste avec la 10g mais en utilisant le package dbms_job .
salim11 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/04/2007, 15h25   #20
Rédacteur

 
Avatar de SheikYerbouti
 
Inscription : mai 2003
Messages : 6 533
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 6 533
Points : 6 469
Points : 6 469
Oui, ça fonctionne parfaitement avec Forms 10g. c'est juste dommage que Forms 9i soit bugué
il faudrait essayer avec Forms 10gR1 (9.0.4)...
__________________
Rédacteur Oracle (Oracle ACE)
Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
Je ne réponds pas aux questions techniques par MP
Blogs: Forms-PL/SQL-J2EE - Forms Java Beans
SheikYerbouti est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h09.


 
 
 
 
Partenaires

Hébergement Web