3

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 レジストリから取得されます。

  1. oci jdbc ドライバーはこれらのクエリを実行して、クライアントの NLS 設定をデータベース サーバーと同期しますか?

  2. alter session set NLS_LANGUAGE クエリの実行を回避するように jdbc oci ドライバーを構成できますか?

2 番目の質問をする理由は、アプリケーション サーバー (glassfish、tomcat、jboss など) マシン (OCI クライアントがインストールされている) の設定がデータベース サーバーの設定を上書きするのは意味がないからです。

4

2 に答える 2

3

これらの値を設定するためにログオン時にトリガーを導入した後、まったく同じ問題に取り組んできました。

  1. 「NLS_LANGUAGE および NLS_TERRITORY 設定の目的は、データベースにロケール情報を知らせることです。これらは、クライアントの NLS_LANG 設定から派生します (ただし、変更することもできます)。これらの設定により、データベースはクライアントにデータを送り返すことができます。期待されるフォーマットと言語。」-ここから撮影
  2. いいえ、その実行を回避するように構成することはできませんが、将来の機能になる可能性があります。現状では、ログイン後にアプリケーションでこれらのパラメーターを常に変更することが唯一の解決策のようです。

OCI ドライバーではなくシン コネクタを使用していて、ログオン時のトリガーを設定している場合、これらの値はログオン後に適切に設定されることを知っておくと役立つ場合があります。ここでの問題は、ログオン トリガーが実行された後にのみ、NLS_LANG に従ってこれらの値を設定する OCI ドライバーにあります。

于 2011-11-14T12:23:49.873 に答える