获取不同数据库连接的上下文详细信息的任何方法
Posted
技术标签:
【中文标题】获取不同数据库连接的上下文详细信息的任何方法【英文标题】:Any way to get context detail of different db connection 【发布时间】:2014-02-21 22:43:37 【问题描述】:我们有应用程序 ID(假设为 APP_ID)来连接数据库并使用 dbms_session.set_context() 为 VPD 设置实际登录用户(例如:user1,user2)。
对于查询中的性能问题,我们想要识别运行它的用户(user1、user2)。有没有办法通过提供 sid 来获取连接的 dbms_session.get_context()?
-
假设 DBA 可以运行它。
我想从上下文中转储实际的用户 ID 及其连接 ID (sid)
Oracle 数据库
我知道可以创建应用程序登录或 dba 跟踪或记录信息的过程...我只是想知道,有什么开箱即用的方法吗?
【问题讨论】:
【参考方案1】:如果您让 DBA 运行它,您应该能够访问 V$SESSION
view。
像这样的简单查询将为您提供所有连接的 sid 及其用户名:
select
substr(sid,1,5) sid,
substr(serial#,1,5) ser_num,
substr(machine,1,6) box,
substr(username,1,10) username,
substr(osuser,1,8) os_user,
substr(program,1,30) program
from v$session
where
and type='USER'
order by username;
如果您只是在寻找实际运行的查询和用户/sid,您可以运行类似answer 中所述的内容。
【讨论】:
我认为问题是要求另一个会话设置的自定义上下文值,而不仅仅是尝试查找常规会话信息。 @jonearles 这在 Oracle 中是否可行? 我不这么认为。但很难说这样的事情是否不可能。以上是关于获取不同数据库连接的上下文详细信息的任何方法的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 php pdo 中的 2 个表获取 1 个表用户详细信息?
通过加入用户详细信息实体从 IdentityDbContext 获取用户详细信息