IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Forms Oracle Discussion :

[Forms]Oracle 9i, Comment lancer un job en arrière plan?


Sujet :

Forms Oracle

  1. #1
    Rédacteur

    Homme Profil pro
    Développeur et DBA Oracle
    Inscrit en
    Octobre 2006
    Messages
    878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 878
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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;

  2. #2
    Membre Expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    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 862
    Par défaut
    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.

  3. #3
    Rédacteur

    Homme Profil pro
    Développeur et DBA Oracle
    Inscrit en
    Octobre 2006
    Messages
    878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 878
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  4. #4
    Membre Expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    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 862
    Par défaut
    Vire le dbms_job.run et tu devrais récupérer la main aussitôt.

  5. #5
    Rédacteur

    Homme Profil pro
    Développeur et DBA Oracle
    Inscrit en
    Octobre 2006
    Messages
    878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 878
    Par défaut
    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

  6. #6
    Membre Expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    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 862
    Par défaut
    Normalement il va l'exécuter à la date que tu lui as indiqué :
    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)

  7. #7
    Rédacteur

    Homme Profil pro
    Développeur et DBA Oracle
    Inscrit en
    Octobre 2006
    Messages
    878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 878
    Par défaut
    Salut PlaineR,

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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  8. #8
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut

  9. #9
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    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

  10. #10
    Membre Expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    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 862
    Par défaut
    Et si on fait une procédure stockée pour lancer le job, cela ne contourne pas le problème ?

  11. #11
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    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.

  12. #12
    Rédacteur

    Homme Profil pro
    Développeur et DBA Oracle
    Inscrit en
    Octobre 2006
    Messages
    878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 878
    Par défaut
    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é.

  13. #13
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select * from all_objects where object_name like '%JOB%' and object_type = 'VIEW'

  14. #14
    Rédacteur

    Homme Profil pro
    Développeur et DBA Oracle
    Inscrit en
    Octobre 2006
    Messages
    878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 878
    Par défaut
    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 .

  15. #15
    Rédacteur

    Homme Profil pro
    Développeur et DBA Oracle
    Inscrit en
    Octobre 2006
    Messages
    878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 878
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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;

  16. #16
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    Cela ne change rien dans la mesure ou sous Forms 9i, isubmit() ne démarre pas le job. Il faut utiliser Run().

  17. #17
    Rédacteur

    Homme Profil pro
    Développeur et DBA Oracle
    Inscrit en
    Octobre 2006
    Messages
    878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 878
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  18. #18
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    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%.

  19. #19
    Rédacteur

    Homme Profil pro
    Développeur et DBA Oracle
    Inscrit en
    Octobre 2006
    Messages
    878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 878
    Par défaut
    Salut,

    Moi je la teste avec la 10g mais en utilisant le package dbms_job .

  20. #20
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    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)...

Discussions similaires

  1. comment lancer un programme en arrière plan
    Par metalica25 dans le forum Windows
    Réponses: 9
    Dernier message: 03/03/2013, 17h19
  2. [Batch] Comment lancer un job ?
    Par jeb001 dans le forum Spring
    Réponses: 2
    Dernier message: 06/06/2012, 09h37
  3. [Batch] comment lancer un job via un service REST ?
    Par elitost dans le forum Spring
    Réponses: 0
    Dernier message: 12/11/2010, 10h55
  4. comment lancer une fenètre en arrièr plan
    Par moon93 dans le forum wxPython
    Réponses: 2
    Dernier message: 16/07/2007, 09h25
  5. comment stoper 1 thread d'arrière-plan
    Par ms91fr dans le forum Langage
    Réponses: 3
    Dernier message: 06/06/2003, 17h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo