有什么方法可以从oracle中的gv $ session获取有关当前会话的信息?

Vol*_*lov 5 oracle session oracle-rac

有什么方法可以唯一标识当前会话 GV$SESSION在Oracle中,?

我遇到的问题是,在Oracle RAC配置的情况下,以下查询可能返回多个行:

SELECT SID, SERIAL#
FROM GV$SESSION
WHERE AUDSID = Sys_Context('USERENV', 'SESSIONID')
   AND SID = Sys_Context('USERENV', 'SID');
Run Code Online (Sandbox Code Playgroud)

使用V$MYSTAT不是一种选择任一,因为V$MYSTAT可能不为当前会话访问的(例如,当统计量是禁用)。

Mar*_*bak 9

尝试这个:

SELECT SID, SERIAL#
FROM V$SESSION
WHERE AUDSID = Sys_Context('USERENV', 'SESSIONID');
Run Code Online (Sandbox Code Playgroud)

由于您对当前会话感兴趣,因此当前会话必须位于本地实例上(根据定义),因此请使用V$SESSION代替GV$SESSION。另外,您需要的是AUDSID要做的唯一地标识您的会话。

如果您有某些确实需要使用的原因GV$SESSION(无法想象为什么会这样),则可以这样做:

SELECT SID, SERIAL#
    FROM GV$SESSION
    WHERE AUDSID = Sys_Context('USERENV', 'SESSIONID')
      AND INST_ID = USERENV('Instance');
Run Code Online (Sandbox Code Playgroud)

另外,获取SID当前会话的另一种方法是:

select sid from v$mystat where rownum=1;
Run Code Online (Sandbox Code Playgroud)

希望能有所帮助。