„Woher zieht der sich den Scheiß?“. Diese Frage schwirrt mir beim Upgrade und bei der Installation von komplexen Enterprise-Technologien immer über den Kopf, wenn Dumps geworfen werden, ohne dass in den Logs irgendwelche aussagekräftigen Informationen stehen würden.
Hierbei kann es oftmals helfen, wenn man mit tracen kann, welche SQL Statements gerade von der automatischen Prozedur auf der Datenbank ausgeführt werden, und welche Dateien auf dem DAteisystem verändert werden.
Dieser Beitrag wird regelmäßig geupdatet, um verschiedene Datenbanken und Dateisysteme abzudecken.
SQL-Statements auf eine Oracle Datenbank tracen
Als erstes müssen Sie wissen, wie der User heißt, dessen Session Sie tracen wollen. Eine Liste aller User kriegen Sie über
SELECT username from dba_users;
dann braucht irh den client identifier für eine session, die unter diesem usernamen braucht. Den Cleint identifier könnt ihr rausbekommen über
select client_identifier from v$session;
Danach aktivieren wir für diesen User die STatistiken
EXECUTE DBMS_MONITOR.CLIENT_ID_stat_ENABLE(client_id => '<cleint identifier>');
Jetzt lasst ihr die atuomatishce Prozedur, die ihr analysieren wollt, nochmal laufen, so dass die abzufangenden SQL Statements auf die Datenbank angesetzt werden. Sobald ihr sicher seid, dass die SQL Statements abgesetzt wurden, deaktiviert ihr den Trace wieder über
execute dbms_monitor.client_id_stat_disable(client_id => '<client identifier>');
Die gesammelten Statistiken für den Client identifier könnt ihr nun abrufen über beispielsweise
select * FROM V$CLIENT_STATS WHERE client_identifier LIKE '<client identifier>'
In den STatistiken stehen noch nicht die SQL Statements drin, sondern nur statistische informationen, also beispielsweise welche Art von Statement ausgeführt wurde und wie lange diese gedauert hat.
Nun wollen wir detaillierter gehen und aktivierten statt den Statistiken einen detaillierten SQL Trace.
Bevor wir den SQL Trace checken müssen wir einige Paramter checken über den Befehl
show parameter <parametername>
Hierbi checkenw ir folgende parameter
- diagnostic_dest. Zeigt den Ordner an, in dem später der trace geschrieben wird. In einem SAP system ist dieser Ordner meistens auf X:\ORACLE\TRP\SAPTRACE
MAX_DUMP_FILE_SIZE. Dieser Parameter steht standardmäßig auf UNLIMITED, was bedeutet, dass die Trace Files beliebig groß werden können. DAs kann natürlich dazu führen, dass die Festplattenpartition, in welche die Traces geschrieben werden, voll wird – was wir nicht wollen. Deswegen sollte hier ein Limit gesetzt werden.- STATISTICS_LEVEL. Steht diese rWert uaf all, werden zusätzlich zu den SQL Statements auch die Reaktionszeiten mitgeloggt, die wir bereits weiter oben einmal geloggt haben. ist der Wert auf BASIC, werdne diese hingegen nicht mit gesammelt.
Desweiterne wird es ohne einen TraceFile Identifier sehr schwer werden herauszufinden, welches Tracefile nachher für uns interessant ist. Daher setzen wir einen solchen Identifier über
ALTER SESSION SET TRACEFILE_IDENTIFIER = 'my_trace_id';
jetzt aktivierne wir das Tracing für die gesamte Datnebankinstanz über
dbms_monitor.database_trace_enable(instance_name => '<INstanzname>');
wenn der Trace aktiv ist, bekommt ihr nun einen Datensatz zurück bei der Abfrage
select * from dba_enabled_traces;
Jetzt führen wir wieder die Prozedur aus, die zu den aufzuzeichnednen sQL Statements führt, und beenden danach das Tracing wieder über
dbms_monitor.database_trace_disable;
Wenn ihr nach Deaktiiveren des Traces nun in euer DIAGNOSTIC_DEST-Verzeichnis schaut, werdet ihr dort jede Menge aktuelle Tracefiles finden. Öffnet ihr diese, werdet ihr dort nun SQL Statements vorfinden, die auf die Datenbank ausgeführt wurden.

Diese Trace Files könnt ihr jetzt entweder innerhalb des Verzeichnisses nach beispielsweise einer bestimmten Tabelle oder Spalte greppen. Oder ihr könnt die Trace Files auch mit Hilfe der Binary trcsess in eine einzige Datei zusammenfügen.
Wenn dir dieser Post gefallen hat, teile ihn doch auf Social Media, abonniere und verfolge mich per E-Mail, RSS-Feed, Social Media oder registriere dich auf meiner Seite. Wenn du registriert bist, like den Post bitte, wenn er dir gefallen hat!