根据您的 Oracle 版本,该功能在方法中实现
setEndToEndMetrics(自 12.1 起已弃用,取而代之的是 setClientInfo())
或setClientInfo
这里是一个使用的小例子。获取连接(通常来自连接池)后的客户端(您的服务)设置属性
action、clientId 和 module
String[] metrics = new String[OracleConnection.END_TO_END_STATE_INDEX_MAX];
metrics[OracleConnection.END_TO_END_ACTION_INDEX] = 'myAction1';
metrics[OracleConnection.END_TO_END_CLIENTID_INDEX] = 'myClient';
metrics[OracleConnection.END_TO_END_MODULE_INDEX] = 'myModule1';
con.setEndToEndMetrics(metrics, (short) 0);
并在返回连接之前重置它们。
DBA 可以通过以下查询观察V$SESSION 中的设置
select sid, client_info, module, action from v$session
因此她不仅可以将数据库会话与服务相关联,而且客户端/模块和操作的组合可以提供服务状态的更多详细信息。
需要考虑三件事:
仅当所有服务在设置值时都建立一定的纪律时才有效。在重新使用连接池中的会话时,很容易从前任服务“继承”错误设置。我建议将其作为连接池资源处理的一个方面来实现。
此外,Java 版本、JDBC 驱动程序和 Oracle Server 必须具有兼容版本,因此最好在简单的脚本中测试功能。
最后不要用于设置PL/SQL API(PL/SQL 开发人员自然会这样做)。最大的区别在于 PL/SQL API 触发到数据库的往返,而 JDBC API 则不会(值与下一个请求一起发送)。