使用完整连接字符串和EZCONNECT绕过tnsnames.ora时出现“ORA-12560:TNS:协议适配器错误”

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用完整连接字符串和EZCONNECT绕过tnsnames.ora时出现“ORA-12560:TNS:协议适配器错误”相关的知识,希望对你有一定的参考价值。

尝试连接到数据库时,尝试使用任一连接字符串绕过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驱动程序管理器]未找到数据源名称且未指定默认驱动程序(0)(SQLDriverConnect)')

为什么连接字符串适用于sqlplus而不适用于ODBC?

答案

使用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 in OraClient11g_home1 connection strings

对于deprecated 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 for Oracle connection strings

请注意,Microsoft ODBC for Oracle仅适用于32位

以上是关于使用完整连接字符串和EZCONNECT绕过tnsnames.ora时出现“ORA-12560:TNS:协议适配器错误”的主要内容,如果未能解决你的问题,请参考以下文章

php异或计算绕过preg_match()

Golang XML解析器漏洞可引发SAML 认证绕过

使用服务器绕过路由器发起连接

通过使用第 3 方建立连接绕过防火墙

Python 正则表达式 / 正则表达式 - 如何在保持目标文本完整的情况下绕过目标文本?

using the easy connect naming method 简单连接測试