|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() Inscription : octobre 2005 Messages : 4 ![]() |
Bonjour,
Je suis actuellement en train de mettre en place une gestion de trace au sein de package PL/SQL. J'ai déjà mis une procédure me permettant de logger dans un fichier externe des traces formattées pour aider à la qualification de problèmes client. Bon maintenant la seconde étape pour pouvoir des qualifications complètes serait de pouvoir tracer le contenu de requêtes SQL dans un fichier. En gros je voudrais un equivalent la procédure suivante mais pour une requête SQL comme un SELECT : Code :
Cdt, Razmoket |
||
|
|
00
|
|
|
#2 |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
tu ne peux pas, en fait faut mettre des "tags" pour savoir où chercher dans le code mais tu peux pas faire mieux...
|
|
|
00
|
|
|
#3 | ||||
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 319 ![]() |
Citation:
Citation:
Petit remarque : Cette procédure contient le bug numéro 1 du code PL/SQL : WHEN OTHERS THEN NULL (dans certains cas c’est vrai) |
||||
|
|
00
|
|
|
#4 | |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
Citation:
![]() Ha non... on va pas refaire le débat hein
|
|
|
|
00
|
|
|
#5 |
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 319 ![]() |
|
|
|
00
|
|
|
#6 |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
Merci bonne année à toi aussi
Une raison pourrait être que le logging est un plug-in qui n'a pas d'impact fonctionnel et donc ne doit pas bloquer l'utilisateur ou mettre l'application en erreur et donc tu peux décider que si le logging est HS tu ignores le dysfonctionnement. Ce serait quand même balaud de planter l'enregistrement d'une facture de 100 lignes parce que le lecteur contenant les logs est déconnecté Néanmoins, sys.dbms_system.ksdwrt est plus élégant pour écrire une alerte dans le fichier ad hoc mais cela nécessite des droits étendus j'imagine |
|
|
00
|
|
|
#7 | |
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 319 ![]() |
Citation:
Analyse le code dans la situation suivante : le fichier est ouvert mais l’instruction UTL_FILE.FFLUSH échoue. Cella provoque une exception et donc on passe dans le block WHEN Others. Le fichier est ouvert donc on va réessayer de exécuter UTL_FILE.FFLUSH qui va échouer une nouvelle fois, ce qui va provoquer une nouvelle exception non interceptée et qui va planter bien sûr la saisie de la facture de 100 lignes. Donc exactement le contraire de ce qu’on a essayé d’éviter |
|
|
|
00
|
|
|
#8 |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
j'ai pas regardé le code, je réponds à : "le bug numéro 1 du code PL/SQL : WHEN OTHERS THEN NULL"
Dans le code, en effet il peut y avoir souci |
|
|
00
|
|
|
#9 | ||
|
Invité de passage
![]() Inscription : octobre 2005 Messages : 4 ![]() |
Bonjour tout le monde et merci d'avoir regardé mon problème
Ensuite vis à vis des soucis contenu dans ma procédure, je suis bien d'accord qu'actuellement elle est loin d'être parfaite ni finie du fait de mon soucis de vis à vis des requêtes SQL. Ensuite je rejoins totalement l'idée qu'une gestion de logging ne doit pas être bloquant dans le cas où cela plante (et dans mon cas les volumes sont énormément plus gros que 100 lignes ^_^ donc tout bloquage est d'autant plus impactant) D'autre part, j'ai tenté avec des résultats mitigés de logger les requêtes executé avec la requête suivante: Code :
Et encore merci pour vos avis. |
||
|
|
00
|
|
|
#10 |
|
Membre du Club
![]() Inscription : janvier 2008 Messages : 50 ![]() |
Hello,
je serai toi je créerai un logon trigger pour activer le tracage de la nouvelle session de manière à loguer tout ce qui est fait au sein de ta session (insert, update, select...) dans un fichier de traces Oracle (udump/*.trc). Le logon trigger peut se déclencher pour tout les utilisateurs ou bien pour un user spécifique. Ensuite, tu peux gérer la taille max du fichier de traces, ajouter un identifiant (V$SESSION.SID, V$SESSION.MACHINE...) au nom de fichier pour mieux l'identifier. Enfin avec DBMS_SYSTEM, tu peux écrire la date et l'heure... Bon courage ! |
|
|
00
|
|
|
#11 |
|
Expert Confirmé
![]() Inscription : février 2006 Messages : 3 433 ![]() |
La trace SQL trace tous les ordres SQL de la session mais fournit un fichier trace brut un peu difficile à exploiter (par exemple il donne le temps sous forme de secondes écoulées depis le 1er janvier 1970) qui est d'abord destiné à être analyser par TKPROF pour l'analyse des performances.
Le package debug de Tom Kyte est sans doute très intéressant mais il n'est malheureusement pas documenté. Il y a aussi la possibilité de ne pas écrire de code et d'utiliser la fonctionnalité d'audit qui peut tracer le code SQL exécuté sur un objet donné. Exemple avec une table dans ce message OTN. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com