Немного про сессии в Oracle

Как определить текущую сессию?

Иногда бывает нужно узнать SID текущей сессии для Oracle. Это можно сделать так:

SELECT sys_context('USERENV','SESSIONID') FROM DUAL;

или в самом скрипте:

DECLARE
  SID VARCHAR(255);
BEGIN
  SID := SYS_CONTEXT('USERENV','SESSIONID');
END;

Как определить зависшую сессию?

Определите «нашкодившую» сессию, используя представления [G]V$SESSION и [G]V$PROCESS следующим образом:

SET LINESIZE 100
COLUMN spid FORMAT A10
COLUMN username FORMAT A10
COLUMN program FORMAT A45

SELECT s.inst_id,
       s.sid,
       s.serial#,
       --s.sql_id,
       p.spid,
       s.username,
       s.program
FROM   gv$session s
       JOIN gv$process p ON p.addr = s.paddr AND p.inst_id = s.inst_id
WHERE  s.type != 'BACKGROUND';

   INST_ID        SID    SERIAL# SPID       USERNAME   PROGRAM
---------- ---------- ---------- ---------- ---------- ---------------------------------------------
         1         30         15 3859       TEST       sqlplus@oel5-11gr2.localdomaidocument.getElementById('cloakef87a81be71ca3987e5e7cdbb1c94aa5').innerHTML='';var prefix='&#109;a'+'i&#108;'+'&#116;o';var path='hr'+'ef'+'=';var addyef87a81be71ca3987e5e7cdbb1c94aa5='sqlpl&#117;s'+'&#64;';addyef87a81be71ca3987e5e7cdbb1c94aa5=addyef87a81be71ca3987e5e7cdbb1c94aa5+'&#111;&#101;l5-11gr2'+'&#46;'+'l&#111;c&#97;ld&#111;m&#97;&#105;';var addy_textef87a81be71ca3987e5e7cdbb1c94aa5='sqlpl&#117;s'+'&#64;'+'&#111;&#101;l5-11gr2'+'&#46;'+'l&#111;c&#97;ld&#111;m&#97;&#105;';document.getElementById('cloakef87a81be71ca3987e5e7cdbb1c94aa5').innerHTML+='<a '+path+'\''+prefix+':'+addyef87a81be71ca3987e5e7cdbb1c94aa5+'\'>'+addy_textef87a81be71ca3987e5e7cdbb1c94aa5+'<\/a>';n (TNS V1-V3)
         1         23        287 3834       SYS        sqlplus@oel5-11gr2.localdomaidocument.getElementById('cloaka602c2d7a7d345d1b2e6b7b399863276').innerHTML='';var prefix='&#109;a'+'i&#108;'+'&#116;o';var path='hr'+'ef'+'=';var addya602c2d7a7d345d1b2e6b7b399863276='sqlpl&#117;s'+'&#64;';addya602c2d7a7d345d1b2e6b7b399863276=addya602c2d7a7d345d1b2e6b7b399863276+'&#111;&#101;l5-11gr2'+'&#46;'+'l&#111;c&#97;ld&#111;m&#97;&#105;';var addy_texta602c2d7a7d345d1b2e6b7b399863276='sqlpl&#117;s'+'&#64;'+'&#111;&#101;l5-11gr2'+'&#46;'+'l&#111;c&#97;ld&#111;m&#97;&#105;';document.getElementById('cloaka602c2d7a7d345d1b2e6b7b399863276').innerHTML+='<a '+path+'\''+prefix+':'+addya602c2d7a7d345d1b2e6b7b399863276+'\'>'+addy_texta602c2d7a7d345d1b2e6b7b399863276+'<\/a>';n (TNS V1-V3)
         1         40        387 4663                  oracle@oel5-11gr2.localdomaidocument.getElementById('cloak0125507a321c2078b60d710eefaa2a63').innerHTML='';var prefix='&#109;a'+'i&#108;'+'&#116;o';var path='hr'+'ef'+'=';var addy0125507a321c2078b60d710eefaa2a63='&#111;r&#97;cl&#101;'+'&#64;';addy0125507a321c2078b60d710eefaa2a63=addy0125507a321c2078b60d710eefaa2a63+'&#111;&#101;l5-11gr2'+'&#46;'+'l&#111;c&#97;ld&#111;m&#97;&#105;';var addy_text0125507a321c2078b60d710eefaa2a63='&#111;r&#97;cl&#101;'+'&#64;'+'&#111;&#101;l5-11gr2'+'&#46;'+'l&#111;c&#97;ld&#111;m&#97;&#105;';document.getElementById('cloak0125507a321c2078b60d710eefaa2a63').innerHTML+='<a '+path+'\''+prefix+':'+addy0125507a321c2078b60d710eefaa2a63+'\'>'+addy_text0125507a321c2078b60d710eefaa2a63+'<\/a>';n (J000)
         1         38        125 4665                  oracle@oel5-11gr2.localdomaidocument.getElementById('cloak1428d57316d0881f1d997e5f3de05dca').innerHTML='';var prefix='&#109;a'+'i&#108;'+'&#116;o';var path='hr'+'ef'+'=';var addy1428d57316d0881f1d997e5f3de05dca='&#111;r&#97;cl&#101;'+'&#64;';addy1428d57316d0881f1d997e5f3de05dca=addy1428d57316d0881f1d997e5f3de05dca+'&#111;&#101;l5-11gr2'+'&#46;'+'l&#111;c&#97;ld&#111;m&#97;&#105;';var addy_text1428d57316d0881f1d997e5f3de05dca='&#111;r&#97;cl&#101;'+'&#64;'+'&#111;&#101;l5-11gr2'+'&#46;'+'l&#111;c&#97;ld&#111;m&#97;&#105;';document.getElementById('cloak1428d57316d0881f1d997e5f3de05dca').innerHTML+='<a '+path+'\''+prefix+':'+addy1428d57316d0881f1d997e5f3de05dca+'\'>'+addy_text1428d57316d0881f1d997e5f3de05dca+'<\/a>';n (J001)

SQL>

Ещё магические команды для нахождения заблокировавшихся/зависших/взаимно заблокировавшихся запросов/сессий/транзакций в Oracle:

SELECT machine, l.name, s.SQL_ID, a.sql_text, s.*, l.*, a.*
  FROM v$session s, dba_dml_locks l, v$sqlarea a
 WHERE s.sid = l.session_id
   AND s.SQL_ID = a.SQL_ID;

А с помощью этого запроса можно узнать фактические параметры зависшего параметризованного запроса:

SELECT sql_id,
       t.sql_text     sql_text,
       b.name         bind_name,
       b.value_string bind_value
  FROM v$sql t
  JOIN v$sql_bind_capture b
 USING (sql_id)
 WHERE b.value_string is not null
   AND sql_id = '4jav9xagtavb2';

sql_id — Можно взять в запросе выше, расскоментировав строку `—s.sql_id,`.

4680login-checkНемного про сессии в Oracle

Добавить комментарий