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 :

Outline et PL/SQL


Sujet :

PL/SQL Oracle

  1. #1
    Membre éprouvé Avatar de Yorglaa
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    845
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 845
    Points : 931
    Points
    931
    Par défaut Outline et PL/SQL
    bonjour,
    est-ce qu'il est possible de créer une (on dit une ou un ?) outline à partir d'un procédure PL/SQL ? Ce pour "figer" les plan d'exécutions de tous les ordres SQL qui se trouvent dans cette procédure ?

    si quelqu'un a des infos, merci d'avance
    Il est plus facile de voir les signes avant-coureurs après coup que l'inverse !

    Yorglaa

  2. #2
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    c'est quoi un outline ?

  3. #3
    Membre éprouvé Avatar de Yorglaa
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    845
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 845
    Points : 931
    Points
    931
    Par défaut
    le stokage d'un plan d'execution pour s'assurer qu'il sera réemployé quel que soit l'évolution des données cibles...

    j'ai peut-être pas employé le bon terme (en anglais STORED_OUTLINE) ?
    Il est plus facile de voir les signes avant-coureurs après coup que l'inverse !

    Yorglaa

  4. #4
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Points : 848
    Points
    848
    Par défaut
    Le plus simple est de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alter session set create_stored_outlines = true
    ou bien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alter session set create_stored_outlines = monAppli
    Ensuite tu exécutes ta procédure stockée. Pour chaque requête un outline est stocké.

    Ensuite tu fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alter session set create_stored_outlines = false

    Ensuite pour exporter tes outlines en prod par exemple, on exporte les tables du schéma OUTLN en faisant export ... query="where category='monAppli'" et on fait un import en faisant ignore=yes, mais je sais pas si c'est supporté !


    Les outlines c'est bien mignon, mais c'est ultrasensible à la requête : il suffit que tu la modifies d'un espace pour que l'outline ne soit plus utilisé. Tu peux créer tes outlines, regarder les hints utilisés dans les tables OL$HINTS (à vérifier) et placer ses hints au bon endroit dans ta requête de départ.


    Laly.
    In the heart of the truly greats, perfection is never achieved but endlessly pursued.

    Mon article sur les fonctions analytiques d'Oracle (calcul de moyennes mobiles, de quartiles et bien d'autres...)

  5. #5
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    +1 en PL/SQL tu package ça dans un execute immediate et le tour est joué

  6. #6
    Membre éprouvé Avatar de Yorglaa
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    845
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 845
    Points : 931
    Points
    931
    Par défaut
    en fait j'ai essayé un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alter session set create_stored_outlines=monNomPerso ;
    exécution de la procédure
    puis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alter session set create_stored_outlines=false;
    mais après ça je n'ai absolument rien dans DBA_OUTLINES...

    le SQL que je veux "stabiliser" comme ça est un insert-selct d'une vue... donc ma requête ne vas pas bouger d'un poil...
    Il est plus facile de voir les signes avant-coureurs après coup que l'inverse !

    Yorglaa

  7. #7
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    question bête... la procédure n'est pas en autonomous_transaction ? Il y a bien des requêtes ?

  8. #8
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Points : 848
    Points
    848
    Par défaut
    C'est un pb de droits. Tu peux essayer de faire un grant à ton user du privilège CREATE ANY OUTLINE...

    Laly
    In the heart of the truly greats, perfection is never achieved but endlessly pursued.

    Mon article sur les fonctions analytiques d'Oracle (calcul de moyennes mobiles, de quartiles et bien d'autres...)

  9. #9
    Membre éprouvé Avatar de Yorglaa
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    845
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 845
    Points : 931
    Points
    931
    Par défaut
    le user en question a le role DBA... mais je vais essayer de granter ces droit directement au user...
    Il est plus facile de voir les signes avant-coureurs après coup que l'inverse !

    Yorglaa

  10. #10
    Membre éprouvé Avatar de Yorglaa
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    845
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 845
    Points : 931
    Points
    931
    Par défaut
    Citation Envoyé par orafrance
    question bête... la procédure n'est pas en autonomous_transaction ? Il y a bien des requêtes ?
    non c'est pas une transaction autonome...
    Il est plus facile de voir les signes avant-coureurs après coup que l'inverse !

    Yorglaa

  11. #11
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Points : 848
    Points
    848
    Par défaut
    Je pense aussi qu'il faut recevoir directement le grant si tu fais l'alter session dans ta procédure.


    Laly.
    In the heart of the truly greats, perfection is never achieved but endlessly pursued.

    Mon article sur les fonctions analytiques d'Oracle (calcul de moyennes mobiles, de quartiles et bien d'autres...)

  12. #12
    Membre éprouvé Avatar de Yorglaa
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    845
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 845
    Points : 931
    Points
    931
    Par défaut
    en fait ma procédure en appelle d'autres dans lesquelles sont les Select, inserts, deletes et autre...
    Est-ce que peut-être il ne supporte pas plus d'un "niveau" de PL/SQL ?

    et maintenant ma proc tourne (elle prends env. 20 minutes)... est-ce que je devrait voir la table DBA_OUTLINE se remplir ou bien est-ce tous les outlines ne sont visibles qu'à la fin ?
    Il est plus facile de voir les signes avant-coureurs après coup que l'inverse !

    Yorglaa

  13. #13
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Points : 848
    Points
    848
    Par défaut
    Non, il faut l'activer au début du traitement, ensuite tous les ordres SQL sont "catchés".

    Laly.
    In the heart of the truly greats, perfection is never achieved but endlessly pursued.

    Mon article sur les fonctions analytiques d'Oracle (calcul de moyennes mobiles, de quartiles et bien d'autres...)

  14. #14
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    ce serait bien visible qu'une fois que tu repasses à FALSE

  15. #15
    Membre éprouvé Avatar de Yorglaa
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    845
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 845
    Points : 931
    Points
    931
    Par défaut
    alors ma proc a fini...

    mais dans DBA_OUTLINES je n'ai que le DERNIER ordre SQL de la procédure (un update tout rikiki...)

    je comprends pas tout alors...
    Il est plus facile de voir les signes avant-coureurs après coup que l'inverse !

    Yorglaa

  16. #16
    Membre éprouvé Avatar de Yorglaa
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    845
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 845
    Points : 931
    Points
    931
    Par défaut
    Laly :
    ma procédure en appelle d'autres qui ne lui appartiennent pas...
    est-ce que le user à qui appartiennent ces procédures doivent également avoir le create any outline ?
    Il est plus facile de voir les signes avant-coureurs après coup que l'inverse !

    Yorglaa

  17. #17
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Points : 848
    Points
    848
    Par défaut
    Yorglaa, effectivement, je viens de faire le test. Si tu n'as qu'un grant execute sur une procédure, les stored outlines ne sont pas créés quand tu l'exécute. C'est un peu normal, car tu peux avoir le droit d'exécuter une procédure mais aucun accès aux objets sous-jacents.


    Laly.
    In the heart of the truly greats, perfection is never achieved but endlessly pursued.

    Mon article sur les fonctions analytiques d'Oracle (calcul de moyennes mobiles, de quartiles et bien d'autres...)

  18. #18
    Membre éprouvé Avatar de Yorglaa
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    845
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 845
    Points : 931
    Points
    931
    Par défaut
    ok, je viens de donner le create any outlines à mon user propriétaire des procédures lancées par la première...
    réponse dans 20 minutes...

    en tout cas merci beaucoup à tous pour votre aide !
    Il est plus facile de voir les signes avant-coureurs après coup que l'inverse !

    Yorglaa

  19. #19
    Membre éprouvé Avatar de Yorglaa
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    845
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 845
    Points : 931
    Points
    931
    Par défaut
    YAHOU ça a l'air de fonctionner !!!

    ma table dba_outlines est en train de se remplir avec les ordres SQL de mes procédures...

    de cette façon je vais (j'espère) pouvoir règler mon soucis de perf avec dbms_job en utilisant le outline de l'exécution "qui va bien"...

    voir http://www.developpez.net/forums/sho...26#post=263473

    merci à tous ! dès que j'ai confirmation que le job en question est bien optimisé par l'utilisation du outline je mettrais à jour le post en question...

    merci Laly et orafrance
    Il est plus facile de voir les signes avant-coureurs après coup que l'inverse !

    Yorglaa

  20. #20
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Points : 848
    Points
    848
    Par défaut
    Yorglaa, pour qu'Oracle utilise les stored outlines, il faut que tu aies positionner le paramètres suivant use_stored_outline à true ou bien au nom de la catégorie utilisée.


    Ensuite tu as une colonne used dasn USER_OUTLINES pour voir si l'outline a été utilisé au moins une fois.


    C'est bien vu de penser aux outlines pour ton pb de job Tiens nous au courant.


    Laly.
    In the heart of the truly greats, perfection is never achieved but endlessly pursued.

    Mon article sur les fonctions analytiques d'Oracle (calcul de moyennes mobiles, de quartiles et bien d'autres...)

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

Discussions similaires

  1. L'avenir du BDE et des SQL Links révélé ! <officiel>
    Par Merlin dans le forum Bases de données
    Réponses: 12
    Dernier message: 02/06/2006, 10h18
  2. Pb migration Access / SQL server
    Par yoyo dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 25/04/2005, 10h39
  3. Backup BD SQL Server
    Par Ethmane dans le forum Administration
    Réponses: 3
    Dernier message: 07/06/2002, 00h42
  4. Cours, tutoriels, logiciels, F.A.Q,... pour le langage SQL
    Par Marc Lussac dans le forum Langage SQL
    Réponses: 0
    Dernier message: 04/04/2002, 10h21

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