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

Oracle Discussion :

[Jobs] Supprimer tous les jobs pour les recreer


Sujet :

Oracle

  1. #1
    Membre éprouvé
    Avatar de yolepro
    Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Mai 2002
    Messages : 918
    Points : 1 144
    Points
    1 144
    Par défaut [Jobs] Supprimer tous les jobs pour les recreer
    Bonjour,

    J'ai 5 Jobs qui tournent correctement sur mon environnement. Malheureusement, ces jobs on été livré plusieurs fois (du coup dysfonctionnement de l'appli).

    Comment faire (via une pdc) pour supprimer tous les scripts et les recreer?

    J'ai un début d'idée :
    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
    begin                                                                     
    DECLARE                                                                   
     jobLastIndex   NUMBER;                                                   
     job   NUMBER;                                                            
    begin                                                                     
     
     select sys.jobseq.currval into jobLastIndex from dual;                 
     loop                                                                   
     
       sys.dbms_job.remove(jobLastIndex); -- ICI CA NE FONCTIONNE PAS SI LE JOB N'EXISTE PAS
       jobLastIndex := jobLastIndex - 1;                                    
       exit when jobLastIndex >= 0;                                         
     end loop;                                                              
     
     commit;                                                                
     
    -- Job 1 Suppression des mails tous les 6 mois.                        
     
    ys.dbms_job.submit(job,                                               
                           what => 'delete from t_mail t                      
     					where trunc(t.d_envoie)<=trunc(sysdate-180);',                           
                           next_date => to_date('23-01-2006', 'dd-mm-yyyy'),  
                           interval => 'trunc(sysdate+180)');    
     
    -- Puis les autres ...
    commit;             
    end; 
    end;
     
    /
    Peut être que vous connaissez une méthode plus simple.
    De plus si vous connaissez une méthode pour remettre la jobseq à zero ?

  2. #2
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Points : 3 798
    Points
    3 798
    Par défaut
    Bonjour ,

    SI ce que vous désirez est de tout simplement supprimer les jobs il faut faire un DBMS_JOB.remove

    Sinon , il faut être plus précis

    Un tuto la dessus : Package Dbms_Job

  3. #3
    Membre expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Points : 3 199
    Points
    3 199
    Par défaut
    De plus si vous connaissez une méthode pour remettre la jobseq à zero ?
    Il y a une règle d'or : On ne touche pas directement au dictionnaire de données. Ce qui signifie qu'il n'y a pas d'actions possibles sur le Job_ID
    En même temps, c'est pas gênant d'avoir des Job ID qui sont à 1532, si ?

  4. #4
    Membre éprouvé
    Avatar de yolepro
    Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Mai 2002
    Messages : 918
    Points : 1 144
    Points
    1 144
    Par défaut
    Merci pour vos réponses, j'ai fini par trouvé ce que je cherchais.

    Via la table all_object :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from all_objects where object_name like '%JOB%'
    J'ai trouvé la table USER_JOBS

    grace à cette table je peux connaitre les jobs créés.

    Pour les supprimer, j'ai donc fait la chose suivante :

    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
    spool jobs.log
     
    declare
    job number;
    job_id varchar2(5);
     
    -- Définition du curseur
    cursor c_job is
          select uj.job from USER_JOBS uj;           
     
    begin
    -- On ouvre le curseur
    Open c_job;
          -- On test l'existance du curseur
          if c_job%isopen then
          	-- On met le contenu du curseur dans
            fetch c_job into job_id;
              while c_job%found
              loop
                sys.dbms_job.remove(job_id);
                fetch c_job into job_id;
              end loop;
          end if;
    Close c_job;
     
    -- insertion des nouveaux Jobs
     
    -- Job1
    sys.dbms_job.submit(job,
                           what => 'delete from t_mail t
    				 where trunc(t.d_envoie)<=trunc(sysdate-180);',
                           next_date => to_date('23-01-2006', 'dd-mm-yyyy'),
                           interval => 'trunc(sysdate+180)');
     
    -- Les autres Jobs ....
    commit;
     
    end;
    /
    spool off
    Voila, merci pour votre aide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 18/04/2015, 09h18

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