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

Administration Oracle Discussion :

[11g] Exécuter sql_id


Sujet :

Administration Oracle

  1. #1
    Membre averti Avatar de macben
    Inscrit en
    Mars 2004
    Messages
    546
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mars 2004
    Messages : 546
    Points : 433
    Points
    433
    Par défaut [11g] Exécuter sql_id
    Bonjour,

    Est-il possible par un package ou par le grid d'exécuter une requête sans en avoir le texte, juste le sql_id ?

    Je m'explique. J'ai dans mes base line, besoin de faire des tests et active/désactive les plans. Mais lorsque je relance la requête (peu importe où je récupère le texte, dans le grid ou dans dba_hist_sqltext), le sql_id change ! Ce qui du coup n'est pas pratique.

    Vous remerciant par avance pour votre aide,

  2. #2
    Expert éminent
    Avatar de pachot
    Homme Profil pro
    Developer Advocate YugabyteDB
    Inscrit en
    Novembre 2007
    Messages
    1 821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Developer Advocate YugabyteDB
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 821
    Points : 6 443
    Points
    6 443
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Pour éviter tout reformatage, donc avoir le même sql_id:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    declare
      c clob;
    begin
      select sql_fulltext into c from v$sqlarea where  sql_id = '...';
      execute immediate c;
    end;
    /
    Cordialement,
    Franck.
    Franck Pachot - Developer Advocate Yugabyte 🚀 Base de Données distribuée, open source, compatible PostgreSQL
    🗣 twitter: @FranckPachot - 📝 blog: blog.pachot.net - 🎧 podcast en français : https://anchor.fm/franckpachot

  3. #3
    Membre expérimenté

    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
    Points : 1 359
    Points
    1 359
    Par défaut
    Salut Franck,

    Et les variables de liaisons?

    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
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
     
    mohamed@mhouri> select * from emp;
     
    14 rows selected.
     
    mohamed@mhouri> select * from table(dbms_xplan.display_cursor);
     
    PLAN_TABLE_OUTPUT
    ---------------------------------------------------------------------------
    SQL_ID  a2dk8bdn0ujx7, child number 0
    -------------------------------------
    select * from emp
     
    Plan hash value: 3956160932
     
    --------------------------------------------------------------------------
    | Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
    --------------------------------------------------------------------------
    |   0 | SELECT STATEMENT  |      |       |       |     3 (100)|          |
    |   1 |  TABLE ACCESS FULL| EMP  |    14 |   532 |     3   (0)| 00:00:01 |
    --------------------------------------------------------------------------
     
     
    13 rows selected.
     
    mohamed@mhouri> declare
      2    c clob;
      3  begin
      4    SELECT sql_fulltext INTO c FROM v$sqlarea WHERE  sql_id = 'a2dk8bdn0ujx7';
      5    execute immediate c;
      6  end;
      7  /
     
    PL/SQL procedure successfully completed.
     
    mohamed@mhouri> var n number;
    mohamed@mhouri> exec :n := 42
     
    PL/SQL procedure successfully completed.
     
    mohamed@mhouri> select * from emp where lnnvl(:n = 0);
     
    14 rows selected.
     
    mohamed@mhouri> select * from table (dbms_xplan.display_cursor);
     
    PLAN_TABLE_OUTPUT
    -------------------------------------------------------------------------------------
    SQL_ID  8t2pwab82pbqu, child number 0
    -------------------------------------
    select * from emp where lnnvl(:n = 0)
     
    Plan hash value: 3896240783
     
    ---------------------------------------------------------------------------
    | Id  | Operation          | Name | Rows  | Bytes | Cost (%CPU)| Time     |
    ---------------------------------------------------------------------------
    |   0 | SELECT STATEMENT   |      |       |       |     3 (100)|          |
    |*  1 |  FILTER            |      |       |       |            |          |
    |   2 |   TABLE ACCESS FULL| EMP  |    14 |   532 |     3   (0)| 00:00:01 |
    ---------------------------------------------------------------------------
     
    Predicate Information (identified by operation id):
    ---------------------------------------------------
     
       1 - filter(LNNVL(:N=0))
     
     
    19 rows selected.
     
    mohamed@mhouri> declare
      2    c clob;
      3  begin
      4    SELECT sql_fulltext INTO c FROM v$sqlarea WHERE  sql_id = '8t2pwab82pbqu';
      5    execute immediate c;
      6  end;
      7  /
    declare
    *
    ERROR at line 1:
    ORA-01008: not all variables bound
    ORA-06512: at line 5
    Bien Respectueusement
    www.hourim.wordpress.com

    "Ce qui se conçoit bien s'énonce clairement"

  4. #4
    Expert éminent
    Avatar de pachot
    Homme Profil pro
    Developer Advocate YugabyteDB
    Inscrit en
    Novembre 2007
    Messages
    1 821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Developer Advocate YugabyteDB
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 821
    Points : 6 443
    Points
    6 443
    Billets dans le blog
    1
    Par défaut
    Bonjour Mohamed,

    Citation Envoyé par Mohamed.Houri Voir le message
    Et les variables de liaisons?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      5    execute immediate c using 42;
    Par contre je suis curieux de savoir comment tu as sql_id=a2dk8bdn0ujx7 ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SQL> SELECT * FROM TABLE (dbms_xplan.display_cursor);
     
    PLAN_TABLE_OUTPUT
    -------------------------------------------------------
    SQL_ID  0k1m8f6d02p62, child number 0
    -------------------------------------
    SELECT * FROM emp WHERE lnnvl(:n = 0)
    Je me demande ce qui peut faire qu'on a pas le même sql_id alors qu'on a le même texte sql

    Cordialement,
    Franck.
    Franck Pachot - Developer Advocate Yugabyte 🚀 Base de Données distribuée, open source, compatible PostgreSQL
    🗣 twitter: @FranckPachot - 📝 blog: blog.pachot.net - 🎧 podcast en français : https://anchor.fm/franckpachot

  5. #5
    Expert éminent sénior 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
    Points : 11 252
    Points
    11 252
    Par défaut
    select * from emp devient
    Voilà

  6. #6
    Expert éminent
    Avatar de pachot
    Homme Profil pro
    Developer Advocate YugabyteDB
    Inscrit en
    Novembre 2007
    Messages
    1 821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Developer Advocate YugabyteDB
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 821
    Points : 6 443
    Points
    6 443
    Billets dans le blog
    1
    Par défaut
    Ah... le formateur syntaxique du forum, bien sûr... merci.
    Franck Pachot - Developer Advocate Yugabyte 🚀 Base de Données distribuée, open source, compatible PostgreSQL
    🗣 twitter: @FranckPachot - 📝 blog: blog.pachot.net - 🎧 podcast en français : https://anchor.fm/franckpachot

  7. #7
    Membre averti Avatar de macben
    Inscrit en
    Mars 2004
    Messages
    546
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mars 2004
    Messages : 546
    Points : 433
    Points
    433
    Par défaut
    Ma requête n'étant pas bindée, j'ai appliqué ton petit script Franck et c'est impeccable !

    Merci

  8. #8
    Membre actif Avatar de Ahmed AANGOUR
    Homme Profil pro
    DBA Oracle
    Inscrit en
    Janvier 2010
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : DBA Oracle

    Informations forums :
    Inscription : Janvier 2010
    Messages : 139
    Points : 271
    Points
    271
    Par défaut
    on pourrait améliorer le script de Franck en allant récupérer les valeurs peekées d'eventuels bind variables dans V$SQL_BIND_CAPTURE

  9. #9
    Expert éminent
    Avatar de pachot
    Homme Profil pro
    Developer Advocate YugabyteDB
    Inscrit en
    Novembre 2007
    Messages
    1 821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Developer Advocate YugabyteDB
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 821
    Points : 6 443
    Points
    6 443
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Ahmed AANGOUR Voir le message
    on pourrait améliorer le script de Franck en allant récupérer les valeurs peekées d'eventuels bind variables dans V$SQL_BIND_CAPTURE
    C'est tout à fait possible en utilisant dbms_sql au lieu de execute immediate.
    Franck Pachot - Developer Advocate Yugabyte 🚀 Base de Données distribuée, open source, compatible PostgreSQL
    🗣 twitter: @FranckPachot - 📝 blog: blog.pachot.net - 🎧 podcast en français : https://anchor.fm/franckpachot

  10. #10
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut
    Merci à macben et à franck pour leurs réponses car j'ai EXACTEMENT le même problème : j'ai ajouté à un SQL_ID une baseline et, pour tester que celle-ci est bien prise en compte, il faut que je réexécute l'ordre SQL correspondant pile-poil au texte dans la base.
    Le pb est que dans le Cloud Control, l'ordre SQL est reformaté avec plein de tabulations, sous SQL*Plus le code est limité par la longueur de ma colonne etc etc... Avec ton astuce franck, je sens que demain je vais solutionner mon problème.
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  11. #11
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut
    Bon ben finalement échec total...
    J'arrive à créer ma baseline sur un sql_id mais impossible, en réexécutant celui-là avec le EXECUTE IMMEDIATE, d'y associer le nouveau plan...

    Je pense que ce sont les bind variables qui mettent la grouille, surtout qu'il y a un test avec "col1 in (val1,val2)" et visiblement la gestion de deux valeurs pour une seule bind variable est pas top avec Oracle.
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

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

Discussions similaires

  1. [11g-11.2.0.3.0] Plans d'exécution déconnants.
    Par macben dans le forum Administration
    Réponses: 6
    Dernier message: 23/01/2013, 13h38
  2. Réponses: 1
    Dernier message: 14/12/2012, 09h41
  3. Plans d'exécution 10g/11g
    Par tropiko dans le forum Oracle
    Réponses: 1
    Dernier message: 12/12/2012, 11h31
  4. Plans d'exécution en 11g
    Par zidane2012 dans le forum Oracle
    Réponses: 6
    Dernier message: 27/11/2012, 13h14
  5. |Grid Control 11g] Avertissement : Exécution sur la pile
    Par tck-lt dans le forum Entreprise Manager
    Réponses: 1
    Dernier message: 14/08/2012, 15h07

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