Précédent   Forum des professionnels en informatique > Bases de données > Oracle > PL/SQL
PL/SQL Forum d'entraide sur le PL/SQL
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 25/11/2004, 14h02   #1
Membre émérite
 
Avatar de Yorglaa
 
Inscription : janvier 2004
Messages : 845
Détails du profil
Informations personnelles :
Âge : 41
Localisation : Suisse

Informations forums :
Inscription : janvier 2004
Messages : 845
Points : 939
Points : 939
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
Yorglaa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2004, 14h28   #2
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
c'est quoi un outline ?
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2004, 14h30   #3
Membre émérite
 
Avatar de Yorglaa
 
Inscription : janvier 2004
Messages : 845
Détails du profil
Informations personnelles :
Âge : 41
Localisation : Suisse

Informations forums :
Inscription : janvier 2004
Messages : 845
Points : 939
Points : 939
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
Yorglaa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2004, 14h40   #4
Rédacteur
 
Inscription : septembre 2004
Messages : 626
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 626
Points : 622
Points : 622
Le plus simple est de faire :

Code :
ALTER session SET create_stored_outlines = true
ou bien

Code :
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 :
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...)
lalystar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2004, 14h42   #5
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
+1 en PL/SQL tu package ça dans un execute immediate et le tour est joué
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2004, 14h44   #6
Membre émérite
 
Avatar de Yorglaa
 
Inscription : janvier 2004
Messages : 845
Détails du profil
Informations personnelles :
Âge : 41
Localisation : Suisse

Informations forums :
Inscription : janvier 2004
Messages : 845
Points : 939
Points : 939
en fait j'ai essayé un
Code :
ALTER session SET create_stored_outlines=monNomPerso ;
exécution de la procédure
puis
Code :
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
Yorglaa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2004, 14h46   #7
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
question bête... la procédure n'est pas en autonomous_transaction ? Il y a bien des requêtes ?
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2004, 14h46   #8
Rédacteur
 
Inscription : septembre 2004
Messages : 626
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 626
Points : 622
Points : 622
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...)
lalystar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2004, 14h48   #9
Membre émérite
 
Avatar de Yorglaa
 
Inscription : janvier 2004
Messages : 845
Détails du profil
Informations personnelles :
Âge : 41
Localisation : Suisse

Informations forums :
Inscription : janvier 2004
Messages : 845
Points : 939
Points : 939
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
Yorglaa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2004, 14h48   #10
Membre émérite
 
Avatar de Yorglaa
 
Inscription : janvier 2004
Messages : 845
Détails du profil
Informations personnelles :
Âge : 41
Localisation : Suisse

Informations forums :
Inscription : janvier 2004
Messages : 845
Points : 939
Points : 939
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
Yorglaa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2004, 14h52   #11
Rédacteur
 
Inscription : septembre 2004
Messages : 626
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 626
Points : 622
Points : 622
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...)
lalystar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2004, 14h55   #12
Membre émérite
 
Avatar de Yorglaa
 
Inscription : janvier 2004
Messages : 845
Détails du profil
Informations personnelles :
Âge : 41
Localisation : Suisse

Informations forums :
Inscription : janvier 2004
Messages : 845
Points : 939
Points : 939
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
Yorglaa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2004, 14h56   #13
Rédacteur
 
Inscription : septembre 2004
Messages : 626
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 626
Points : 622
Points : 622
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...)
lalystar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2004, 14h57   #14
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
ce serait bien visible qu'une fois que tu repasses à FALSE
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2004, 15h14   #15
Membre émérite
 
Avatar de Yorglaa
 
Inscription : janvier 2004
Messages : 845
Détails du profil
Informations personnelles :
Âge : 41
Localisation : Suisse

Informations forums :
Inscription : janvier 2004
Messages : 845
Points : 939
Points : 939
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
Yorglaa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2004, 15h51   #16
Membre émérite
 
Avatar de Yorglaa
 
Inscription : janvier 2004
Messages : 845
Détails du profil
Informations personnelles :
Âge : 41
Localisation : Suisse

Informations forums :
Inscription : janvier 2004
Messages : 845
Points : 939
Points : 939
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
Yorglaa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2004, 16h02   #17
Rédacteur
 
Inscription : septembre 2004
Messages : 626
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 626
Points : 622
Points : 622
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...)
lalystar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2004, 16h13   #18
Membre émérite
 
Avatar de Yorglaa
 
Inscription : janvier 2004
Messages : 845
Détails du profil
Informations personnelles :
Âge : 41
Localisation : Suisse

Informations forums :
Inscription : janvier 2004
Messages : 845
Points : 939
Points : 939
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
Yorglaa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2004, 16h20   #19
Membre émérite
 
Avatar de Yorglaa
 
Inscription : janvier 2004
Messages : 845
Détails du profil
Informations personnelles :
Âge : 41
Localisation : Suisse

Informations forums :
Inscription : janvier 2004
Messages : 845
Points : 939
Points : 939
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
Yorglaa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2004, 16h40   #20
Rédacteur
 
Inscription : septembre 2004
Messages : 626
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 626
Points : 622
Points : 622
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...)
lalystar est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h51.


 
 
 
 
Partenaires

Hébergement Web