PL/SQL: Logger une requête SQL
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:
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
|
procedure writeLog ( message in string) is
file UTL_FILE.FILE_TYPE;
begin
/*To write Logs in a file*/
/*But you have to complete following command to have something:
CREATE DIRECTORY SCLOG AS 'D:\tmpOra\';
GRANT READ,WRITE ON DIRECTORY SCLOG TO USER;
*/
begin
IF not UTL_FILE.IS_OPEN(file) THEN
file:= UTL_FILE.FOPEN('SCLOG','fichier.log','a');
end if;
IF UTL_FILE.IS_OPEN(file) THEN
UTL_FILE.PUT(file,TO_CHAR(SYSDATE, '[DD/MM/YYYY HH24:MI:SS]')||' DEBUG'||': ');
UTL_FILE.PUT_LINE(file,message);
UTL_FILE.FFLUSH(file);
utl_file.fclose(file);
end if;
exception
when others then
IF UTL_FILE.IS_OPEN(file) THEN
UTL_FILE.PUT(file,TO_CHAR(SYSDATE, '[DD/MM/YYYY HH24:MI:SS]')||' ERROR'||': ');
UTL_FILE.PUT_LINE(file,'ERROR ==> Problem to write into log file '|| dbms_utility.format_error_stack);
UTL_FILE.FFLUSH(file);
utl_file.fclose(file);
end if;
end;
end; |
D'avance merci pour votre aide.
Cdt,
Razmoket
DBMS_SYSTEM, logon trigger, alter session set TRACEFILE_IDENTIFIER...
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 !