1. #1
    Membre averti
    Homme Profil pro
    DBA Oracle
    Inscrit en
    avril 2013
    Messages
    485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : DBA Oracle

    Informations forums :
    Inscription : avril 2013
    Messages : 485
    Points : 373
    Points
    373

    Par défaut V$SQL_PLAN : à historiser?

    Bonjour les experts,

    Pour des raisons d'analyse et d'historique, je voudrais copier le contenu de la vue V$SQL_PLAN dans une table créée par mes soins (même structure que V$SQL_PLAN) car V$SQL_PLAN est réinitialisée lors des arrêts/relances. Le problème est que je comptais faire un trigger en remplacement de l'INSERT sur V$SQL_PLAN mais les triggers sur vue se substituant à l'évènement déclencheur, ça veut dire que ma table sera remplie MAIS l'insert dans V$SQL_PLAN n'aura plus lieu : ce qui n'est pas envisageable!

    Je comptais alors faire un trigger sur un évènement système, du genre After logon, pour synchroniser ces deux tables. Néanmoins cette situation ne me satisfait pas pleinement d'un point de vue intellectuel, je préfèrerais vraiment copier ces données dès qu'elles sont insérées dans V$SQL_PLAN.

    Est-ce que vous auriez une idée?
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  2. #2
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    octobre 2007
    Messages
    5 549
    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 549
    Points : 11 383
    Points
    11 383

    Par défaut

    Les tables V$_ sont des structures de mémoire...

  3. #3
    Membre actif
    Homme Profil pro
    xxxxxxxxx
    Inscrit en
    avril 2015
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : xxxxxxxxx

    Informations forums :
    Inscription : avril 2015
    Messages : 175
    Points : 281
    Points
    281

    Par défaut V$SQL_PLAN : à historiser ?

    Est-ce que tu as éssayé l'outil export datapump sur cette tables, et si c'est ok,
    tu peux programmer un job pour n'inserer que les enregistrement recents ?

    bonne chance

  4. #4
    Membre actif
    Homme Profil pro
    xxxxxxxxx
    Inscrit en
    avril 2015
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : xxxxxxxxx

    Informations forums :
    Inscription : avril 2015
    Messages : 175
    Points : 281
    Points
    281

    Par défaut V$SQL_PLAN : à historiser ?

    j'ai oublié de te dire aussi que tu peux créer un trigger system de type BEFORE SHUTDOWN, et
    mettre un code d'insertions des enregistrements du contenu de v$sql_plan depuis le dernier démarrage de l'instance !

  5. #5
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    octobre 2007
    Messages
    5 549
    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 549
    Points : 11 383
    Points
    11 383

    Par défaut

    Pourvu qu'ils soient resté en mémoire depuis le dernier démarrage de l'instance...

  6. #6
    Membre averti
    Homme Profil pro
    DBA Oracle
    Inscrit en
    avril 2013
    Messages
    485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : DBA Oracle

    Informations forums :
    Inscription : avril 2013
    Messages : 485
    Points : 373
    Points
    373

    Par défaut

    mnitu, je suis d'accord, V$SQL_PLAN est un synonyme sur V_$SQL_PLAN si je ne me trompe et qui pointe vers des X$ qui sont effectivement des structures mémoires.
    Néanmoins, avec SQL Developer, on me propose V$SQL_PLAN dans la liste des vues sur lesquelles je peux créer un trigger. Néanmoins je ne suis pas allé au bout puisque cette solution ne me satisfait plus.

    Merci pour le conseil dell68, mais ce week-end je vais essayer de faire plutôt un trigger sur AFTER LOGON et n'insérer que les nouveaux enregistrements depuis le dernier LOGON.
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  7. #7
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    octobre 2007
    Messages
    5 549
    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 549
    Points : 11 383
    Points
    11 383

    Par défaut

    Citation Envoyé par Ikebukuro Voir le message
    Néanmoins, avec SQL Developer, on me propose V$SQL_PLAN dans la liste des vues sur lesquelles je peux créer un trigger.
    On vous propose mais c'est juste pour s'amuser. Avez-vous essayé ? Sinon avec votre nouveau trigger c'est à peu prés la même chose : "Pourvu qu'ils soient resté en mémoire ..."

    A la limite vous pouvez vous inspirer du mécanisme utilisé par ASH qui se base sur un échantillonnage périodique si je ne m'abuse pas.

  8. #8
    Expert confirmé
    Avatar de pachot
    Homme Profil pro
    Oracle ACE Director, DBA OCM 12c, consultant. En Suisse (dbi services)
    Inscrit en
    novembre 2007
    Messages
    1 553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Suisse

    Informations professionnelles :
    Activité : Oracle ACE Director, DBA OCM 12c, consultant. En Suisse (dbi services)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : novembre 2007
    Messages : 1 553
    Points : 5 405
    Points
    5 405
    Billets dans le blog
    5

    Par défaut

    Bonjour,
    V$SQL_PLAN est automatiquement historisé avec AWR (si diagnostic pack) ou Statspack (level 7). C'est fait pour. Il ne manque que les predicats.
    Cordialement,
    Franck.
    Franck Pachot - Consultant et formateur (dbi services) - Oracle ACED - Oracle Certified Master 12c - Oak Table member - twitter: @FranckPachot
    Besoin d'une formation Oracle 12cR2 ?


  9. #9
    Membre actif
    Homme Profil pro
    xxxxxxxxx
    Inscrit en
    avril 2015
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : xxxxxxxxx

    Informations forums :
    Inscription : avril 2015
    Messages : 175
    Points : 281
    Points
    281

    Par défaut V$SQL_PLAN : à historiser ?

    Alors pourquoi compliquer, puis que oracle le fait déjà cette historisation !

  10. #10
    Membre averti
    Homme Profil pro
    DBA Oracle
    Inscrit en
    avril 2013
    Messages
    485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : DBA Oracle

    Informations forums :
    Inscription : avril 2013
    Messages : 485
    Points : 373
    Points
    373

    Par défaut

    Parce que pour utiliser AWR, comme le dit Pachot, il faut avoir le Diagnostic Pack qui n'est pas gratuit.
    Quant à Statspack je ne connais pas mais quelque chose me dit qu'il n'est pas simple à utiliser et que c'est une boite noire.

    En outre, en essayant de faire les choses par moi-même, j'ai découvert le message d'erreur suivant en voulant créer sous SQL*Plus un trigger sur V_$SQL_PLAN :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SQL> CREATE OR REPLACE TRIGGER TRIGGER1 INSTEAD OF INSERT ON V_$SQL_PLAN BEGIN  	dbms_output.put_line ('TEST'); END;
    	  2  /
    	CREATE OR REPLACE TRIGGER TRIGGER1 INSTEAD OF INSERT ON V_$SQL_PLAN BEGIN  	dbms_output.put_line ('TEST'); END;
    	                          *
    	ERREUR à la ligne 1 :
    	ORA-04089: impossible créer déclencheurs sur objets appartenant à SYS 
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  11. #11
    Expert confirmé
    Avatar de pachot
    Homme Profil pro
    Oracle ACE Director, DBA OCM 12c, consultant. En Suisse (dbi services)
    Inscrit en
    novembre 2007
    Messages
    1 553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Suisse

    Informations professionnelles :
    Activité : Oracle ACE Director, DBA OCM 12c, consultant. En Suisse (dbi services)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : novembre 2007
    Messages : 1 553
    Points : 5 405
    Points
    5 405
    Billets dans le blog
    5

    Par défaut

    Citation Envoyé par Ikebukuro Voir le message
    Quant à Statspack je ne connais pas mais quelque chose me dit qu'il n'est pas simple à utiliser et que c'est une boite noire.
    C'est tout le contraire. Statspack est très bien documenté (spdoc.txt dans ORACLE_HOME/rdbms/admin), tout simple à installer et à utiliser. Et tout le code est visible (package PL/SQL non wrappé et scripts sqlplus).
    L'avantage: il a été fait par les développeurs oracle, qui connaissent le mieux les statistiques qu'on trouve dans V$SQL_PLAN
    Plus d'info sur Statspack: http://viewer.zmags.com/publication/...b#/dd9ed62b/36

    Vouloir mettre des triggers sur les tables du dictionnaire est très dangereux. Les vues V$ ne sont pas des tables mais des vues sur des structures internes. elles ne sont pas mises à jour en SQL, donc pas de triggers. Et attention, les lectures vont poser des latch sur les structures internes de mémoire, qui peuvent avoir des conséquences néfaste sur la base. Mieux vaut s'appuyer sur un mécanisme existant, développé par oracle et qui fontionne depuis des années.

    Capturer les plan d'exécution n'est pas simple. Les plans peuvent rester en cache 2 secondes ou un mois.
    V$SQL_PLAN est réinitialisée lors des arrêts/relances
    Non. C'est une vue sur des structures mémoires très dynamique. Bien sûr elle est vide au démarrage de l'instance, vu que la mémoire est initialisée à ce moment là, mais rien n'est historisé ensuite. Même listant V$SQL_PLAN toutes les secondes (et je vous déconseille de faire ça!) on pas à côté à beaucoup de curseurs.
    Franck Pachot - Consultant et formateur (dbi services) - Oracle ACED - Oracle Certified Master 12c - Oak Table member - twitter: @FranckPachot
    Besoin d'une formation Oracle 12cR2 ?


Discussions similaires

  1. [MPD] Comment le creer avec historisation ?
    Par schnourf dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 13/12/2005, 11h58
  2. [PHP-JS] Historiser une impression
    Par clara2005 dans le forum Syntaxe
    Réponses: 22
    Dernier message: 25/11/2005, 14h28
  3. SNMP : requetes, historisation et affichage
    Par Magique dans le forum Développement
    Réponses: 2
    Dernier message: 11/04/2005, 17h22
  4. creation de table d'Historisation
    Par devalender dans le forum Débuter
    Réponses: 2
    Dernier message: 18/10/2004, 13h58
  5. [architecture] process d'historisation
    Par P'tit Jean dans le forum Décisions SGBD
    Réponses: 6
    Dernier message: 22/10/2003, 15h33

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