:: Visual Foxpro, Foxpro for DOS
Re: Строка подсоединения к Oracle
AdamAry
Автор

Сообщений: 843
Дата регистрации: 14.12.2015
Igor Korolyov
Все переменные среды (включая и PATH) можно посмотреть в консоли по команде set.
ORACLE_HOME нужен некоторым утилитам, но тому же ODBC драйверу или ADO.NET провайдеру или той же утилите sqlplus эта переменная не нужна - хватает наличия пути до dll в PATH.
Ещё может быть очень полезной для instant клиентов переменная NLS_LANG - задающая и региональные настройки и, что более важно, кодировку с которой будет работать клиент. При том для фокса предпочтительнее выставлять значение AMERICAN_AMERICA.CL8MSWIN1251 - в "английской" локали изначально "правильная" десятичная точка стоит, а в русской - убогая запятая, которая приводит к проблемам с дробными числами.
1.
Цитата:
в консоли по команде set.
Это она выведет все системные переменные уиндоуз, не так ли?

2.
Цитата:
ORACLE_HOME нужен некоторым утилитам, но тому же ODBC драйверу или ADO.NET провайдеру или той же утилите sqlplus эта переменная не нужна - хватает наличия пути до dll в PATH.
Не знал. Т.е. хватает только пути до bin, где располагается dll в PATH:
d:\app\UserName\virtual\product\12.2.0\dbhome_1\bin
не так ли?

3.
Цитата:
"При том для фокса предпочтительнее выставлять значение AMERICAN_AMERICA.CL8MSWIN1251 - в "английской" локали изначально "правильная" десятичная точка стоит, а в русской - убогая запятая, которая приводит к проблемам с дробными числами."
Спасибо. Буду использовать только NLS_LANG = AMERICAN_AMERICA.CL8MSWIN1251, хотя почему то все предлагают RUSSIAN_CIS.CL8MSWIN1251.
Эту NLS_LANG вручную править в [HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDB12Home1] ?
(HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\ORACLE\) для 32 битных типа фокса, или что?

4. А как насчёт NLS_LANG = AMERICAN_AMERICA.WE8MSWIN1252, которая у меня поставлена самим ораклом по умолчанию с самого начала?

5. А как вывести в переменную фокса, например, системные переменные уиндоуз PATHEXT или ORACLE_HOME или PATH или NLS_LANG, каким образом?
Т.е. как поцепиться к переменным ОС?

6. Как проверить который из instantclientov использует в данный момент драйвер ODBC?



Исправлено 11 раз(а). Последнее : AdamAry, 22.06.17 15:29
Ratings: 0 negative/0 positive
Re: Строка подсоединения к Oracle
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
AdamAry
Это она выведет все системные переменные уиндоуз, не так ли?
Да.
AdamAry
хватает только пути до bin, где располагается dll в PATH:
Да.
AdamAry
хотя почему то все предлагают RUSSIAN_CIS.CL8MSWIN1251
Начнём с того что территория CIS (СНГ по русски) уже не должна использоваться в оракловской локализации - она помечена как устаревшая (DEPRECATED) ещё в 10-й версии. Вместо неё введена территория RUSSIA. Но т.к. МАССА софта даже сегодня ещё работает на старых версиях оракла, использовать RUSSIA так же чревато - 9-я версия сервера не знала ещё про такую территорию. Но не это основная проблема. Вопрос в том что перевод дат, денежных сумм, просто числовых значений в "красивый текст" обычно возлагается на прикладной софт, а не на сам сервер. И потому особой разницы в том как будет "переводится в строку" то или иное НЕстроковое значение нет. А вот проблемы - в частности с десятичной запятой которая должна быть точкой в dbf-ах - есть. Именно поэтому я бы рекомендовал не использовать "русскую локализацию" оракловского клиента для работы прикладного софта. Вместе с тем даже используя английскую локализацию, во всех тех местах где МОЖНО задать явно параметры отвечающие за конвертацию между строкой и датой/числом стоит эти параметры использовать. Т.е. вместо "голых" TO_DATE('01.02.2017') или TO_NUMBER('123.456') нужно использовать TO_DATE('01.02.2017', 'DD.MM.YYYY'), TO_NUMBER('123.456', '999D999', 'NLS_NUMERIC_CHARACTERS=''.,''')

AdamAry
Эту NLS_LANG вручную править в [HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDB12Home1] ?
(HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\ORACLE\) для 32 битных типа фокса, или что?
Можно в реестре поправить. Можно в переменной окружения (создать одноимённую). Переменная окружения имеет приоритет перед записью в реестре, и она, естественно, действует на все установленные клиенты, тогда как запись в реестре - только на один указанный.
AdamAry
4. А как насчёт NLS_LANG = AMERICAN_AMERICA.WE8MSWIN1252, которая у меня поставлена самим ораклом по умолчанию с самого начала?
При такой настройке будут искажаться русские буквы. Сервер будет думать что у тебя западноевропейская кодировка на клиенте используется и соответствующим образом конвертировать строковые данные - даже если сам он их и хранит в unicode (к кодировке сервера эта настройка не имеет отношения) - будут работать умляуты и прочее, но не кириллица.


------------------
WBR, Igor
Ratings: 0 negative/1 positive
Re: Строка подсоединения к Oracle
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
AdamAry
5. А как вывести в переменную фокса, например, системные переменные
GETENV()
AdamAry
6. Как проверить который из instantclientov использует в данный момент драйвер ODBC?
Например в ProcessExplorer посмотреть какие именно dll-ки загружены в соответствующий процесс.


------------------
WBR, Igor
Ratings: 0 negative/1 positive
Re: Строка подсоединения к Oracle
AdamAry
Автор

Сообщений: 843
Дата регистрации: 14.12.2015
1.
Цитата:
Эту NLS_LANG вручную править в [HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDB12Home1] ?
(HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\ORACLE\) для 32 битных типа фокса, или что?
Можно в реестре поправить. Можно в переменной окружения (создать одноимённую). Переменная окружения имеет приоритет перед записью в реестре, и она, естественно, действует на все установленные клиенты, тогда как запись в реестре - только на один указанный.
Я загнал AMERICAN_AMERICA.CL8MSWIN1251 в
переменную ос уиндоуз в NLS_LANG, которую создал в "Переменные среды"
Она будет доминировать над реестром, не так ли?

2.
Цитата:
Как проверить который из instantclientov использует в данный момент драйвер ODBC?
Например в ProcessExplorer посмотреть какие именно dll-ки загружены в соответствующий процесс.
Что то не нашёл:
[attachment 27879 ProcessExplorerOracle.GIF]
Может не там посмотрел?

3.
Цитата:
А как вывести в переменную фокса, например, системные переменные
GETENV()
OK



Исправлено 5 раз(а). Последнее : AdamAry, 23.06.17 09:37
Ratings: 0 negative/0 positive
Re: Строка подсоединения к Oracle
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
AdamAry
Я загнал AMERICAN_AMERICA.CL8MSWIN1251 в переменную ос уиндоуз в NLS_LANG, которую создал в "Переменные среды"
Она будет доминировать над реестром, не так ли?
Да.
AdamAry
Что то не нашёл:...Может не там посмотрел?
Список модулей каждого процесса выводится в нижнюю панель - там есть 2 режима, хендлы и модули (dll-ки). Модули выводятся по Ctrl+D, или через меню, или кнопками на тулбаре.
[attachment 27883 ora_dll.png]


------------------
WBR, Igor
Ratings: 0 negative/1 positive
Re: Строка подсоединения к Oracle
spinz

Сообщений: 5263
Дата регистрации: 21.01.2016
Он вроде в таскманагере смотрел, а не в PE))
Ratings: 0 negative/0 positive
Re: Строка подсоединения к Oracle
AdamAry
Автор

Сообщений: 843
Дата регистрации: 14.12.2015
А такой способ правилен для настройки instantclient или нет?:
www.delphinotes.ru

Имеется в виду это правильно или нет?:
Цитата:
Настройка файла tnsnames.ora (не обязательно)
Создаём обычный текстовый файл под названием tnsnames.ora и сохраняем в каталог, на который ссылается переменная TNS_ADMIN. У нас этот файл будет содержать всего одну строку:

orcl = //oracle/orcl
У меня приведён вариант с использованием упрощённого синтаксиса:

<alias> = //<host>[:port]/<sid>
где alias – это имя, которое могут использовать приложения для подключения к БД (помните мы выбирали параметр Network Alias в предыдущей заметке, когда настраивали подключение к БД в Oracle SQL Developer?), host – IP-адрес сервера, я указал слово oracle, т.к. именно его мы прописали в файле hosts (а если не прописали, то здесь можно указать IP-адрес 192.168.56.101 явно), port – необязательный параметр, если не указать, то будет использован порт по-умолчанию 1521, sid – имя экземпляра БД, в нашем случае это orcl.

Более подробно об этом файле и как его конфигурировать – здесь.



Исправлено 1 раз(а). Последнее : AdamAry, 27.06.17 11:32
Ratings: 0 negative/0 positive
Re: Строка подсоединения к Oracle
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Нет не правильно.
tnsnames.ora настраивается согласно этой документации.
EZConnect придуман специально чтобы НЕ использовать tnsnames. И такого рода строка в tnsnames просто является ошибочной строкой - в лучшем случае проигнорируется, в худшем приведёт к неработоспособности локального разрешения "имён сервисов" - если там помимо этой будут и "правильные" строки.


------------------
WBR, Igor
Ratings: 0 negative/1 positive
Re: Строка подсоединения к Oracle
shumik73

Сообщений: 515
Откуда: Алматы
Дата регистрации: 10.05.2006
Если затрудняешься с написанием строки подключения к различным базам данных
рекомендую посетить это сайт www.connectionstrings.com
Ratings: 0 negative/1 positive
Re: Строка подсоединения к Oracle
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
К сожалению там очень неполная, и зачастую даже явно ошибочная информация приведена...
Для написания правильной строки подключения следует прежде всего читать документацию к используемому ODBC драйверу (ну или OLEDB/ADONET провайдеру). При том именно той версии которая используется, т.к. поддержка разных фич, да и собственно список параметров строки подключения меняются от версии к версии.


------------------
WBR, Igor
Ratings: 0 negative/1 positive
Re: Строка подсоединения к Oracle
AdamAry
Автор

Сообщений: 843
Дата регистрации: 14.12.2015
Почему то такой вариант не работает?:
ln1 = SQLSTRINGCONNECT("Driver=Oracle in instantclient_12_1;uid=имя;pwd=пароль;DBQ=192.168.131.125:1521/orcl")

при том что вот такой вариант работает:
ln1 = SQLSTRINGCONNECT("Driver=Oracle in instantclient_12_1;uid=имя;pwd=пароль;DBQ=orcl")



Исправлено 1 раз(а). Последнее : AdamAry, 07.07.17 10:47
Ratings: 0 negative/0 positive
Re: Строка подсоединения к Oracle
Mitjay

Сообщений: 387
Откуда: Саратов
Дата регистрации: 01.01.2005
Потому что неправильно написана строка подключения...
Ratings: 0 negative/1 positive
Re: Строка подсоединения к Oracle
AdamAry
Автор

Сообщений: 843
Дата регистрации: 14.12.2015
Mitjay
Потому что неправильно написана строка подключения...
Т.е. если я правильно понимаю, то в SQLSTRINGCONNECT вообще нельзя использовать IP адрес:
192.168.131.125:1521
не так ли или всё таки можно?



Исправлено 2 раз(а). Последнее : AdamAry, 07.07.17 10:52
Ratings: 0 negative/0 positive
Re: Строка подсоединения к Oracle
Mitjay

Сообщений: 387
Откуда: Саратов
Дата регистрации: 01.01.2005
Можно, если прочитать в оракловой доке про синтаксис файла tnsnames
Ratings: 0 negative/1 positive
Re: Строка подсоединения к Oracle
AdamAry
Автор

Сообщений: 843
Дата регистрации: 14.12.2015
Mitjay
Можно, если прочитать в оракловой доке про синтаксис файла tnsnames
Да там всё по английски. Или я плохо понимаю, или они так недоходчиво объясняют, не знаю.
Но факт, что я не смог для SQLSTRINGCONNECT приспособить использование IP адреса типа 192.168.131.125:1521.
Может кто подскажет как?
Ratings: 0 negative/0 positive
Re: Строка подсоединения к Oracle
ssa

Сообщений: 13008
Откуда: Москва
Дата регистрации: 23.03.2005
AdamAry
Т.е. если я правильно понимаю, то в SQLSTRINGCONNECT вообще нельзя использовать IP адрес:
Как обычно, неправильно.

------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/1 positive
Re: Строка подсоединения к Oracle
AdamAry
Автор

Сообщений: 843
Дата регистрации: 14.12.2015
ssa
Т.е. если я правильно понимаю, то в SQLSTRINGCONNECT вообще нельзя использовать IP адрес:
Как обычно, неправильно.
То что правильно в студию!
Ratings: 0 negative/0 positive
Re: Строка подсоединения к Oracle
ssa

Сообщений: 13008
Откуда: Москва
Дата регистрации: 23.03.2005
AdamAry
ssa
Т.е. если я правильно понимаю, то в SQLSTRINGCONNECT вообще нельзя использовать IP адрес:
Как обычно, неправильно.
То что правильно в студию!
А нос вареньем не намазать? У нас нет ВАШИХ компьютеров с ВАШИМИ оракловыми клиентами и ВАШИХ оракловых серверов.

------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/1 positive
Re: Строка подсоединения к Oracle
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
AdamAry
Почему то такой вариант не работает?
Потому что в настройках оракловского клиента не включена поддержка метода указания сервисов ezconnect.

Mitjay
Можно, если прочитать в оракловой доке про синтаксис файла tnsnames
На самом деле в sqlnet.ora включается поддержка ezconnect.


------------------
WBR, Igor




Исправлено 1 раз(а). Последнее : Igor Korolyov, 07.07.17 12:01
Ratings: 0 negative/1 positive
Re: Строка подсоединения к Oracle
AdamAry
Автор

Сообщений: 843
Дата регистрации: 14.12.2015
Igor Korolyov
Почему то такой вариант не работает?:
ln1 = SQLSTRINGCONNECT("Driver=Oracle in instantclient_12_1;uid=имя;pwd=пароль;DBQ=192.168.131.125:1521/orcl")
Потому что в настройках оракловского клиента не включена поддержка метода указания сервисов ezconnect.

Вот в настройках оракловского клиент sqlnet.ora:
SQLNET.AUTHENTICATION_SERVICES= (NTS)
NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)

Вот tnsnames.ora:
LISTENER_ORCL =
(ADDRESS = (PROTOCOL = TCP)(HOST = mycompname.AA.BB.RU)(PORT = 1521))
ORACLR_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
(CONNECT_DATA =
(SID = CLRExtProc)
(PRESENTATION = RO)
)
)
ORCL70 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = mycompname.AA.BB.RU)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl.AA.BB.RU)
)
)

Что здесь не так?



Исправлено 2 раз(а). Последнее : AdamAry, 07.07.17 12:58
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 20 (Гостей: 20)

© 2000-2024 Fox Club 
Яндекс.Метрика