1

使用Oracle.ManagedDataAccess.dll 12and 18,如果要使用tnsname.ora别名,则必须TNS_ADMIN使用相应的路径定义环境变量。

我刚刚发现该版本19能够在tnsname.ora没有此环境变量的情况下获取配置,但我不确定如何?

web.congthe和 the都不machine.config包含该环境变量。

注册表编辑器中似乎有一条路径,但是当我用错误的路径修改路径时,我的项目仍然有效。

在此处输入图像描述

根据我的测试,这里列出了哪些有效,哪些无效:

  • 19.3具有 Oracle.ManagedDataAccess 19.3(和更高级)的本地客户端:在没有TNS_ADMIN环境的情况下工作
  • 19.3具有 Oracle.ManagedDataAccess (和之前)的本地客户端18.6:没有TNS_ADMINEnv就无法工作
  • 带有 Oracle.ManagedDataAccess(所有版本)的本地客户端12.1:没有TNS_ADMINEnv就无法工作

所以我想知道为什么这个特殊案例有效?

Oracle.ManagedDataAccess 中还有返回使用tnsname.ora路径的方法吗?

谢谢,

4

2 回答 2

1

谢谢大家的回答。

我终于找到了使用 Process Monitor (thx @WernfriedDomscheit) 并Path使用TNS_ADMIN.

注册表编辑器中有两个路径包含该TNS_ADMIN变量:

  • HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\ODP.NET.Managed\4.122.19.1
  • HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\ORACLE\ODP.NET.Managed\4.122.19.1

我只是想删除非WOW6432Node路径。如果我也删除了WOW6432Node一个,那么Oracle.ManagedDataAccess.dll成功失败。

于 2019-12-26T09:26:09.433 回答
1

我没有任何专门使用 Oracle.ManagedDataAccess.dll 的经验,但我知道一般来说,没有客户端需要设置 TNS_ADMIN。TNS 层本身具有查找 tnsnames.ora 的优先顺序,这在调用客户端之外。首先,它查找 TNS_ADMIN 环境变量。如果没有设置,或者在 TNS_ADMIN 指向的位置找不到 tnsnames.ora,它接下来会检查进程的当前目录。如果在那里找不到,它会检查 $ORACLE_HOME/network/admin。我会说您的陈述“如果您想使用 tnsname.ora 别名,那么您必须使用相应的路径定义环境变量 TNS_ADMIN”是您基于对阅读或观察的错误解释得出的结论。

于 2019-12-24T14:59:25.227 回答