jdbc是否提供读取给定连接的数据库进程ID /会话ID的方法?

问题描述:

我正在尝试使用liquibase进行数据库更改(我们使用的是oracle),并且我们的DBA提出的要求之一是记录jdbc连接的ospid和db会话标识,以便在需要时可以手动终止它。我查看了java.sql.Connection接口,它似乎没有可用于从jdbc连接中检索这些值的选项。我错过了什么 ?如果有人能指出一种方法来做到这一点,我将非常感激。在此先感谢jdbc是否提供读取给定连接的数据库进程ID /会话ID的方法?

你可以通过查询SID和当前会话的操作系统进程ID:

SELECT s.sid, p.spid 
FROM v$session s 
JOIN v$process p ON p.addr = s.paddr 
WHERE sid=sys_context('USERENV','SID') ; 

您DBA必须授予您访问V $ SESSION和V $ PROCESS。

但是,我不太了解这个要求。如果会话导致问题,DBA是第一个知道通过Oracle企业管理器进行的。

按我的理解 如果执行从JDBC连接下面的查询,它会给你的信息,你需要

SELECT s.sid, s.serial#, p.spid, s.osuser, s.program FROM v$session s, v$process p WHERE p.addr = s.paddr and s.sid in (select distinct sid from v$mystat) 
+0

谢谢。我知道甲骨文有这个信息,我可以通过查询提供的信息,我可以访问上面的意见。我想知道的是,如果有一种方法可以从jdbc/driver端获取。这可能是因为我的要求是针对oracle的,并且数据库服务器上的连接进程ID的常见定义不存在 –

没有什么的JDBC API本身在得到这个信息。您将需要使用驱动程序特定的扩展或查询信息,如其他答案所示。