Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Проблемы с кслиентом Oracle10  [new]
DangerX
Member

Откуда:
Сообщений: 46
Такая ситуация. Есть база Oracle 8 (Win32).

Есть Java приложение которое стоит на Linux-е. Раньше оно, используя OracleOCI JDBC драйвер от Oracle 9 клиента на Linux-тачке, работало с базой на 8-ке.

Произошла миграция на другую машину на которой теперь стоит Oracle 10. При попытке соединения с базой Oracle 8 с помощью OracleOCI JDBC драйвера от Oracle 10 клиента вылетает

ORA-12705: invalid or unknown NLS parameter value specified

Здесь про этот error пишут:

ORA-12705: invalid or unknown NLS parameter value specified
Cause: There are two possible causes: Either an attempt was made to issue an ALTER SESSION statement with an invalid NLS parameter or value; or the NLS_LANG environment variable contains an invalid language, territory, or character set.
Action: Check the syntax of the ALTER SESSION statement and the NLS parameter, correct the syntax and retry the statement, or specify correct values in the NLS_LANG environment variable. For more information about the syntax of the ALTER SESSION statement, see the >Oracle9i SQL Reference.

Раньше стоял параметр

NLS_LANG=AMERICAN_AMERICA.CL8KOI8R

и все было OK, а теперь ругается... более того, пробовал

NLS_LANG=AMERICAN_AMERICA.US7ASCII

и др. варианты, но результат тот же.

Прошу помощи, где искать, что смотреть и т.п.

ЗЫ: Инсталляция Oracle 10 недавнишняя и может быть плохо (или не до конца) сконфигурированной.
17 май 05, 11:22    [1546591]     Ответить | Цитировать Сообщить модератору
 Re: Проблемы с кслиентом Oracle10  [new]
DangerX
Member

Откуда:
Сообщений: 46
Неужели никто ничего сказать не может?!!

Тут выяснилось что проблема не только с 8-кой. При попытке соединения с Oracle 9, OracleOCI JDBC драйвером от этого же клиента возникает та же самая ситуация... Осталось ещё проверить работает ли этот драйвер на самой 10-ке, но пока такой возможности нет...
17 май 05, 14:58    [1547914]     Ответить | Цитировать Сообщить модератору
 Re: Проблемы с кслиентом Oracle10  [new]
alexey_tm
Member

Откуда: Томск
Сообщений: 173
The following Solutions are not supported as per the the 10g OCI doc, statically linked application need to be re-linked in the new environment.

OPTION # 1 (Recommended if users do not have oci libraries and will do minimal work)

In order to have OCI application that runs properly on any minor or major Oracle environment; meaning any supported version such as 9.2.0.5, 9.2.0.6, 10.1.0.3, you will need to do static-linking.

This will bundle all the libraries needed within your OCI executable. This only applies if you are using all the default client cofiguration.

In case that you are trying to customize your environment, then this is not supported and according to the documentation, you will have to relink on all minor or major releases.

In this note I will discuss one senario, which is customizing the NLS setting for your client. In other words, setting NLS_LANG for your client.

Let's take a senario that you have OCI Application that has been statically-linked with 9.2.0.6 libraries.

If you move this OCI executables to 10g environment and tried to set NLS_LANG=AMERICAN_AMERICA.UTF8, you will receive the following error

ORA-12705: INVALID OR UNKNOWN NLS PARAMETER VALUE SPECIFIED

In order to solve this problem do the following

1- statically-link with 9.2.0.x libraries
2- zip the 9.2.0.x NLS support files under the directory $920xORACLE_HOME/ocommon/nls/admin/data
3- Ship to your users the application executable as well as the 9.2.0.x NLS support zip file
4- In the installation steps, document that they will have to set an environment variable called
ORA_NLS33 to point to where they unzipped those NLS files.

This environment variable is needed even on 10g home.

For 10g, they will need to set ORA_NLS33 to point to the 9.2.0.x NLS support
files in addition to ORA_NLS10 to point to $ORACLE_HOME/nls/data

OPTION # 2 (Recommended if users do not have oci libraries and will do minimal work but you will need one executable per Oracle version)

Have 2 separate executables, one is statically-linked using 9.2.0.6 and the other one is statically-linked using 10.1.0.3 libraies and ship the suitable executable based on the user Oracle environment 10g or 9i, Request your users to set either ORA_NLS33 for 9.2 pointing at $ORACLE_HOME/ocommon/nls/admin/data
or ORA_NLS10 for 10g to point to the NLS support files at $ORACLE_HOME/nls/data

OPTION # 3 (If users have all oci libraries on their client machines)

Dynamically-link with shared libraries of certain version, for instance 9.2.0.6. Ship the executable to your users. Users with 10g database will have to relink with 10g libraries on their system. There is one problem with this solution that there are name change for some libraries between 9i and 10g. You will have to ship the libraries of the same version that you have linked your application with them, to your users.
17 май 05, 17:08    [1548793]     Ответить | Цитировать Сообщить модератору
 Re: Проблемы с кслиентом Oracle10  [new]
DangerX
Member

Откуда:
Сообщений: 46
Спасибо. Прочитал, попробую... А из какого это источника?
18 май 05, 08:15    [1549907]     Ответить | Цитировать Сообщить модератору
 Re: Проблемы с кслиентом Oracle10  [new]
DangerX
Member

Откуда:
Сообщений: 46
Проблема так и не решилась. То о чем писал alexey_tm относится к программам испольующим Oracle OCI напрямую написанными и скомпилироваными под linux-ом. А вот перелинковать оракловские библиотеки которые использует драйвер JDBC - думаю не получится... Сейчас выяснилось что проблема именно при соединении этим клиентом с более старыми версиями, т.к. при соединении с самой 10-кой все нормально...

Будут какие-нибудь ещё предложения?
19 май 05, 08:54    [1553687]     Ответить | Цитировать Сообщить модератору
 Re: Проблемы с кслиентом Oracle10  [new]
ImmortAlex
Member

Откуда:
Сообщений: 4
Фишка в том, что при коннекции драйвер сразу говорит ALTER SESSION , сменяя настройки NLS. При этом он берет Locale.getDefault(), собака. У него внутри таблица соответсвия локалей явы и параметров для ALTER SESSION.
Так вот, для локали RU в 8-ке и 9-ке NLS_TERRITORY была равна "CIS", а для 10-ки наконец-то стала RUSSIA.
И драйвер от 10-ки говорит серверу 9-ки
ALTER SESSION SET NLS_TERRITORY='RUSSIA'
А тот такой страны не знает и обламывает. Драйвер коннекцию (уже взятую) не возвращает.

Я штук 20 файлов из драйвера декомпилировал, пока искал ответ. А ответ такой:

oracle.i18n.text.OraMapTable.getInstance(1).getHashMapAttribute("ISO_A2_TERR_2_ORACLE_TERR").put("RU", "CIS");

Для возврата обратно надо, соответсвенно, вместо CIS написать RUSSIA.
Делать это можно перед каждым взятием коннекции.
8 июн 05, 11:24    [1605499]     Ответить | Цитировать Сообщить модератору
 Re: Проблемы с кслиентом Oracle10  [new]
DangerX
Member

Откуда:
Сообщений: 46
Спасибо за подсказку. Проблема решилась. А разработчикам драйверов Oracle надо бы поотрывать кое-что :)
8 июн 05, 15:24    [1606603]     Ответить | Цитировать Сообщить модератору
 Re: Проблемы с кслиентом Oracle10  [new]
DangerX
Member

Откуда:
Сообщений: 46
(для потомков, на всякий случай :)
Не обязательно декомпилировать и перекомпилировть драйвера oracle.

Достаточно изменить настройки окружения таким образом, чтобы

Locale.getDefault()

Возвращала тлокаль отличную от RU.

Я этого добился изменив переменные окружения

было

LC_ALL=ru_RU.KOI8-r
LANG=ru_RU.KOI8-r

стало

#LC_ALL=ru_RU.KOI8-r
LANG=_US.KOI8-r
9 июн 05, 11:04    [1608668]     Ответить | Цитировать Сообщить модератору
 Re: Проблемы с кслиентом Oracle10  [new]
ImmortAlex
Member

Откуда:
Сообщений: 4
Я не перекомпилировал, только декомпилировал. Просто сорцов-то нету, а понять, в чем причина, иначе никак не получилось.
Да, можно поменять и локаль, чтоб не RU использовалось. Я вообще не понимаю, зачем он сразу ALTER SESSION делает без ведома пользователя да еще и со спорной локалью (кто сказал, что мне надо дефолтную).
9 июн 05, 11:28    [1608795]     Ответить | Цитировать Сообщить модератору
 Re: Проблемы с кслиентом Oracle10  [new]
no13
Member

Откуда: Харьков
Сообщений: 62
ImmortAlex
Фишка в том, что при коннекции драйвер сразу говорит ALTER SESSION , сменяя настройки NLS. При этом он берет Locale.getDefault(), собака. ...
Может написать им что-то типа баг-репорта?
9 июн 05, 14:51    [1609941]     Ответить | Цитировать Сообщить модератору
 Re: Проблемы с кслиентом Oracle10  [new]
no13
Member

Откуда: Харьков
Сообщений: 62
ImmortAlex
Фишка в том, ...

Кстати я тут попробывал: описаный трюк работает только с thin-драйвером, oci упорно рисует 12705. Наверное надо играться с переменными окружения или реестром.
14 июн 05, 19:35    [1620338]     Ответить | Цитировать Сообщить модератору
 Re: Проблемы с кслиентом Oracle10  [new]
ImmortAlex
Member

Откуда:
Сообщений: 4
Я oci не декомпилировал, слава богу, thin хватило. Самое простое, действительно, Locale.setDefault(Locale.ENGLISH) сделать, только вот не всегда приемлемо...
14 июн 05, 20:17    [1620409]     Ответить | Цитировать Сообщить модератору
 Re: Проблемы с кслиентом Oracle10  [new]
no13
Member

Откуда: Харьков
Сообщений: 62
ImmortAlex
Я oci не декомпилировал, слава богу, thin хватило. Самое простое, действительно, Locale.setDefault(Locale.ENGLISH) сделать, только вот не всегда приемлемо...
Для oci помогает NLS_LANG=RUSSIAN_CIS....
15 июн 05, 15:38    [1622199]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Проблемы с кслиентом Oracle10  [new]
Dionisiy
Member

Откуда:
Сообщений: 1
Вы будете удивлены, Господа, но проблема та же самая, когда коннект идет на Oracle 10 Express. Спасает лишь смена дефолтовой локали на сервере (на моей машине - это русская). Похоже даже Oracle 10 не знает про такую страну как Russia... На счет Oracle 10 Standard/Enterprise ничего сказать не могу - не пробовал.
8 ноя 06, 17:32    [3370866]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Проблемы с кслиентом Oracle10  [new]
Се ля ви
Member

Откуда: Москва
Сообщений: 2
ImmortAlex
oracle.i18n.text.OraMapTable.getInstance(1).getHashMapAttribute("ISO_A2_TERR_2_ORACLE_TERR").put("RU", "CIS");


Сранно - а какой у вас драйвер? Я качаю с сайта Oracle последнюю версию - http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/htdocs/jdbc_10201.html . В этом драйвере нет пакетов "oracle.i18n....".
16 ноя 07, 16:21    [4927119]     Ответить | Цитировать Сообщить модератору
 Re: Проблемы с кслиентом Oracle10  [new]
ImmortAlex
Member

Откуда:
Сообщений: 4
В момент описания решения был 10.1.0.4.
Сейчас 10.1.0.5 - и в нем нет такого пакета и нет такой проблемы! По крайней мере у меня.
19 ноя 07, 07:03    [4931537]     Ответить | Цитировать Сообщить модератору
 Re: Проблемы с кслиентом Oracle10  [new]
xerror
Member

Откуда:
Сообщений: 1
Господа!

А вот такая ситуация:
=========
БД - XE 10.2.0
=========
Свежие дрова
в MANIFEST.INF

Manifest-Version: 1.0
Specification-Title: Oracle JDBC driver classes for use with JDK14
Created-By: 1.4.2_14 (Sun Microsystems Inc.)
Implementation-Title: ojdbc14_g.jar
Specification-Vendor: Oracle Corporation
Specification-Version: Oracle JDBC Driver version - "10.2.0.4.0"
Implementation-Version: Oracle JDBC Driver version - "10.2.0.4.0"
Implementation-Vendor: Oracle Corporation
Implementation-Time: Sat Feb 2 11:53:00 2008


=========
Однако в русской локали не пукает, говорит все то же : ... ORA-12705: Cannot access NLS ...

Включил трассировку, получил следующее:
FINE: DBConversion.StringToCharBytes(ALTER SESSION SET TIME_ZONE='+4:00' NLS_LANGUAGE='RUSSIAN' NLS_TERRITORY='CIS' )

=========
Сдекомпили CharacterSetMetaData.class и нашел там такую хрень:
... territory.put("RU", "CIS"); ... territory.put("ru", "CIS"); ...

С предыдущими таже муйня!
Как это понимать? Разработчики дров просто поглумились? Пропатчили а потом откатили ради смеха?
Или может я что то не то вытянул?

Есть у кого предположения? Может я туплю?
12 апр 08, 03:29    [5537700]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить