«ORA-12560: TNS: ошибка адаптера протокола» при обходе tnsnames.ora с использованием полной строки подключения и EZCONNECT - PullRequest
0 голосов
/ 30 августа 2018

Попытка использовать любую строку подключения для обхода tnsnames.ora (полная строка подключения и EZCONNECT) возвращает следующую ошибку при попытке подключения к базе данных:

pyodbc.Error: ('HY00', '[HY00] [Oracle] [ODBC] [Ora] ORA-12560: TNS: ошибка адаптера протокола \ n (12560) (SQLDriverConnect); [Oracle] [ODBC] [ Ora] ORA-12560: TNS: ошибка адаптера протокола \ n (12560) ')

Я пытался использовать следующие строки подключения из https://www.connectionstrings.com/oracle/:

Driver={Oracle in OraClient11g_home1}; Data Source=uid/pwd@//host:port/service_name;

Driver={Oracle in OraClient11g_home1};
Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=host)(PORT=port))) 
                         (CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=service_name)));
User Id=uid;Password=pwd;'

Я могу подключиться к базе данных, используя sqlplus и EZCONNECT:

PS: C:\>sqlplus uid/pwd@//host:port/service_name

SQL*PLUS: Release 11.2.0.1.0 Production on Thu Aug 30 11:56:22 2018

Copyright (c) 1982, 2010, Oracle. All rights reserved.

Connected to:
Oracle Database 12c Standard Edition Release 12.1.0.2.0 - 64bit Production

SQL>

Я сомневаюсь, что это проблема с драйвером, потому что использование другого драйвера возвращает другую ошибку:

pyodbc.InterfaceError: ('IM002', '[IM002] [Microsoft] [ODBC Driver Manager] Не найдено имя источника данных и не указан драйвер по умолчанию (0) (SQLDriverConnect)')

Почему строка подключения работает для sqlplus, но не для ODBC?

1 Ответ

0 голосов
/ 30 августа 2018

При использовании драйвера Oracle ODBC строка подключения должна выглядеть следующим образом:

Driver={Oracle in OraClient11g_home1};
DBQ={(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=host)(PORT=port))) 
                         (CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=service_name)))};
Uid=uid;Pwd=pwd;

См. Oracle в строках соединения OraClient11g_home1

Для устаревшего драйвера Microsoft это будет

Driver={Microsoft ODBC for Oracle};
Server={(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=host)(PORT=port))) 
                         (CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=service_name)))};
Uid=uid;Pwd=pwd;

См. Microsoft ODBC для строк подключения Oracle

Обратите внимание, что Microsoft ODBC для Oracle доступна только для 32-разрядных

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...