Oracle 12c中调用setClientInfo设置自定义clientInfo遇ORA-28267错误求助
解决Oracle 12c JDBC连接setClientInfo的ORA-28267错误
Oracle JDBC驱动并不支持任意命名空间,你遇到的ORA-28267: Invalid Namspace Value错误,就是因为使用了未被驱动认可的命名空间。
合法命名空间及可用键
Oracle 12c JDBC驱动仅认可以下几个命名空间:
OCI:对应OCI驱动专属的客户端信息配置Oracle:Oracle通用客户端信息命名空间(最常用)http://xmlns.oracle.com/jdbc:标准JDBC扩展命名空间
其中Oracle命名空间下支持的常用键包括:
Oracle.CLIENT_INFO:自定义字符串,最大长度64字节Oracle.MODULE:模块名称,最大长度48字节Oracle.ACTION:动作名称,最大长度32字节
正确代码示例
如果要设置自定义客户端用户ID,推荐使用Oracle.CLIENT_INFO:
connection.setClientInfo("Oracle.CLIENT_INFO", user);
也可以通过Oracle特定的Connection扩展类调用,效果一致:
((OracleConnection) connection).setClientInfo(OracleConnection.CLIENT_INFO, user);
验证设置是否生效
可以通过Oracle系统视图查询当前会话的客户端信息:
SELECT client_info, module, action FROM v$session WHERE sid = (SELECT sid FROM v$mystat WHERE rownum = 1);
关于“任意namespace.key”的误解
所谓“支持任意键值对”的说法,实际是针对标准JDBC的Application命名空间,但Oracle JDBC驱动对该命名空间的支持非常有限,无法真正实现自定义键值对。如果需要存储多个自定义信息,可以在CLIENT_INFO字段中用分隔符(比如|)拼接多个值,后续查询时再拆分解析即可。
内容的提问来源于stack exchange,提问作者DoThe New
相关产品推荐
相关产品推荐

