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

PL/SQL Oracle Discussion :

Exécution de requêtes simultanées


Sujet :

PL/SQL Oracle

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 18
    Par défaut Exécution de requêtes simultanées
    Salut tout le monde,

    Je viens de temps en temps sur ce site pour acquérir quelques connaissances ( très bon ce site ^^).
    En fait, je n'ai pas trouvé une réponse pour mon problème.
    J'aimerais lancer deux procédures (fils) en parallèle et ceci lancés par une procédure (papa)
    j'ai pensé à des triggers, des jobs...mais je n'arrive pas à l'appliquer.

    en gros, le papa lance :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    BEGIN
     
     
    Execute immediate (''les 2 procédures') 
     
     
    Exception tralala
    End;
    merci pour votre aide

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 18
    Par défaut
    Bon je sais que le SID est un facteur déterminant pour m'empêcher de lancer simultanément des procs mais j'aimerai savoir s'il existe un moyen pour contourner ce problème.

  3. #3
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Par défaut
    bonjour,


    Si vous n'indiquez pas le sgbd personne ne pourra répondre vu que ceci n'est pas un problème de langage SQL.


    Sinon on pourrai aussi se demander qu'est-ce qui motive un tel procédé.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 18
    Par défaut
    Je ne comprends pas votre retour. je travaille sur une version 11g.
    Mon objectif est de paralléliser 2 insert ( qui sont néanmoins liés par la destination : même table).



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Procédure fils_1 : insert into papa_data ( valeur 1...valeur x) values ( variable 1...variable x)
     
    Procédure fils_2 : insert into papa_data ( valeur 1...valeur x) values ( variable 1...variable x)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <s>CREATE OR REPLACE PROCEDURE Papa_init
    BEGIN 
     
    procédure fils_1;
     
     
    procédure fils_2;
     
    END;</s>
    j'aimerai vous donner des indications plus claires mais je ne sais pas quoi vous donner. (dsl pour mon incompréhension ).

    Ce qui motive cette demande est que j'ai plusieurs procédures avec ce même objectif.
    ces insértions sont gérées et incrémentées par Oracle. j'aimerai savoir si c'est possible de les lancer simultanément.

  5. #5
    Membre Expert Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Par défaut
    Pour le SGBD je suppose que c'est Oracle 11g

    Sinon pourquoi voulez-vous paralléliser ces insert ? Est-ce vraiment nécessaire ?

    Dans l'exemple que vous montrez ils sont identiques, est-ce la cas dans la réalité ?

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 18
    Par défaut
    Merci Lola pour votre retour.

    Oui en fait, comme je disais précédemment (j'éditais mon premier post pendant ce temps là), en fait, sur le côté fonctionnel, sans pour autant s'orienter dans l'optimisation, j'aimerai savoir si cela s'avère possible.

    pour mon exemple , il est un peu faux car j'oublie que je fais appel à des procédures stockées qui elles , font des insert ou des update (voire des delete)
    Et ceci visant la même table de référence.

    j'aimerai évaluer les temps de chargement pour être honnête avec vous

  7. #7
    Membre Expert Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Par défaut
    Salut,

    Je pense que ce genre d'optimisation n'est pas celle qui apporte le plus de plus value, mais beaucoup de complexité.

    Optimise ta manière d'insérer en séquentiel, et tu n'auras certainement pas besoin de paralléliser à ce niveau.

    La parallélisation de procédures, c'est une problématique de type ordonnancement, et ne devrait pas apparaître à l'intérieur d'une procédure...

    Mais si t'y tiens vraiment, y'a peut être de quoi faire avec dbms_job.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 18
    Par défaut
    Merci Pacman.
    J'ai effectivement tenté le dbms_job (submit ou isubmit).
    Avez vous un lien m'expliqant comment utiliser ce dbms en particulier.
    de la création à l'exécution ( dans mon cas , pour une procédure ?)

    j'ai du mal à maitriser les jobs.


    D'ailleurs, j'ai une erreur sys_JOB lors de l'appel de proc , tout en ayant créé la procédure ci dessous qui compile bien :

    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
    create or replace procedure job_submit    ( job      out  BINARY_INTEGER,
                           what      in  VARCHAR2,
                           next_date in  DATE  DEFAULT sysdate )  IS 
                           
         BEGIN
         dbms_job.submit(x,'procédure fils_1;','sysdate');
        dbms_job.submit(x,'procédure fils_1;','sysdate');
        END;

  9. #9
    Membre Expert Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Par défaut
    T'as le message d'erreur ?
    (Normal que ça compile, l'erreur se trouve dans les arguments qui sont des chaînes de caractères... ça peut se détecter qu'à l'exécution )

    Sinon le sysdate, tu n'as pas besoin de le mettre entre quotes (c'est une date, pas une chaîne)

  10. #10
    Membre Expert Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Par défaut
    Petit test de mon côté, sans erreur :

    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
     
    SQL> create or replace procedure maproc as begin null; end;
      2  /
     
    ProcÚdure crÚÚe.
     
    SQL> declare
      2  x number;
      3  begin
      4     dbms_job.submit(x, 'maproc;', sysdate);
      5     dbms_output.put_line('braa');
      6   end;
      7  /
    braa
     
    ProcÚdure PL/SQL terminÚe avec succÞs.

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 18
    Par défaut
    Ok merci bcp, j'ai eu du mal à savoir ce que l'on veut mettre si on ne veut pas ordonnancer le job.
    Dans mon esprit, c'était : la date d'exécution est celle lorsque je la déclenche moi même.
    bref.

    Encore merci !!

  12. #12
    Membre Expert Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Par défaut
    Ah juste au passage, j'ai lu ça aussi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Note: This package is deprecated and has been supplanted by DBMS_SCHEDULER

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 18
    Par défaut
    Votre dernier message est à la suite de la procédure exécutée ?.

    Autre chose, lorsqu'un job est instancié dans une procédure : comment savoir que le job est terminé et également que tout s'est bien déroulé.

    j'ai pensé à une exception mais le job va t'il donner l'info du code retour ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    declare 
    x number
     
    begin
     
    dbms_job (x,'proc;' sysdate)
     
    exception when job_error 
    then dbms_output ('erreur lors du job') ;
    return;
     
    end;

  14. #14
    Membre Expert
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2012
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2012
    Messages : 652
    Par défaut
    Inutile d'exécuter deux ordres INSERT pour attaquer la même table.
    Comme dis précédemment, optimisé votre code et éventuellement faites des tests en utilisant la parallelisation

  15. #15
    Membre Expert

    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    536
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 536
    Par défaut
    Citation Envoyé par pacmann Voir le message
    Ah juste au passage, j'ai lu ça aussi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Note: This package is deprecated and has been supplanted by DBMS_SCHEDULER
    Il ne faut pas croire tout ce que vous lisez!

    Il y a une différence fondamentale entre les deux si bien que DBMS_JOB ne pourra pas être "déprécié" tant que cette différence subsiste encore. En effet, DMS_SCHEDULER fait un COMMIT implicite alors que DBMS_JOB ne le fait pas.

  16. #16
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Citation Envoyé par Mohamed.Houri Voir le message
    Il ne faut pas croire tout ce que vous lisez !
    Oui mais quand il s'agit de la doc officielle :
    About DBMS_JOB

    DBMS_JOB is a PL/SQL package that you use to schedule jobs. It is replaced by Oracle Scheduler, which is more powerful and flexible. Although Oracle recommends that you switch from DBMS_JOB to Oracle Scheduler, DBMS_JOB is still supported for backward compatibility.

  17. #17
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Il est possible de demander la correction de la doc officielle (et de plus ça marche).
    Vous ne pouvez pas tout simplement utiliser DBMS_SCHEDULER dans un trigger.
    Si non, oui oubliez DBMS_JOB.

  18. #18
    Membre Expert

    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    536
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 536
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Oui mais quand il s'agit de la doc officielle :

    tom kyte en parle aussi.

  19. #19
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Je n'ai pas dit le contraire, on a déjà eu cette discussion dans un autre sujet !

    J'appuyais sur le fait que relayer des informations officielles ne me paraît pas aberrent.

Discussions similaires

  1. Exécuter une requête non-query
    Par Piet dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 07/02/2007, 15h01
  2. [ADO.Net][C#/Mysql] Comment exécuter une requête paramétrée?
    Par wremacle dans le forum Accès aux données
    Réponses: 6
    Dernier message: 07/02/2006, 16h55
  3. [STRUTS/HIBERNATE] Problème d'exécution de requête
    Par mc_chicken dans le forum Hibernate
    Réponses: 5
    Dernier message: 21/10/2005, 09h27
  4. Comment exécuter une requête rapidement
    Par kardevlop dans le forum Bases de données
    Réponses: 2
    Dernier message: 18/10/2005, 13h45
  5. Réponses: 2
    Dernier message: 17/10/2005, 14h58

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