|
|
|
Гетерогенный сервис с MSSQL
|
|||
|---|---|---|---|
|
#18+
Уважаемые коллеги прошу помощи! Настраиваю тут вторую неделю (уже как) гетерогенный сервис к БД MSSQL... Были разные косяки и проблемы, но в основном все победил. Тестировал настроенный unixODBC через tsql и isql, connect проходит успешно, удаленная БД отдает данные. Далее настраиваю гетерогенный сервис, листнер, tnsnames. проверяю tnsping. Вроде бы все хорошо (хотя пингует сам себя). Создаю DB Link, успешно. А вот далее начинаются непонятные грабли. А именно при попытке сформировать SQL запрос в удаленную БД получаю такую ошибку: ORA-28500: соединение ORACLE с посторонней системой выдало сообщение: [unixODBC][FreeTDS][SQL Server]Cannot open server "MSSQL" requested by the login. The login failed. {42000,NativeErr = 40532}[unixODBC][FreeTDS][SQL Server]Unable to connect to data source {08001} ORA-02063: предшествующий 2 lines из DBL 28500. 00000 - "connection from ORACLE to a non-Oracle system returned this message:" *Cause: The cause is explained in the forwarded message. *Action: See the non-Oracle system's documentation of the forwarded message. Error at Line: 1 Column: 23 Пароль проверял, все корректно, единственное в пароле есть символ "*" и поэтому весь пароль приходится брать в кавычки при создании DB Link... P.S. DB Link создается с любым паролем, пробовал, проверка видимо происходит на уровне запроса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2017, 22:58 |
|
||
|
Гетерогенный сервис с MSSQL
|
|||
|---|---|---|---|
|
#18+
Проблема, возможно, в настройках, не в пароле. Давайте listener, tnsnames, конфигурацию HS. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2017, 07:19 |
|
||
|
Гетерогенный сервис с MSSQL
|
|||
|---|---|---|---|
|
#18+
Чтобы отсечь * - создайте dblink с пользователем MS SQL у которого простой пароль - например 123 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2017, 08:00 |
|
||
|
Гетерогенный сервис с MSSQL
|
|||
|---|---|---|---|
|
#18+
listner.ora ----------- # listener.ora Network Configuration File: /u01/app/oracle/product/12.1.0/db_1/network/admin/listener.ora # Generated by Oracle configuration tools. GENERATED BY ORACLE CONFIGURATION TOOLS. = Generated by Oracle configuration tools. LISTENER_CRM = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP) (HOST = localhost) (PORT = 1521) ) ) ) SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = CRM) (ORACLE_HOME = /u01/app/oracle/product/12.1.0/db_1) ) (SID_DESC = (SID_NAME = MSSQL) (PROGRAM = dg4odbc) (ORACLE_HOME = /u01/app/oracle/product/12.1.0/db_1) ) ) tnsnames.ora --------------- MSSQL = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521) ) ) (CONNECT_DATA =(SID = MSSQL) ) (HS = OK) ) initMSSQL.ora ---------------- HS_FDS_CONNECT_INFO=MSSQL HS_FDS_SHAREABLE_NAME=/usr/local/lib/libodbc.so #HS_FDS_TRACE_LEVEL = DEBUG #HS_FDS_TRACE_FILE_NAME = /home/oracle/odbc_trace.log #HS_NLS_NCHAR=UCS2 #set ODBCINI=/home/oracle/.odbc.ini тест через isql: ----------------- [root@localhost admin]# isql -v MSSQL <USERNAME> <PASSWORD> +---------------------------------------+ | Connected! | | | | sql-statement | | help [tablename] | | quit | | | +---------------------------------------+ SQL> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2017, 10:49 |
|
||
|
Гетерогенный сервис с MSSQL
|
|||
|---|---|---|---|
|
#18+
LISTENER_CRM = .... SID_LIST_LISTENER = Как ты думаешь, эти 2 секции относятся к одному listener, или к разным? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2017, 11:13 |
|
||
|
Гетерогенный сервис с MSSQL
|
|||
|---|---|---|---|
|
#18+
tru55, я в администрировании не очень силен... Если не сложно, подскажите как правильно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2017, 11:29 |
|
||
|
Гетерогенный сервис с MSSQL
|
|||
|---|---|---|---|
|
#18+
Ecли listener один, то проще использовать его дефолтное имя, т.е. listener. Соответственно LISTENER = ... SID_LIST_LISTENER = PS В SID_LIST_LISTENER слово LISTENER - это имя, а не служебное слово. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2017, 12:48 |
|
||
|
Гетерогенный сервис с MSSQL
|
|||
|---|---|---|---|
|
#18+
Переименовал listener... Сменил пароль на более простой, без звездочки... Ничего не помогает, все так же ошибка в логине... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2017, 21:50 |
|
||
|
Гетерогенный сервис с MSSQL
|
|||
|---|---|---|---|
|
#18+
DenisBelyaev, 1) Скорее всего, dg4odbc не видит нужных библиотек initMSSQL.ora Код: plsql 1. 2. 3. Нужно добавить listener.ora Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 2) Какая разрядность драйверов odbc? что говорят команды: Код: plsql 1. 2. 3. 4. 5. p.s. Научитесь пользоваться тэгами ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2017, 22:43 |
|
||
|
Гетерогенный сервис с MSSQL
|
|||
|---|---|---|---|
|
#18+
У вас unixODBC из пакета поставлен или сами собирали? Если из пакета - то бинарики скорее всего не в /usr/local ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2017, 06:36 |
|
||
|
Гетерогенный сервис с MSSQL
|
|||
|---|---|---|---|
|
#18+
Vadim Lejnin, Вот вывод команд: $ ldd /usr/local/lib/libodbc.so linux-vdso.so.1 => (0x00007fff93fa4000) libdl.so.2 => /lib64/libdl.so.2 (0x00007f0750cb7000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f0750a9a000) libc.so.6 => /lib64/libc.so.6 (0x00007f07506d9000) /lib64/ld-linux-x86-64.so.2 (0x00007f0751142000) $ file /usr/local/lib/libodbc.so /usr/local/lib/libodbc.so: symbolic link to `libodbc.so.2.0.0' $ lsnrctl status LSNRCTL for Linux: Version 12.1.0.2.0 - Production on 16-FEB-2017 22:37:38 Copyright (c) 1991, 2014, Oracle. All rights reserved. Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521)) STATUS of the LISTENER ------------------------ Alias LISTENER Version TNSLSNR for Linux: Version 12.1.0.2.0 - Production Start Date 09-FEB-2017 09:55:44 Uptime 7 days 12 hr. 41 min. 54 sec Trace Level off Security ON: Local OS Authentication SNMP OFF Listener Parameter File /u01/app/oracle/product/12.1.0/db_1/network/admin/listener.ora Listener Log File /u01/app/oracle/diag/tnslsnr/localhost/listener/alert/log.xml Listening Endpoints Summary... (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521))) (DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=localhost)(PORT=5500))(Security=(my_wallet_directory=/u01/app/oracle/admin/CRM/xdb_wallet))(Presentation=HTTP)(Session=RAW)) Services Summary... Service "CRM" has 2 instance(s). Instance "CRM", status UNKNOWN, has 1 handler(s) for this service... Instance "CRM", status READY, has 1 handler(s) for this service... Service "CRMXDB" has 1 instance(s). Instance "CRM", status READY, has 1 handler(s) for this service... Service "MSSQL" has 1 instance(s). Instance "MSSQL", status UNKNOWN, has 1 handler(s) for this service... The command completed successfully $ tnsping MSSQL TNS Ping Utility for Linux: Version 12.1.0.2.0 - Production on 16-FEB-2017 22:38:36 Copyright (c) 1997, 2014, Oracle. All rights reserved. Used parameter files: /u01/app/oracle/product/12.1.0/db_1/network/admin/sqlnet.ora Used TNSNAMES adapter to resolve the alias Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))) (CONNECT_DATA =(SID = MSSQL)) (HS = OK)) OK (10 msec) $ rpm -qa | grep -i odbc unixODBC-2.3.1-11.el7.x86_64 unixODBC-devel-2.3.1-11.el7.x86_64 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2017, 22:43 |
|
||
|
Гетерогенный сервис с MSSQL
|
|||
|---|---|---|---|
|
#18+
Vadim Lejnin, видимость библиотек проверил, в настройках сменил имя драйвера, получил другую ошибку: ORA-28500: connection from ORACLE to a non-Oracle system returned this message: ORA-02063: preceding line from DBL И еще вопрос: часто в описаниях встречаю путь "/u01/app/oracle/product/12.1.0/db_1/dg4odbc", но у меня на сервере нет такой папки, я уже думаю, может я чего то не понимаю и что то упустил? Но есть папка /u01/app/oracle/product/12.1.0/db_1/hs и там я делал настройки для HS сервиса. И исполняемы файл dg4odbc имеется на сервере в папке bin... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2017, 23:01 |
|
||
|
Гетерогенный сервис с MSSQL
|
|||
|---|---|---|---|
|
#18+
landy, сам собирал, скачивал, дальше make, make + install ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2017, 23:02 |
|
||
|
Гетерогенный сервис с MSSQL
|
|||
|---|---|---|---|
|
#18+
По моему в odbc.ini для MS SQL соединения обязательно нужно прописать UID= логин в БД PWD= пароль Но могу путать(у нас там еще куча других БД) Кроме того, для MS SQL устанавливается еще и FreeTDS ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2017, 12:01 |
|
||
|
Гетерогенный сервис с MSSQL
|
|||
|---|---|---|---|
|
#18+
landy, добавление UID и PWD ничего не дает. isql как работал, так и работает, при этом если убрать из запрос логин и пароль и дать просто isql -v MSSQL, то получаю ошибку: [S1000][unixODBC][FreeTDS][SQL Server]Unable to connect to data source [01000][unixODBC][FreeTDS][SQL Server]Adaptive Server connection failed [ISQL]ERROR: Could not SQLConnect C логином и паролем в запросе isql отрабатывает, freeTDS настроен. собственно проблема не на уровне ODBC, я об этом писал, проблема где то в Oracle. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2017, 12:10 |
|
||
|
Гетерогенный сервис с MSSQL
|
|||
|---|---|---|---|
|
#18+
Вот заметки на полях для других ----------------------- Доступ к гетерогенным БД осуществляется через ODBC. Чтобы добавить сервис для создания DBLink на какой-либо БД Oracle требуется создать сначала источник данных(DSN) на сервере. Пример конфигурирования DSN для MSSQL сервера. Чтобы добавить DSN - заходим на хост с правами root(по ssh). На хосте уже установлены и сконфигурированы UnixODBC и FreeTDS(для MSSQL). Переходим в каталог /usr/local/etc и правим файл freetds.conf, добавляем описание сервера MSSQL (ip, port ). Выглядит это так: [mssqlserver] <--- алиас сервера для DSN host = <ip или dns имя> port = 1433 tds version = 8.0 client charset = UTF-8 Установленные драйвера для БД можно посмотреть в /etc/odbcinst.ini , а DSN описываются в /etc/odbc.ini. Чтобы добавить DSN для MSSQL следующего вида: [sccm] <----- DSN - должно быть уникальным, проверить в /etc/odbc.ini Driver=FreeTDS <--- имя драйвера, см /etc/odbcinst.ini Description=mssql TDS_Version = 8.0 Trace=No ServerName=mssqlserver <---алиас сервера, см freetds.conf Port=1433 Database= <DB> UID= логин в БД PWD= пароль DSN добавлен - можно проверить работоспособность: $> isql -v sccm логин пароль Подключились, проверили выборку из какой-нибудь таблицы - все DSN настроен и проверен. Переходим к созданию гетерогенного сервиса. Создание сервиса У нас есть рабочий DSN, теперь можем создать сервис, который смогут использовать другие сервера БД Oracle. Сервис добавляется в listener.ora, который транслирует вызовы в HS. Логинимся пользователем oracle, добавляем сервис(например SCCM): SID_LIST_LISTENER= (SID_LIST= (SID_DESC= (SID_NAME=sccm) <--- имя сервиса, регистровозависимое, регистр тот же, что и в $ORACLE_HOME/hs/admin/init<сервис>.ora (ORACLE_HOME = /u01/app/oracle/product/11.2.0/xe) (PROGRAM=dg4odbc) <--- используем ODBC гетерогенный доступ (ENVS=LD_LIBRARY_PATH= /usr/local/lib:/usr/lib64: /u01/app/oracle/product/11.2.0/xe) ) (SID_DESC= (SID_NAME=fp) (ORACLE_HOME = /u01/app/oracle/product/11.2.0/xe) (PROGRAM=dg4odbc) (ENVS=LD_LIBRARY_PATH=/usr/local/lib:/usr/lib64:/u01/app/oracle/product/11.2.0/xe) ) ) Перезапускаем листенер и проверяем, что сервис запущен и слушает входящие соединения $ lsnrctl reload $ lsnrctl status LSNRCTL for Linux: Version 11.2.0.2.0 - Production on 24-APR-2015 11:14:34 Copyright (c) 1991, 2011, Oracle. All rights reserved. Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC_FOR_XE))) STATUS of the LISTENER ------------------------ Alias LISTENER Version TNSLSNR for Linux: Version 11.2.0.2.0 - Production Start Date 17-APR-2015 15:07:38 Uptime 6 days 20 hr. 6 min. 55 sec Trace Level off Security ON: Local OS Authentication SNMP OFF Default Service XE Listener Parameter File /u01/app/oracle/product/11.2.0/xe/network/admin/listener.ora Listener Log File /u01/app/oracle/diag/tnslsnr/serverdb/listener/alert/log.xml Listening Endpoints Summary... (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC_FOR_XE))) (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=serverdb)(PORT=1521))) Services Summary... Service "fp" has 1 instance(s). Instance "fp", status UNKNOWN, has 1 handler(s) for this service... Service "sccm" has 1 instance(s). Instance "sccm", status UNKNOWN, has 1 handler(s) for this service... The command completed successfully $ Создаем сам гетерогенный сервис(под пользователем oracle) $ cd $ORACLE_HOME/hs/admin Создаем файл init<имясервиса>.ora ( в нашем примере initsccm.ora - регистр sccm тот же, что в listener.ora) со следующим содержимым: # # HS init parameters # HS_FDS_CONNECT_INFO = sccm <--- имя сервиса HS_FDS_SHAREABLE_NAME = /usr/lib64/libodbc.so HS_FDS_SQLLEN_INTERPRETATION=64 HS_FDS_TRACE_LEVEL = off HS_NLS_NCHAR=UCS2 <--- кодировка для MS SQL, чтобы у клиентов правильно отображалась кириллица HS_LANGUAGE = AMERICAN_AMERICA.CL8MSWIN1251 set ODBCINI=/etc/odbc.ini Теперь можно локально проверить, работает ли гетерогенный сервис. Логинимся пользователем oracle. Добавляем в локальный $ORACLE_HOME/network/admin/tnsnames.ora сервис SCCM: SCCM = (DESCRIPTION = (ADDRESS_LIST= (ADDRESS = (PROTOCOL = TCP)(HOST = serverdb)(PORT = 1521)) ) (CONNECT_DATA = (SID = SCCM) ) (HS = OK) ) Проверяем доступность: $ tnsping SCCM TNS Ping Utility for Linux: Version 11.2.0.2.0 - Production on 24-APR-2015 11:30:14 Copyright (c) 1997, 2011, Oracle. All rights reserved. Used parameter files: Used TNSNAMES adapter to resolve the alias Attempting to contact (DESCRIPTION = (ADDRESS_LIST= (ADDRESS = (PROTOCOL = TCP)(HOST = serverdb)(PORT = 1521))) (CONNECT_DATA = (SID = SCCM)) (HS = OK)) OK (100 msec) Создаем тестовый DBLink и проверяем работоспособность $ sqlplus / as sysdba $SQL> create database link TST connect to <логин ODBC> identified by <пароль ODBC> using 'SCCM'; $SQL> select count(*) from sysusers@TST; $SQL> drop database link TST; ------- Ну вот как-то так ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2017, 12:17 |
|
||
|
|

start [/forum/topic.php?fid=52&gotonew=1&tid=1886410]: |
0ms |
get settings: |
5ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
136ms |
get topic data: |
7ms |
get first new msg: |
5ms |
get forum data: |
2ms |
get page messages: |
30ms |
get tp. blocked users: |
1ms |
| others: | 194ms |
| total: | 392ms |

| 0 / 0 |
