我的笔记本电脑上安装了两个 Oracle 12.1 客户端,一个 32 位安装,一个 64 位安装。两者的配置相同。我的 SQLNET.ORA 文件设置为首先使用 OID,然后故障转移到使用我的 TNSAMES.OA 文件。这对文件的内容如下。
我的问题是,虽然我的 64 位客户端运行良好,但当我使用 32 位客户端连接时,需要大约 2 分钟才能建立连接。SSIS(Microsoft SQL Server Integration Services)只能使用 32 位客户端,尝试使用 32 位客户端开发 SSIS 包是一种非常缓慢的体验,直到我弄清楚如何解决,但我想了解为什么我的更改有效。
--SQLNET.ORA 文件:
# This file is actually generated by netca. But if customers choose to
# install "Software Only", this file wont exist and without the native
# authentication, they will not be able to connect to the database on NT.
names.directory_path=(LDAP, TNSNAMES)
NAMES.DEFAULT_DOMAIN = cigna.com
# SQLNET.AUTHENTICATION_SERVICES = (NTS)
--文件 LDAP.ORA
DIRECTORY_SERVERS= (oid.gtm.internal.mycompany.com:3060)
DEFAULT_ADMIN_CONTEXT = "dc=mycompany,dc=com"
DIRECTORY_SERVER_TYPE = OID
--TNS名称.ORA
Contents not shown
64 位客户端可以正常工作,因此我保留了这 3 个文件。对于连接速度较慢的 32 位客户端,我修改了 SQLNET.ORA 行,将 32 位版本中的“names.directory_path=(LDAP, TNSNAMES)”改为“names.directory_path=(TNSNAMES, LDAP)”,以便直接转到我的 TNSNAMES.ORA 文件来解析端点,而不是先尝试与 LDAP 服务器通信。
因此,似乎由于某种原因,尝试与 LDAP 服务器 oid.gtm.internal.mycompany.com 通信时出现了延迟,但仅限于 32 位客户端。当我反转顺序时,32 位客户端就没问题了。
我的问题是:为什么它在 64 位上可以工作,但在 32 位上却不行,而客户端却可以工作?
更新 我的 Windows PATH 变量将 64 位 Oracle 文件夹放在首位。当我打开 cmd 窗口并进行 tnsping 时,将使用 64 位客户端,并在 60 毫秒内显示“使用 LDAP 适配器解析别名”。如果我创建一个批处理文件来修改 cmd 会话的 PATH 变量,以将 32 位 Oracle 客户端文件夹放在首位,然后在尝试 tnsping 之前将 CD 放入 32 位 bin 文件夹 C:\oracle_12102_32bit\product\12102_32bit\CLIENT_1\bin,它会暂停很长时间,然后显示“使用 TNSNAMES 适配器解析别名”,尽管 SQLNET.ORA 表示首先使用 LDAP。在这个 32 位测试中,它表示它使用 TNSNAMES 进行解析,无论我的 SQLNET.ORA 是否表示首先使用 LDAP 或 TNSNAMES。如果 LDAP 是第一个,它一定会失败并且需要很长时间才能完成。如果我把顺序换成先说TNSNAMES,然后再说LDAP,这样就很快了。
所以我想问题是,如果我在 32 个文件夹中有相同的 3 个文件的副本,为什么 LDAP 仅适用于 64 位?有人给了我一行要添加的内容 - 我认为是 SQLNET.ORA 文件,用于将日志记录添加到 TRACE (*.TRC) 文件中以查看原因,但我在 PC 上找不到任何最近的日志记录。(我使用 VOID TOOLS SEARCH EVERYTHING 快速搜索整个 PC 以查找 TRACE 文件)。我不记得我后来删除的确切语句是什么,但它将某些 LOGGING_LEVEL 设置为 ADMIN 或类似的东西。
为什么 LDAP 在 32 位下会失败,但在 64 位下却不会失败?