6

この記事で、ORACLE 10g以降、を使用して、クレイジーなSQL関数を必要とせずに、特定の接続セッションで文字列の大文字と小文字を区別しないようにする方法があることがわかりましたALTER SESSION

ALTER SESSION11gで、すべての新しい接続セッションに対してデフォルトでデータベースを常にこのモードで動作させ、接続するたびにsを実行する必要をなくす方法があるかどうかを誰かが知っていますか?

または、接続文字列に指定して同じものをオンにする追加のパラメータはありますか?

4

4 に答える 4

7

句を使用して、記事に記載されているパラメータをOracle initファイルの値としてNLS_SORT設定するだけです。NLS_COMPalter system set <parameter> = <value>;

alter system コマンドの使用に関する情報は、ここにあります。

これは、パラメーターの正しい使用法に関する適切なリンクです。NLS_*NLS_SORT パラメータの設定によっては、パフォーマンスの問題が発生する可能性があることに注意してください。つまり、BINARY に設定されていない場合です。Oracle ドキュメントの状態:

NLS_SORT を BINARY 以外に設定すると、オプティマイザが選択したパスに関係なく、ソートで全表スキャンが使用されます。BINARY は例外です。インデックスはキーのバイナリ順に従って構築されるためです。したがって、NLS_SORT が BINARY に設定されている場合、オプティマイザはインデックスを使用して ORDER BY 句を満たすことができます。NLS_SORT が言語ソートに設定されている場合、オプティマイザは実行計画に全表スキャンと全ソートを含める必要があります。

于 2010-01-04T18:23:42.213 に答える
5

できますよ!

親しみやすい DBA にこれらのパラメーターを設定してもらいます。

ALTER SYSTEM SET NLS_COMP=LINGUISTIC SCOPE=SPFILE; 

ALTER SYSTEM SET NLS_SORT=BINARY_AI SCOPE=SPFILE; 

これは、 How to make Oracle Case Insensitiveに関する私の短い記事から引用したものです。

于 2010-02-03T18:46:58.190 に答える
3

logon triggerを使用してこれらのコマンドを発行し、大文字と小文字を区別しないクエリを取得しようとしました。

execute immediate 'alter session set NLS_SORT=BINARY_CI';
execute immediate 'alter session set NLS_COMP=LINGUISTIC';

それによって CI が得られましたが、信じられないほど悪いパフォーマンスの問題も発生しました。特に、これらの設定がない場合、挿入に 2 ミリ秒かかるテーブルが 1 つあります。これらの設定では、挿入に 3秒かかりました。トリガーを複数回作成してドロップすることで、これを確認しました。

トリガーを使用したセッションレベルとは対照的に、システムレベルでそれを行うことが違いを生むかどうかはわかりません。

于 2011-07-11T13:26:06.787 に答える
0

11g r2 の挿入と nls で同じパフォーマンスの問題が見つかりました! 幸いなことに、パフォーマンスへの影響は、アプリの変更を必要とするほど重大ではありませんでした.

INSERT で binary_ci なしで実行できる場合は、挿入の直前とその後でセッションを変更するので、トリガーを削除する必要はありません。

于 2013-08-09T06:03:57.120 に答える