prog:oracle_session_info_setzen
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende Überarbeitung | |||
prog:oracle_session_info_setzen [2015/11/22 14:05] – [PL/SQL Instrumentation - in der V$SESSION Informationen über die aktuelle Session / das aktuelle Programm hinterlegen] gpipperr | prog:oracle_session_info_setzen [2016/01/22 16:24] (aktuell) – [Quellen] gpipperr | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | =====PL/SQL Instrumentation - in der V$SESSION Informationen über die aktuelle Session / das aktuelle | ||
+ | **min. Ab V7** | ||
+ | Nur wenn wir erkennen können was gerade in der Datenbank läuft, fällt es leicht auf bei Problemen schnell zu reagieren. | ||
+ | |||
+ | Wird später mit ASH die Last auf der DB ausgewertet, | ||
+ | |||
+ | |||
+ | |||
+ | ==== Wie kann nun eine Oracle Session in der Datenbank markiert werden?==== | ||
+ | |||
+ | |||
+ | In der View V$SESSION stehen uns dazu die folgende Spalten zur Verfügung: | ||
+ | |||
+ | * MODULE | ||
+ | * ACTION | ||
+ | * CLIENT_IDENTIFIER | ||
+ | * CLIENT_INFO | ||
+ | |||
+ | Setzen der Session Information per PL/SQL Aufruf (zum Beispiel vor dem Aufruf des eigentlichen SQL Statements): | ||
+ | <code sql> | ||
+ | --Set the session information in v$session: | ||
+ | |||
+ | begin | ||
+ | -- set v$session module | ||
+ | -- set v$session action | ||
+ | |||
+ | | ||
+ | |||
+ | -- set v$session client_info | ||
+ | |||
+ | | ||
+ | |||
+ | -- set v$session client_identifier | ||
+ | |||
+ | | ||
+ | |||
+ | end; | ||
+ | / | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | Abfragen der gesetzten Informationen (hier die eigene Session): | ||
+ | <code sql> | ||
+ | column module | ||
+ | column action | ||
+ | column client_info | ||
+ | column client_identifier format a20 | ||
+ | |||
+ | -- select your own session: | ||
+ | select module | ||
+ | , action | ||
+ | , client_info | ||
+ | , client_identifier | ||
+ | from gv$session | ||
+ | where sid = sys_context(' | ||
+ | and inst_id= sys_context(' | ||
+ | / | ||
+ | |||
+ | MODULE | ||
+ | -------------------- -------------------- -------------------- -------------------- | ||
+ | CALL_FROM_TEST | ||
+ | |||
+ | </ | ||
+ | |||
+ | Diese Informationen werden auch in den Audit Trail der DB mit übernommen. | ||
+ | |||
+ | |||
+ | In einer typischen PL/SQL Umgebung sollte dazu ein Package definiert werden, über das diese Informationen gezielt in jeden Package gesetzt werden. | ||
+ | |||
+ | |||
+ | === Nachträglich Informationen hinterlegen === | ||
+ | |||
+ | Oft ist es recht schwer Entwickler oder gar Software Firmen wie Oracle zu überzeugen, | ||
+ | |||
+ | Bei bestehenden Applikationen ist das natürlich nachträglich nicht mehr möglich. | ||
+ | |||
+ | Eine Idee ist das Setzen eines Trigger auf die Log Tabellen einer Applikation, | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ==== Quellen ==== | ||
+ | |||
+ | Oracle: | ||
+ | * Using DBMS_APPLICATION_INFO => http:// | ||
+ | * Using DBMS_SESSION | ||
+ | * SYS_CONTEXT |
prog/oracle_session_info_setzen.txt · Zuletzt geändert: 2016/01/22 16:24 von gpipperr