有没有办法从 oracle 中的 gv$session 获取有关当前会话的信息?
Is there any way to get information about current session from gv$session in oracle?
在 Oracle 的 GV$SESSION
视图中是否有任何方法可以唯一标识当前会话?
我遇到的问题是,在 Oracle RAC 配置的情况下,以下查询可能 return 多行:
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;
希望对您有所帮助。
加入 gv$session
和 v$mystat
:)
SELECT SID, SERIAL#,inst_id
FROM GV$SESSION
WHERE sid=(select sid from v$mystat where rownum=1);
使用V$SESSION
代替GV$SESSION
SELECT SID, SERIAL#
FROM V$SESSION
WHERE SID = Sys_Context('USERENV', 'SID');
试试这个(需要访问 v$session 和 v$sql 视图)-
select /*My Sess*/ 'My Sess Text = hello world @ '||systimestamp SID_SR_TXT from dual
union
select 'SID = '||sid||' Serial# = '||serial# SID_SR_TXT from v$session where sql_id in
(select sql_id from v$sql where sql_text like '% My Sess %');
在 Oracle 的 GV$SESSION
视图中是否有任何方法可以唯一标识当前会话?
我遇到的问题是,在 Oracle RAC 配置的情况下,以下查询可能 return 多行:
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;
希望对您有所帮助。
加入 gv$session
和 v$mystat
:)
SELECT SID, SERIAL#,inst_id
FROM GV$SESSION
WHERE sid=(select sid from v$mystat where rownum=1);
使用V$SESSION
代替GV$SESSION
SELECT SID, SERIAL#
FROM V$SESSION
WHERE SID = Sys_Context('USERENV', 'SID');
试试这个(需要访问 v$session 和 v$sql 视图)-
select /*My Sess*/ 'My Sess Text = hello world @ '||systimestamp SID_SR_TXT from dual
union
select 'SID = '||sid||' Serial# = '||serial# SID_SR_TXT from v$session where sql_id in
(select sql_id from v$sql where sql_text like '% My Sess %');