Benutzer-Werkzeuge

Webseiten-Werkzeuge


prog:oracle_session_info_setzen

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
prog:oracle_session_info_setzen [2015/11/22 14:05]
gpipperr [PL/SQL Instrumentation - in der V$SESSION Informationen über die aktuelle Session / das aktuelle Programm hinterlegen]
prog:oracle_session_info_setzen [2016/01/22 16:24] (aktuell)
gpipperr [Quellen]
Zeile 1: Zeile 1:
 +=====PL/SQL Instrumentation - in der V$SESSION Informationen über die aktuelle Session / das aktuelle  Programm hinterlegen=====
 +**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, dienen diese Informationen wie MODULE dazu zu erkennen welche Teile der Applikation wie viel Ressourcen auf der Datenbank verbraucht haben.
 +
 +
 +
 +==== 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                 VARCHAR2(64)
 +  * ACTION                 VARCHAR2(64)
 +  * CLIENT_IDENTIFIER      VARCHAR2(64)
 +  * CLIENT_INFO            VARCHAR2(64)
 +
 +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
 +
 +   dbms_application_info.set_module('CALL_FROM_TEST', 'AAA');
 +
 +   -- set v$session client_info
 +
 +   dbms_application_info.set_client_info('BBB'); 
 +
 +   -- set v$session client_identifier
 +
 +   dbms_session.set_identifier('CCC'); 
 +
 +end;
 +/
 +
 +</code>
 +
 +
 +Abfragen der gesetzten Informationen (hier die eigene Session):
 +<code sql>
 +column module           format a20
 +column action           format a20
 +column client_info      format a20
 +column client_identifier format a20
 +
 +-- select your own session:
 +select module
 +, action
 +, client_info
 +, client_identifier
 +from gv$session 
 +where sid    = sys_context('userenv','SID')
 +and  inst_id= sys_context('userenv','INSTANCE')  
 +/
 +
 +MODULE               ACTION               CLIENT_INFO          CLIENT_IDENTIFIER
 +-------------------- -------------------- -------------------- --------------------
 +CALL_FROM_TEST       AAA                  BBB                  CCC
 +
 +</code>
 +
 +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, das durch eine durchgängige Instrumentation des SQL Codes eine stark verbesserte Wartbarkeit erzeugt werden kann.
 +
 +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, startet der Batchlauf und trägt sich in der Log Tabelle ein, wird für diese Session die Information dazu auch in die V$Session übertragen.
 +
 +
 +
 + 
 +
 +
 +==== Quellen ====
 +
 +Oracle:
 +  * Using DBMS_APPLICATION_INFO => http://docs.oracle.com/database/121/ARPLS/d_appinf.htm#ARPLS65225
 +  * Using DBMS_SESSION          => http://docs.oracle.com/database/121/ARPLS/d_sessio.htm#ARPLS68063
 +  * SYS_CONTEXT                 => http://docs.oracle.com/cd/E11882_01/server.112/e41084/functions184.htm
"Autor: Gunther Pipperr"
prog/oracle_session_info_setzen.txt · Zuletzt geändert: 2016/01/22 16:24 von gpipperr