ODP.NET 托管驱动程序 tnsnames.ora 优先顺序
ODP.NET Managed Driver tnsnames.ora precedence order
我构建了一个小型 WinForms 应用程序并使用 ODP.NET 托管驱动程序连接到 Oracle 数据库。我已按照本文档中的说明使用 application.config 文件设置连接:
根据我在几个地方找到的文档,我的印象是 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 个 post 似乎指的是我遇到的同一问题。 https://community.oracle.com/message/10610812#10610812
最后一个 post 声称问题是由于 TNS_ADMIN 在 machine.config 设置中定义的,并且这会覆盖其他所有内容。然而,这与此处的文档相矛盾:https://docs.oracle.com/cd/E48297_01/doc/win.121/e41125/featConfig.htm#autoId4
我还尝试搜索所有 4 个 machine.config 文件,但找不到对 TNS_ADMIN 的任何引用。因此,虽然在我的情况下 TNS_ADMIN 位置肯定被优先考虑,但我无法找到对 TNS_ADMIN 变量的引用。
我在上面第二个 link 中 post 编辑的官方优先顺序准确吗? machine.config 呢?我应该在哪里寻找对 TNS_ADMIN 变量的引用?
这似乎是一个很难的话题。从 Microsoft Sysinternals 下载 Process Monitor 并查看以何种顺序加载了哪些文件。
我认为优先顺序取决于版本,并且文档肯定是错误的。
在 Oracle Data Provider for .NET Developer's Guide 中没有提及 TNS_ADMIN
环境变量,但是当您使用 Process Monitor 检查时,您会看到它已被占用(据我所知,即使是最高优先级)
当您安装 ODP.NET Managed Driver 的最新版本 12.2 时,您会在 HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\ODP.NET.Managed.122.1.0\TNS_ADMIN
处进入注册表,尽管文档显示未使用注册表。
所以我的建议是:将所有可能的值设置到同一个文件夹,甚至在 %ORACLE_HOME%\network\admin
处创建一个符号 link 指向 tnsnames.ora
.
的位置
另见
我构建了一个小型 WinForms 应用程序并使用 ODP.NET 托管驱动程序连接到 Oracle 数据库。我已按照本文档中的说明使用 application.config 文件设置连接:
根据我在几个地方找到的文档,我的印象是 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 个 post 似乎指的是我遇到的同一问题。 https://community.oracle.com/message/10610812#10610812
最后一个 post 声称问题是由于 TNS_ADMIN 在 machine.config 设置中定义的,并且这会覆盖其他所有内容。然而,这与此处的文档相矛盾:https://docs.oracle.com/cd/E48297_01/doc/win.121/e41125/featConfig.htm#autoId4
我还尝试搜索所有 4 个 machine.config 文件,但找不到对 TNS_ADMIN 的任何引用。因此,虽然在我的情况下 TNS_ADMIN 位置肯定被优先考虑,但我无法找到对 TNS_ADMIN 变量的引用。
我在上面第二个 link 中 post 编辑的官方优先顺序准确吗? machine.config 呢?我应该在哪里寻找对 TNS_ADMIN 变量的引用?
这似乎是一个很难的话题。从 Microsoft Sysinternals 下载 Process Monitor 并查看以何种顺序加载了哪些文件。
我认为优先顺序取决于版本,并且文档肯定是错误的。
在 Oracle Data Provider for .NET Developer's Guide 中没有提及 TNS_ADMIN
环境变量,但是当您使用 Process Monitor 检查时,您会看到它已被占用(据我所知,即使是最高优先级)
当您安装 ODP.NET Managed Driver 的最新版本 12.2 时,您会在 HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\ODP.NET.Managed.122.1.0\TNS_ADMIN
处进入注册表,尽管文档显示未使用注册表。
所以我的建议是:将所有可能的值设置到同一个文件夹,甚至在 %ORACLE_HOME%\network\admin
处创建一个符号 link 指向 tnsnames.ora
.
另见