我们创建了一个“登录后”触发器来更改会话,以设置两个 NLS 设置 - NLS_SORT 和 NLS_COMP。NLS_SORT 需要设置为 BINARY_CI,NLS_COMP 需要设置为 LINGUISTIC。通过在建立连接后查询 V$NLS_PARAMETERS 视图来验证值,我看到 NLS_COMP 参数得到了更新,但 NLS_SORT 没有。
经过更多研究后,我意识到 OCI JDBC 驱动程序在建立连接后执行以下查询
ALTER SESSION SET NLS_LANGUAGE='AMERICAN' NLS_TERRITORY='AMERICA'
由于 NLS_SORT 从 NLS_LANGUAGE 派生其值,因此 NLS_SORT 参数值重置为 BINARY 而不是 BINARY_CI。NLS_LANGUAGE 设置取自 Windows 注册表。
oci jdbc 驱动程序是否执行这些查询以将客户端上的 NLS 设置与数据库服务器同步?
可以配置 jdbc oci 驱动程序以避免执行 alter session set NLS_LANGUAGE 查询吗?
我问第二个问题的原因是应用服务器(例如 glassfish、tomcat、jboss)机器(安装了 OCI 客户端)设置覆盖数据库服务器设置是没有意义的。