是否可以在没有 tnsnames.ora 文件的情况下在 Windows 10 上建立 32 位 ODBC 连接?



我有一个VBA(Excel(宏,它连接到并查询Oracle数据库。 在 Windows 7 下运行,以下连接字符串有效:

Driver={Microsoft ODBC for Oracle}; Server=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=xxx.xxx.xxx.xxx)(PORT=xxx))(CONNECT_DATA=(SERVICE_NAME=name))); Uid=username;Pwd=password;

我和这个Excel模板的其他用户正在过渡到Windows 10(64位(,32位Office 365。 我喜欢这个连接字符串的地方是它不需要单独的 tnsnames.ora 文件,这是我想保留的功能。 我也知道Microsoft驱动程序正在被弃用(无论如何它都无法开箱即用(,所以现在是更改它的时候了。

我安装了以下内容:

  • Oracle 即时客户端 12.2(32 位(
  • 适用于即时客户端的 Oracle ODBC 驱动程序 12.2(32 位(
  • Visual Studio 2019(32位((假设Oracle驱动程序向前兼容(

我已经验证:

  • PATH 中的第一个值设置为安装即时客户端 12.2 的目录
  • ORACLE_HOME设置为同一目录
  • 只有一个ORACLE_HOME变量
  • 驱动程序(instantclient_12_2 中的 Oracle (在 32 位 ODBC 管理工具中可见

我尝试了以下连接字符串的各种调整,但没有运气

Driver={Oracle in instantclient_12_2}; Server=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=xxx.xxx.xxx.xxx)(PORT=xxx))(CONNECT_DATA=(SID=name))); Uid=username;Pwd=password

我尝试使用"数据源"代替"服务器","SERVICE_NAME"代替"SID",并且两者同时使用。 我还在 Excel 365 的内部 ODBC 连接中尝试了该字符串。 我不断收到的错误是:

ORA-12560:TNS:协议适配器错误

我开始怀疑在Windows 10下需要一个tnsname.ora文件。是否可以创建Windows 10 32位OBDC连接,而无需使用tnsnames.ora文件或除了在用户计算机上安装Oracle驱动程序之外的任何其他操作?

编辑:我创建了一个远程访问的tnsnames文件。 当连接字符串使用该文件并设置了TNS_ADMIN环境变量时,它将连接。 如果我在 VBA 本身中使用 tnsnames 文件中的确切文本,它无法识别它(TNS 适配器错误(。 我将假设我对需要tnsnames.ora文件的Oracle驱动程序的怀疑是正确的,至少对于VBA而言。

我遇到了同样的问题,得出的结论是Oracle ODBC驱动程序不支持连接描述符语法。 它只需要一个 TNS 名称。

此 Oracle 网页提供有关 Oracle ODBC 驱动程序将在连接字符串中接受的参数的信息:

https://docs.oracle.com/database/121/ADFNS/adfns_odbc.htm?ref=binfind.com/web

它声明 Dbq 参数采用 TNS 服务名称。 就是这样。在连接描述符的页面上没有提及任何内容。 此外,在 Oracle 驱动程序的Microsoft ODBC 的连接字符串中采用连接描述符的"服务器"和"连接字符串"参数在页面上的任何位置都没有提及。

很难"证明否定"。但我得出了一个遗憾的结论,即Oracle ODBC驱动程序不支持Oracle自己的Connect Descriptor语法,该语法基于:

  • Oracle 的文档仅显示对 TNS 服务名称的支持;以及
  • ConnectionStrings.com 仅显示使用 TNS 服务名称的示例,而不是连接描述符;以及
  • 我自己几个月的实验,使用不同的驱动程序和不同的 关键字和连接字符串中的值的组合

有两个 ODBC 驱动程序,一个(已弃用(来自 Microsoft,另一个来自 Oracle。连接字符串略有不同。

Oracle 驱动程序
  • (请参阅 https://www.connectionstrings.com/oracle-in-orahome92/或使用 Oracle ODBC 驱动程序(:

    Driver={Oracle in instantclient_12_2};Uid=username;Pwd=secret;DBQ=(DESCRIPTION=...)

  • Microsoft驱动程序(请参阅 https://www.connectionstrings.com/microsoft-odbc-driver-for-oracle/或连接字符串格式和属性(:

    Driver={Microsoft ODBC for Oracle};Uid=username;Pwd=secret;Server=(DESCRIPTION=...)

"Oracle ODBC Drivers for Instant Client"包括即时客户端,因此无需单独安装。您只会面临不匹配和目录混乱的风险。

最新更新