Benutzer-Werkzeuge

Webseiten-Werkzeuge


prog:oracle_session_info_setzen

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):

--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;
/

Abfragen der gesetzten Informationen (hier die eigene Session):

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

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

Diese Website verwendet Cookies. Durch die Nutzung der Website stimmen Sie dem Speichern von Cookies auf Ihrem Computer zu. Außerdem bestätigen Sie, dass Sie unsere Datenschutzbestimmungen gelesen und verstanden haben. Wenn Sie nicht einverstanden sind, verlassen Sie die Website.Weitere Information
prog/oracle_session_info_setzen.txt · Zuletzt geändert: 2016/01/22 16:24 von gpipperr