NLS_SORT と NLS_COMP の 2 つの NLS 設定を設定するために、セッションを変更する「ログオン後」トリガーを作成しました。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_CI ではなく BINARY にリセットされます。NLS_LANGUAGE 設定は、Windows レジストリから取得されます。
oci jdbc ドライバーはこれらのクエリを実行して、クライアントの NLS 設定をデータベース サーバーと同期しますか?
alter session set NLS_LANGUAGE クエリの実行を回避するように jdbc oci ドライバーを構成できますか?
2 番目の質問をする理由は、アプリケーション サーバー (glassfish、tomcat、jboss など) マシン (OCI クライアントがインストールされている) の設定がデータベース サーバーの設定を上書きするのは意味がないからです。