我试图确定在Oracle 11g数据库中使用特定会话ID的应用程序。我可以使用此查询找到会话ID的服务名称
select SID, SERVICE_NAME
from v$session
where SID = <sessionID here>;
不幸的是,一些应用程序使用此服务名称来连接数据库。是否可以使用另一个表/查询来确定哪个应用程序正在使用此会话ID?
答案 0 :(得分:1)
V$SESSION
中还有其他列可能对有用有用,例如:
select username, osuser, logon_time, status, program, module, client_identifier, client_info
from gv$session
where sid = <sessionID here>;
但是,由您的应用程序来设置或覆盖最后四个值。
例如,从SQL * Plus开始的会话将程序显示为sqlplus@client_host (TNS V1-V3)
之类,并将模块显示为SQL*Plus
。 SQL Developer将两个值都显示为该名称。 JDBC连接默认都具有类似于“ JDBC瘦客户端”的名称,但是应用程序可以选择覆盖它们和/或设置client_identifier
和client_info
。 Pro * C应用程序也一样,默认情况下,程序和模块的外观都类似于exe_name@client_host (TNS V1-V3)
。
当SQL Developer使用JDBC时,它用自己的值覆盖程序和模块。 SQL * Plus将覆盖默认模块值。
因此,如果使用您感兴趣的会话ID的应用程序配置了这些值中的任何一个,您应该对它的含义有个很好的了解。如果还没有,那么您仍然可以了解有关应用程序类型的线索(例如JDBC)。 osuser
也可能有用。
有关应用程序如何设置这些值的更多信息,请参见SYS_CONTEXT
和DBMS_APPLICATION_INFO
和DBMS_SESSION
软件包。