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 :

statpack et trigger


Sujet :

PL/SQL Oracle

  1. #1
    Membre actif
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Points : 289
    Points
    289
    Par défaut statpack et trigger
    Bonjour a tous

    Oracle 10Gr2 64 bits
    Linux REL5 64 bits

    je voudrais que oracle execute statpack chaque fois que la valeur de cette requete depasse une certaine limite:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    select
      stat_name,
      Round(value/1000000) "Time (Sec)"
    from
       v$sys_time_model
    where
       stat_name in ('DB CPU','sql execute elapsed time');

    STAT_NAME Time (Sec)
    ---------------------------------------------------------------- ----------
    DB CPU 181
    sql execute elapsed time 106
    Par exemple si DB CPU depasse les 1000 seconde...
    C'est possible?? je connais pas PL/SQL
    j'ai vue sur le web des exemple genre celui ci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE OR REPLACE TRIGGER "SYS"."LOG_SERVER"
    AFTER SERVERERROR ON DATABASE
    when (sys.server_error(1) = 926)
    begin
    execute immediate 'execute statspack.snap (i_snap_level=>7, i_ucomment =>'ora-926')' ;
    END;
    /
    mais bon ca correspond pas exactement
    D'avance merci si qqu'un sait faire, ou connait une doc qui explique.
    Ciao

  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
    Et pourquoi pas le scheduler toutes les 1000 secondes ?

  3. #3
    Membre actif
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Points : 289
    Points
    289
    Par défaut statpack et trigger
    Le scheduler toutes les 1000 seconde...
    Je pige pas.
    Tu veux dire creer un rapport toutes les 1000 secondes?

  4. #4
    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
    Oui, ou alors tu schedules une tâche tous les 1/4 d'heure qui ne lance le snapshot que si DB CPU est à 1000.

    Du reste, je ne vois pas bien l'intérêt d'avoir des périodes variables dans statspack

  5. #5
    Membre actif
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Points : 289
    Points
    289
    Par défaut statpack et trigger
    Le but est le suivant.
    Chaque mois je dois faire des rapports de perf des bases.
    Le problem c'est que AWR garde les données d'une semaine. Donc si y'a un pic CPU par exemple en debut de mois...je pourrais le voir via CPU load de OEM, mais je pourrais pas voir le pourquoi.
    Je sais qu'on peux augmenter le keep des snap a un mois, mais ca pique de l'espace a sysaux et je veux pas cette solution.
    D'ou l'idée de declencher statpack chaque fois que des valeurs depassent des limites.

  6. #6
    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
    mais cette indicateur n'est pas le temps CPU consommé depuis le démarrage de l'instance ?

  7. #7
    Membre actif
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Points : 289
    Points
    289
    Par défaut statpack et trigger
    c'etait juste pour l'exemple
    en fait il y aura d'autres metrics
    Le soucis c'est que je sais pas comment ecrire le code pl/sql
    avec une requete integrée,
    recuperer une valeur la comparer et faire le IF valeur > limit, executer le statpaxk

  8. #8
    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
    Désolé, mais je ne comprends pas vraiment l’utilité de votre démarche. Une affreuse requête bouffe le CPU ou autre statistique que vous décidez de suivre. A la fin de l’exécution de cette requête les vues v$ sont mises à jour. Votre mécanisme se déclenche et exécute statpack. L’état curent de la base est enregistre dans les tables du moduke statpack. Imaginons que cette requête ne s’exécute plus pendant une semaine. A quoi ça vous serve donc d’avoir appelé statpack ?

  9. #9
    Membre actif
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Points : 289
    Points
    289
    Par défaut statpack et trigger
    alors voila, sans connaitre, jsute en prenant des exemples du web, ca donnerais ca:

    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
    DECLARE
      valeur       NUMBER(12);
      PROCEDURE pic (valeur IN NUMBER, amount IN NUMBER) IS
        BEGIN
    select
      stat_name,
      Round(value/1000000) "Time (Sec)"
    from
       v$sys_time_model
    where
       stat_name = 'DB CPU';
      END pic;
    BEGIN
      pic(valeur);
     execute immediate 'execute statspack.snap (i_snap_level=>7, i_ucomment =>'ora-926')' ;
    END;
    /
    je sais pas si ca marche
    j'essai

  10. #10
    Membre actif
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Points : 289
    Points
    289
    Par défaut statpack et trigger
    et bien j'ai pensé que si j'execute statpack (ou awr) lorsqu'il se passe qque chose dans la base, comme un pic de CPU par exemple, ou bien un pic de IOPS..je pourrais "capturer" l'activité de la base a ce moment la...quelle session, quelle requetes, quel wait event etc...
    Vous voyez ce que je cherche a faire?
    en gros j'aimerais pourvoir dire : il y a eu ce PIC car tel user a fait telle requete...
    avec tel plan d'execution....etc etc.

  11. #11
    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
    Citation Envoyé par ldiaz Voir le message
    alors voila, sans connaitre, jsute en prenant des exemples du web, ca donnerais ca:

    DECLARE
    valeur NUMBER(12);
    PROCEDURE pic (valeur IN NUMBER, amount IN NUMBER) IS
    BEGIN
    select
    stat_name,
    Round(value/1000000) "Time (Sec)"
    from
    v$sys_time_model
    where
    stat_name = 'DB CPU';
    END pic;
    BEGIN
    pic(valeur);
    execute immediate 'execute statspack.snap (i_snap_level=>7, i_ucomment =>'ora-926')' ;
    END;
    /

    je sais pas si ca marche
    j'essai
    Ca marche pas, n'essayez pas. Corrigez.

  12. #12
    Membre actif
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Points : 289
    Points
    289
    Par défaut statpack et trigger
    comme ceci?

    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
    DECLARE
     valeur       NUMBER(12);
     PROCEDURE pic (valeur IN NUMBER)
       BEGIN
    select
     stat_name,
     Round(value/1000000) "Time (Sec)"
    from
      v$sys_time_model
    where
      stat_name = 'DB CPU';
     END pic;
    BEGIN
     pic(valeur);
     IF (valeur >1000) THEN 
      execute immediate 'execute statspack.snap (i_snap_level=>7, i_ucomment =>'ora-926')' ;
     END IF;
    END;
    /

  13. #13
    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
    Merci de formater convenablement tes messages

  14. #14
    Membre actif
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Points : 289
    Points
    289
    Par défaut statpack et trigger
    je crois que comme ca c'est mieux:

    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
    CREATE OR REPLACE PROCEDURE
    pic_check (threshold IN NUMBER) is
     val number;
    begin
      select
      Round(value/1000000) "Time (Sec)"
     into val
     
    from
       v$sys_time_model
    where
       stat_name = 'DB CPU';
     if val>threshold then
       statspack.snap ();
     end if;
      END pic_check;

  15. #15
    Membre actif
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Points : 289
    Points
    289
    Par défaut statpack et trigger
    ca donne une compilation error...
    vous savez a quel endroit est l'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
    CREATE OR REPLACE PROCEDURE
    pic_check (threshold IN NUMBER) is
     val number;
    begin
      select
      Round(value/1000000) "Time (Sec)"
     into val
    from
       v$sys_time_model
    where
       stat_name = 'DB CPU';
     if val>threshold then
            statspack.snap(i_snap_level=> 10);
     end if;
      END pic_check;
    /

  16. #16
    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
    SHOW ERR pour connaitre les erreurs

  17. #17
    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
    Citation Envoyé par ldiaz Voir le message
    ca donne une compilation error...
    vous savez a quel endroit est l'erreur?
    ...
    Probablement qu'il faut faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    grant all on v_$sys_time_model to mni;
    étant connecté comme sysdba.

    Voir aussi le droits d'exécution du statspack.snap.

  18. #18
    Membre actif
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Points : 289
    Points
    289
    Par défaut statpack et trigger
    ok ca marche
    donc maintenant pour l'automatiser je dois utiliser le scheduler n'est ce pas?

    ce genre de code c'est correct?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    begin
      dbms_scheduler.create_job(
          job_name => 'cpu_check'
         ,job_type => 'PLSQL_BLOCK'
         ,job_action => 'begin pic_check('100'); end; '
         ,start_date => '01/01/2006 02:00 AM'
         ,repeat_interval => 'FREQ=DAILY'
         ,enabled => TRUE
         ,comments => 'Test CPU treshhold.');
    end;
    /

  19. #19
    Membre actif
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Points : 289
    Points
    289
    Par défaut statpack et trigger
    ok ca marche avec ce code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    begin
      dbms_scheduler.create_job(
          job_name => 'cpu_check'
         ,job_type => 'PLSQL_BLOCK'
         ,job_action => 'begin pic_check(100); end;'
         ,start_date => to_date( '02/06/2009 02:00 AM','dd/mm/yyyy hh:mi AM')
         ,repeat_interval => 'FREQ=DAILY'
         ,enabled => TRUE
         ,comments => 'Test CPU treshhold.');
    end;
    /
    maintenant j'ai le JOB dans dba_scheduler_jobs
    ok merci a tous....

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

Discussions similaires

  1. [power designer et Sybase] trigger
    Par mr_qno dans le forum Sybase
    Réponses: 4
    Dernier message: 12/07/2006, 18h32
  2. [Interbase6] Trigger : Post_event
    Par Andry dans le forum InterBase
    Réponses: 2
    Dernier message: 13/05/2003, 09h27
  3. Trigger ??
    Par XDeus dans le forum Développement
    Réponses: 6
    Dernier message: 31/03/2003, 09h44
  4. [PostgreSQL] Refus de STATEMENT dans un trigger
    Par alex2205 dans le forum Requêtes
    Réponses: 3
    Dernier message: 10/03/2003, 12h51
  5. [Comparatif] Procédures stockées, triggers, etc.
    Par MCZz dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 28/08/2002, 12h27

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