问题描述
实际上 (一个节点RAC) 我可以用AUDSID = “sys_context('USERENV','SESSIONID')” 标识v_ $ 会话中的会话。
我们正在切换到多个节点RAC,我必须使用gv_$ SESSION和DBMS_SESSION.UNIQUE_SESSION_ID来获得所有节点之间的唯一id。
但是我没有找到如何加入gv_$ SESSION (从gv_$ SESSION中选择 * 其中 ??? = unique_session_id)。
我需要它来检索会话的OS用户名,我正在使用DBMS_SESSION.UNIQUE_SESSION_ID for application lock机制。
欢迎小费。
我们正在切换到多个节点RAC,我必须使用gv_$ SESSION和DBMS_SESSION.UNIQUE_SESSION_ID来获得所有节点之间的唯一id。
但是我没有找到如何加入gv_$ SESSION (从gv_$ SESSION中选择 * 其中 ??? = unique_session_id)。
我需要它来检索会话的OS用户名,我正在使用DBMS_SESSION.UNIQUE_SESSION_ID for application lock机制。
欢迎小费。
专家解答
要跨RAC节点获取当前会话,请在inst_id上过滤gv $ 会话:
您可以从dbms_session.unique_session_id中提取这些:
但这没有正式记录!所以我不会依赖它。
select sid, serial# from gv$session
where audsid = sys_context('USERENV', 'SESSIONID')
and inst_id = sys_context('USERENV', 'INSTANCE');
SID SERIAL#
100 15,850
您可以从dbms_session.unique_session_id中提取这些:
select sid, serial#, inst_id,
to_number(substr(dbms_session.unique_session_id,1,4),'XXXXXXXXX' ) usid,
to_number(substr(dbms_session.unique_session_id,5,4),'XXXXXXXXX' ) userial,
to_number(substr(dbms_session.unique_session_id,9,4),'XXXXXXXXX' ) uinst
from gv$session
where audsid = sys_context('USERENV', 'SESSIONID')
and inst_id = sys_context('USERENV', 'INSTANCE');
SID SERIAL# INST_ID USID USERIAL UINST
100 15,850 1 100 15,850 1
但这没有正式记录!所以我不会依赖它。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




