c# - ODP.NET 托管驱动程序 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 个帖子似乎指的是我遇到的相同问题。 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 变量的引用?
解决方案
这似乎是一个困难的话题。从 Microsoft Sysinternals下载Process Monitor并查看哪些文件以何种顺序加载。
我认为优先顺序取决于版本,并且文档肯定是错误的。
在Oracle Data Provider for .NET Developer's Guide中没有提及TNS_ADMIN
环境变量,但是当您使用 Process Monitor 检查时,您会看到它已被占用(据我所知,即使是最高优先级)
当您安装最新版本 12.2 的 ODP.NET 托管驱动程序时,您会在注册表中获得条目,HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\ODP.NET.Managed\4.122.1.0\TNS_ADMIN
尽管文档显示未使用注册表。
所以我的建议是:将所有可能的值设置到同一个文件夹,甚至在%ORACLE_HOME%\network\admin
指向tnsnames.ora
.
推荐阅读
- java - Spring boot Thymeleaf 根据其他下拉列表选择填充下拉列表
- javascript - 如何使用 Puppeteer 确认 ng-show (Angular) 弹出窗口?
- docker - 从 Docker Run 命令设置卷主机路径
- javascript - 发布`` 数组
- python - 当顺序未知时迭代范围的 Pythonic 方式
- mysql - Sql 按日期分组问题
- node.js - Pm2 deploy Permission Denied for everythings
- c# - 使用 OnCollisionEnter() 检测到不存在的碰撞
- java - spring boot maven jar 执行顺序不一样
- electron - 电子:在简单的 hello world 应用程序中,无法查看默认菜单栏