ODP.NET托管驱动程序tnsnames.ora优先顺序

时间:2018-07-10 00:41:11

标签: c# .net oracle odp.net

我已经构建了一个小型WinForms应用程序,并且正在使用ODP.NET托管驱动程序连接到Oracle数据库。我已按照本文档中的说明使用application.config文件设置连接:

http://www.oracle.com/webfolder/technetwork/tutorials/obe/db/12c/r1/appdev/dotnet/Web_version_Fully_Managed_ODPnet_OBE/odpnetmngdrv.html

基于我在多个地方发现的文档,我给人的印象是application.config文件相对于数据库别名解析具有最高优先级。例如:https://docs.oracle.com/cd/E48297_01/doc/win.121/e41125/featConfig.htm#autoId6

但是我遇到的是,如果TNS_ADMIN环境变量存在,则它的优先级高于.NET配置文件中“ dataSources”部分中的数据源别名。我知道TNS_ADMIN设置是用于配置连接的一个选项,但是我尚未在我的application.config文件中配置此设置。

此主题的最后2篇帖子似乎是指我遇到的同一问题。 https://community.oracle.com/message/10610812#10610812

最后一篇文章声称该问题是由于在machine.config设置中定义了TNS_ADMIN引起的,并且此问题将覆盖其他所有内容。但这与此处的文档矛盾:https://docs.oracle.com/cd/E48297_01/doc/win.121/e41125/featConfig.htm#autoId4

我还尝试搜索我的所有4个machine.config文件,但找不到对TNS_ADMIN的任何引用。因此,在我的情况下,无疑要对TNS_ADMIN位置进行优先级排序,但无法找到对TNS_ADMIN变量的引用。

我在上面第二个链接中发布的官方优先顺序是否正确?那么machine.config呢?我应该在哪里寻找对TNS_ADMIN变量的引用?

1 个答案:

答案 0 :(得分:1)

这似乎是一个困难的话题。从Microsoft Sysinternals下载Process Monitor,看看哪些文件以什么顺序加载。

我认为优先顺序取决于发布版本,而且文档肯定是错误的。

.NET开发人员指南的Oracle数据提供程序中,没有提到TNS_ADMIN环境变量,但是,当您使用Process Monitor进行检查时,您会发现它已被占用(据我所记得甚至具有最高优先级)

当您安装ODP.NET托管驱动程序的最新版本12.2时,尽管文档说未使用注册表,但您仍可以在HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\ODP.NET.Managed\4.122.1.0\TNS_ADMIN处的注册表中登录。

所以我的建议是:将所有可能的值设置到同一文件夹,甚至在%ORACLE_HOME%\network\admin上创建一个指向tnsnames.ora的位置的符号链接。

另请参阅Determining location of relevant tnsnames.ora file

相关问题