GV$SESSION
在Oracle中,有什么方法可以唯一地标识当前会话?
我遇到的问题是,在Oracle RAC配置的情况下,以下查询可能返回多个行:
SELECT SID, SERIAL#
FROM GV$SESSION
WHERE AUDSID = Sys_Context('USERENV', 'SESSIONID')
AND SID = Sys_Context('USERENV', 'SID');
使用V$MYSTAT
不是一种选择任一,因为V$MYSTAT
可能不为当前会话访问的(例如,当统计量是禁用)。
试试这个:
SELECT SID, SERIAL#
FROM V$SESSION
WHERE AUDSID = Sys_Context('USERENV', 'SESSIONID');
由于您对当前会话感兴趣,因此当前会话必须位于本地实例上(根据定义),因此请使用V$SESSION
代替GV$SESSION
。另外,您所需AUDSID
要做的就是唯一地标识您的会话。
如果您出于某些原因确实需要使用GV$SESSION
(无法想象为什么会这样),则可以执行以下操作:
SELECT SID, SERIAL#
FROM GV$SESSION
WHERE AUDSID = Sys_Context('USERENV', 'SESSIONID')
AND INST_ID = USERENV('Instance');
另外,获取SID
当前会话的另一种方法是:
select sid from v$mystat where rownum=1;
希望能有所帮助。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句