ORACLE 11g без учета регистра по умолчанию - PullRequest
6 голосов
/ 04 января 2010

Я обнаружил в этой статье , что, начиная с ORACLE 10g, существует способ заставить конкретный сеанс подключения сравнивать строки без учета регистра, без использования каких-либо сумасшедших функций SQL, используя ALTER SESSION.

Кто-нибудь знает, может ли в 11g быть способ заставить базу данных всегда работать в этом режиме по умолчанию для всех новых сеансов подключения, тем самым устраняя необходимость запуска ALTER SESSION s при каждом подключении?

Или, возможно, дополнительный параметр, который вы могли бы указать в строке подключения, который бы включал то же самое?

Ответы [ 4 ]

6 голосов
/ 04 января 2010

Вы можете просто установить параметры NLS_SORT, NLS_COMP, упомянутые в статье, в качестве значений в файле инициализации Oracle, используя предложение alter system set <parameter> = <value>;.

Информацию об использовании системных команд alter можно найти здесь .

Вот хорошая ссылка о правильном использовании NLS_* параметров. Обратите внимание, что некоторые настройки параметра NLS_SORT могут / могут вызвать проблемы с производительностью, а именно, если он не установлен в BINARY. Состояние документов Oracle:

Установка NLS_SORT на что-либо другое чем BINARY заставляет сортировку использовать полное сканирование таблицы, независимо от путь, выбранный оптимизатором. BINARY является исключением, потому что индексы построен в двоичном порядке ключи. Таким образом, оптимизатор может использовать индекс для удовлетворения предложения ORDER BY когда NLS_SORT установлен в BINARY. Если NLS_SORT установлен на любую языковую сортировка, оптимизатор должен включать полное сканирование таблицы и полная сортировка в план выполнения.

5 голосов
/ 03 февраля 2010

Конечно, вы можете!

Получите ваш дружественный администратор баз данных для установки этих параметров:

ALTER SYSTEM SET NLS_COMP=LINGUISTIC SCOPE=SPFILE; 

ALTER SYSTEM SET NLS_SORT=BINARY_AI SCOPE=SPFILE; 

Это взято из моей короткой статьи о Как сделать Oracle нечувствительным к регистру

3 голосов
/ 11 июля 2011

Я пытался использовать logon trigger для выдачи этих команд для получения запросов без учета регистра:

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

И хотя это дало мне CI, это также дало мне невероятно плохие проблемы с производительностью. В частности, у нас есть одна таблица, которая без этих настроек вставляет 2 миллисекунды. С этими настройками вставки заняли 3 секунд . Я подтвердил это, создавая и удаляя триггер несколько раз.

Я не знаю, имеет ли это значение на системном уровне, в отличие от уровня сеанса с триггером.

0 голосов
/ 09 августа 2013

Я обнаружил такую ​​же проблему с производительностью вставок и nls в 11g r2! К счастью, снижение производительности оказалось недостаточно значительным и потребовало изменения приложения.

Если вы можете обойтись без binary_ci для INSERT, то я бы сделал сеанс изменения непосредственно перед вставкой и после нее, чтобы вам не пришлось сбрасывать триггер

...