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

Oracle Discussion :

Tracer toutes les requêtes exécutées par un utilisateur


Sujet :

Oracle

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 20
    Points : 2
    Points
    2
    Par défaut Tracer toutes les requêtes exécutées par un utilisateur
    Bonjour a tous,

    Ce que je souhaite faire est relativement simple (sauf avec oracle et quand on est pas soi-meme dba

    j'aimerai recuperer toutes les requetes executees par un utilisateur (utilise uniquement par une application specifique) pour faire du reengineering de l'application en question (dont je n'ai pas le code et je voudrais savoir ou elle "tappe" dans la base de donnees)

    pour faire ca j'ai essayer un trigger :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Create or replace trigger trigger_webdfe AFTER LOGON ON database
    begin
    if user = 'webdfe' 
    execute immediate 'alter session set sql_trace = true';
    end if;
    end;
    j'obtiens bien un fichier de trace .trc dont le contenu ne me satisfait pas du tout

    monfichier.trc
    Oracle9i Enterprise Edition Release 9.2.0.4.0 - 64bit Production
    With the Partitioning, OLAP and Oracle Data Mining options
    JServer Release 9.2.0.4.0 - Production
    ORACLE_HOME = /oracle/9i
    System name: AIX
    Node name: ****
    Release: ****
    Version: ****
    Machine: ****
    Instance name: LEOBASE_F
    Redo thread mounted by this instance: 1
    Oracle process number: 8
    Unix process pid: 876686, image: oracle@leo (TNS V1-V3)
    *** SESSION ID7.9789) 2005-03-10 16:27:37.276
    Skipped error 4098 during the execution of SYSDBA.TRIGGER_WEBDFE
    *** 2005-03-10 16:27:37.305
    ksedmp: internal or fatal error
    ORA-04098
    qqun pourrait m'expliquer ou est le probleme ?

    j'ai commencer par une commande du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EXECUTE DBMS_SYSTEM.SET_SQL_TRACE_IN_SESION(SID,SERIAL#,BOOLEAN)
    mais cela n'est pas utilisable sachant que l'application se deco/reconnecte a chaque requete executee et que donc le serial est incremente a chaque fois et le sid change aussi parfois...

    MERCI D'AVANCE POUR VOTRE AIDE !!!!!!!!!!!!!!!!!!!!!!!! ))

  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 ne pas se servir de v$sqlarea ou mettre carrément la base en trace ?

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 20
    Points : 2
    Points
    2
    Par défaut
    trop d'utilisateurs sur la base et donc cela prendrait trop de ressources de tout tracer...

    sinon j'avais oublie le THEN dans le code de mon trigger mais j'ai toujours des erreurs ds le fichier de trace :

    myfile.trc
    Oracle9i Enterprise Edition Release 9.2.0.4.0 - 64bit Production
    With the Partitioning, OLAP and Oracle Data Mining options
    JServer Release 9.2.0.4.0 - Production
    ORACLE_HOME = /oracle/9i
    System name: AIX
    Node name: leo
    Release: 2
    Version: 5
    Machine: 005481AC4C00
    Instance name: LEOBASE_F
    Redo thread mounted by this instance: 1
    Oracle process number: 8
    Unix process pid: 893012, image: oracle@leo (TNS V1-V3)

    *** SESSION ID7.10114) 2005-03-10 16:53:23.276
    Skipped error 604 during the execution of SYSDBA.TRIGGER_WEBDFE
    *** 2005-03-10 16:53:23.292
    ksedmp: internal or fatal error
    ORA-00604: wyst±pił bł±d na poziomie 1 rekurencyjnego SQL
    ORA-01031: niewystarczaj±ce uprawnienia
    ORA-06512: przy linia 3
    (la description des erreurs est en polonais, ca aide hein ? ))

  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
    1°) merci de penser aux balises [CODE] et [QUOTE]

    2°) je ne suis pas sûr que un trigger sur LOGON soit moins couteux

    Et la solution v$sqlarea ?

  5. #5
    Membre averti
    Inscrit en
    Novembre 2002
    Messages
    549
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 549
    Points : 436
    Points
    436
    Par défaut
    Bonjour

    LogMiner pourrait etre adapté non ?

    @
    PpPool

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 62
    Points : 48
    Points
    48
    Par défaut
    Bonjour,

    Il semblerait que l'erreur que tu obtiens ( après avoir corrigé le 'THEN' dans la condition 'if' ) provienne d'un manque de privilèges ( -> cf erreur ORA-01031 insufficient privileges ).

    Je te conseille donc d'ouvrir une session avec le user 'webdfe' et d'exécuter directement la requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alter session set sql_trace = true
    ( en désactivant juste derrière : juste pour vérifier que ta requête passe... et de nous faire part du résultat )

    Qu'on me corrige si je me trompe mais LogMiner permet effectivement de tracer les changements effectués sur la base ; or ici on désire tracer TOUTES LES REQUETES ( y compris donc les SELECT ) exécutées par un utilisateur donné.
    Sauf erreur de ma part LogMiner ne répond donc pas à la question.

    a+
    Noki

  7. #7
    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
    Une simple remarque sur le code de ton trigger :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if user = 'webdfe' then
    Il faut mettre les noms d'objets, d'user... en majuscule car ils sont stockés en majuscule dans les tables du dictionnaire d'Oracle en général.


    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...)

  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
    Citation Envoyé par Noki
    Sauf erreur de ma part LogMiner ne répond donc pas à la question.
    Tout à fait, dans LogMiner on n'aurait que les requêtes ayant modifiés qqchose en base, pas les simples select.


    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
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 20
    Points : 2
    Points
    2
    Par défaut
    Bonjour a tous,

    Desolé pour l'oubli des balises mais c t la premiere fois que je postais

    J'en apprends un peu plus sur les fonctionnalites de LogMiner et apparement cela n'est pas utilse dans mon cas.

    Sinon je n'ai pas de probleme lors de l'execution de la commande

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     alter session set sql_trace = true;
    Session altered

    Sinon sur un forum OTN, qqun me dit cela (mais j'avoue que cela se corse)

    Perhaps this package is invalid.
    Have you seen the status into dba_objects table ?
    If it's the case you can to recompile SYS invalid object :
    To recompile SYS invalid objects, run (with INTERNAL or SYS) $ORACLE_HOME/rdbms/admin/utlrp.sql

    Oracle highly recommends running this script towards the end of any database migration/upgrade/downgrade.

    You can read metalink notes (225942.1 - Using DBMS_UTILITY.COMPILE_SCHEMA For SYS Objects Fails With ORA-20001 ORA-06512, and 272322.1 - Difference between UTLRP.SQL - UTLIRP.SQL - UTLIP.SQL?) mentionned, utlrp.sql recompiles invalid PLSQL modules (procedures, functions, packages, triggers, types, views, libraries).
    désolé pour les non anglophones

    Qqun y voit une piste valable ?

    Merci d'avance pour toutes vos réponses
    Cordialement!

    PS : ca va se finir, jvais venir un dimanche, foutre la base totale en mode trace, faire tourner l'appli et voir les requetes qui passent lol...

  10. #10
    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 si tu as effectivement des objets invalides il faut les compiler

    Le trigger est bien valide au moins ? Il plante avec toutes les connections ou uniquement WEBDFE ?

  11. #11
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 20
    Points : 2
    Points
    2
    Par défaut
    ben le fichier de trace est crée uniquement lorsque c WEBDFE qui se connecte, pis ca plante direct...

    par contre, lorsque je trace a la main cad j'execute le alter session, connecte en tant que WEBDFE avec toad ben cela marche pour preuve :

    /leo/formation/dbdc/oracle/udump/leobase_f_ora_712916.trc
    Oracle9i Enterprise Edition Release 9.2.0.4.0 - 64bit Production
    With the Partitioning, OLAP and Oracle Data Mining options
    JServer Release 9.2.0.4.0 - Production
    ORACLE_HOME = /oracle/9i
    System name: AIX
    Node name: leo
    Release: 2
    Version: 5
    Machine: 005481AC4C00
    Instance name: LEOBASE_F
    Redo thread mounted by this instance: 1
    Oracle process number: 8
    Unix process pid: 712916, image: oracle@leo (TNS V1-V3)

    *** 2005-03-11 09:40:29.256
    *** SESSION ID8.9377) 2005-03-11 09:40:29.237
    APPNAME mod='TOAD 8.0.0.47' mh=363997730 act='' ah=4029777240
    =====================
    PARSING IN CURSOR #3 len=35 dep=0 uid=26 oct=42 lid=26 tim=1084502372320467 hv=4050693888 ad='2be26c58'
    alter session set sql_trace = true
    END OF STMT
    EXEC #3:c=0,e=145,p=0,cr=0,cu=0,mis=1,r=0,dep=0,og=4,tim=1084502372301827
    *** 2005-03-11 09:43:25.160
    =====================
    PARSE ERROR #2:len=38 dep=0 uid=26 oct=42 lid=26 tim=1084502544101637 err=911
    alter session set sql_trace = false;
    =====================
    PARSING IN CURSOR #3 len=36 dep=0 uid=26 oct=42 lid=26 tim=1084502544114117 hv=2919611770 ad='2be27468'
    alter session set sql_trace = false
    END OF STMT
    PARSE #3:c=0,e=343,p=0,cr=0,cu=0,mis=1,r=0,dep=0,og=4,tim=1084502544114113
    EXEC #3:c=0,e=114,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=4,tim=1084502544114314

  12. #12
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 20
    Points : 2
    Points
    2
    Par défaut
    avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select * from dba_objects where dba_objects.OBJECT_NAME = 'TRIGGER_WEBDFE';
    je peux voir que le statut de mon objet est valide...

  13. #13
    Membre expert
    Avatar de bouyao
    Inscrit en
    Janvier 2005
    Messages
    1 778
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 778
    Points : 3 033
    Points
    3 033
    Par défaut
    Activier l'Audit ca ne resouds pas ton problème ?

  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
    ça passe mais est-ce que le trigger est toujours actif ? T'as pas répondu aux questions : Le trigger est bien valide au moins ? Il plante avec toutes les connections ou uniquement WEBDFE ?

  15. #15
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 20
    Points : 2
    Points
    2
    Par défaut
    Je ne sais pas, je ne l'ai jamais utilise.

    Qu'est ce cela que permet exactement ? Comment cela s'active, etc ?

    Merci d'avance pour vos réponses...

    Sinon ya tjs la solution de mettre toute la base en trace, tanpis pour les perfs, et parcourir le fichier avec tkprof.

  16. #16
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 20
    Points : 2
    Points
    2
    Par défaut
    Pour information,

    l'utilisateur WEBDFE possede les meme droits que sysdba, je l'ai cree specialement pour cela et compte bien entendu le supprimer des que j'aurai un fichier trace correcte

  17. #17
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 20
    Points : 2
    Points
    2
    Par défaut
    orafrance j'ai repondu a tes deux questions :

    Le trigger est bien valide au moins ? Il plante avec toutes les connections ou uniquement WEBDFE ?
    oui il est valide et il ne plante qu'avec WEBDFE...

  18. #18
    Membre expert
    Avatar de bouyao
    Inscrit en
    Janvier 2005
    Messages
    1 778
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 778
    Points : 3 033
    Points
    3 033
    Par défaut
    Pour avoir la trace de tous il suffit d'ajouter l'event suivant dans l'init de la base :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    event="10046 trace name context forever, level 4"
    attention ca peut generer des grands fichiers trace

  19. #19
    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
    Désolé, j'avais pas saisi

    Tu es en RAC ou pas ?

  20. #20
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 20
    Points : 2
    Points
    2
    Par défaut
    cela revient a un
    non ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. Réponses: 0
    Dernier message: 18/03/2014, 10h51
  2. Réponses: 4
    Dernier message: 30/07/2012, 15h15
  3. Tracer les requêtes exécutées dans un script PL/SQL
    Par awalter1 dans le forum PL/SQL
    Réponses: 2
    Dernier message: 30/09/2011, 17h57
  4. Réponses: 2
    Dernier message: 08/02/2010, 10h41
  5. Tracer les requêtes exécutées par une fonction PL/PgSQL
    Par scheu dans le forum Administration
    Réponses: 1
    Dernier message: 02/02/2009, 14h01

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