ODP.NET 和托管连接因 ORA-12154 而失败
ODP.NET and managed connections fail with ORA-12154
我认为通过 Oracle.ManagedDataAccess.Core NuGet 包使用 ODP.Net 托管连接的全部意义在于您不需要在 运行time 环境中安装 Oracle 客户端。
我发现很多关于
的帖子
ORA-12154: TNS:could not resolve the connect identifier specified error
错误,但所有关于潜在修复的讨论都围绕客户端配置问题展开。
我完全按照 this article 中的描述进行操作。
当我从 Visual Studio 在本地 运行 时,该应用程序连接正常,但当它由 Azure 管道构建和部署时,它无法连接。来自服务器的连接不是问题,并且没有 tnsnames.ora 和 sqlnet.ora 文件,或者 TNS_ADMIN 和 ORA_HOME 环境变量。
2021-02-15T18:04:40.867284043Z Oracle connection string: (DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=<ip address>)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=<sid>)));User Id=<User>;Password=<Password>;
2021-02-15T18:04:40.871226968Z [41m[30mfail[39m[22m[49m: Microsoft.AspNetCore.Server.Kestrel[13]
2021-02-15T18:04:40.871246768Z Connection id "0HM6HRG9F3OUG", Request id "0HM6HRG9F3OUG:00000004": An unhandled exception was thrown by the application.
2021-02-15T18:04:40.871252068Z Oracle.ManagedDataAccess.Client.OracleException (0x80004005): ORA-12154: TNS:could not resolve the connect identifier specified
2021-02-15T18:04:40.871255568Z ---> OracleInternal.Network.NetworkException (0x00002F7A): ORA-12154: TNS:could not resolve the connect identifier specified
我也试过这个 EZ Connect 字符串,但没有成功:
<user>/<password>@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=<ip address>)(Port=<port>))(CONNECT_DATA=(SID=<mysid>)))
我错过了什么?
更新:该问题似乎是由 Azure 混合连接管理器而非 Oracle 连接的潜在问题引起的。现在正在研究 VPN 连接。暂时保留您尝试不同连接字符串格式的建议。
我们看到了输出中的内容,但需要了解您实际上是如何在调用应用程序中指定连接字符串的。 ora-12154 是最常见的连接问题之一,互联网上到处都是。当你用谷歌搜索时,你发现了什么?
它说您指定的 tns 连接字符串无法在客户端的 tnsnames.ora 文件中找到。由于我不知道你的客户的tnsnames的内容,我也不知道你具体指定了什么,所以我现在不能多说。
但是,如前所述,几乎每个 Oracle 博客和 Internet 上的在线资源中都写有此错误。我最喜欢的是:https://edstevensdba.wordpress.com/2018/09/19/troubleshooting-ora-12154/
还有。 . .
oracle:cdb$ orer ora 12154
12154, 00000, "TNS: 无法解析指定的连接标识符"
// *Cause: 使用请求连接到数据库或其他服务
// 一个连接标识符,指定的连接标识符不能
// 使用其中一种命名方法解析为连接描述符
// 配置。例如,如果使用的连接标识符类型是
// net service name 那么在a中找不到net service name
// 命名方法 repository,否则 repository 不能
// 找到或到达。
// *行动:
// - 如果您使用本地命名(TNSNAMES.ORA 文件):
// - 确保“TNSNAMES”被列为
// Oracle Net 配置文件中的 NAMES.DIRECTORY_PATH 参数
// (SQLNET.ORA)
// - 验证 TNSNAMES.ORA 文件是否存在并且位于正确的位置
// 目录并且可以访问。
// - 检查用作连接标识符的网络服务名称
// 存在于 TNSNAMES.ORA 文件中。
// - 确保 TNSNAMES.ORA 中的任何地方都没有语法错误
// 文件。查找不匹配的括号或杂散字符。错误
// 在 TNSNAMES.ORA 文件中可能会使其无法使用。
// - 如果您使用目录命名:
// - 验证“LDAP”是否被列为
// Oracle Net 配置文件中的 NAMES.DIRETORY_PATH 参数
//(SQLNET.ORA)。
// - 验证 LDAP 目录服务器是否已启动并且它是
// 无障碍。
// - 验证网络服务名称或数据库名称用作
// 连接标识符在目录中配置。
// - 验证正在使用的默认上下文是否正确
// 指定完全限定的网络服务名称或完整的 LDAP DN
// 作为连接标识符
// - 如果您使用简单的连接命名:
// - 验证“EZCONNECT”是否被列为
// Oracle Net 配置文件中的 NAMES.DIRETORY_PATH 参数
//(SQLNET.ORA)。
// - 确保指定主机、端口和服务名称
// 是正确的。
// - 尝试将连接标识符括在引号中。
//
// 请参阅 Oracle 网络服务管理员指南或 Oracle
// 有关命名的更多信息的操作系统特定指南。</p>
此错误是由于应用服务与我们客户的本地旧版 Oracle 数据库之间的 Azure 混合连接配置不正确造成的。错误消息的“无法解析”部分实际上是正确的,表明存在潜在的 DNS 错误。
我认为通过 Oracle.ManagedDataAccess.Core NuGet 包使用 ODP.Net 托管连接的全部意义在于您不需要在 运行time 环境中安装 Oracle 客户端。 我发现很多关于
的帖子ORA-12154: TNS:could not resolve the connect identifier specified error
错误,但所有关于潜在修复的讨论都围绕客户端配置问题展开。
我完全按照 this article 中的描述进行操作。 当我从 Visual Studio 在本地 运行 时,该应用程序连接正常,但当它由 Azure 管道构建和部署时,它无法连接。来自服务器的连接不是问题,并且没有 tnsnames.ora 和 sqlnet.ora 文件,或者 TNS_ADMIN 和 ORA_HOME 环境变量。
2021-02-15T18:04:40.867284043Z Oracle connection string: (DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=<ip address>)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=<sid>)));User Id=<User>;Password=<Password>;
2021-02-15T18:04:40.871226968Z [41m[30mfail[39m[22m[49m: Microsoft.AspNetCore.Server.Kestrel[13]
2021-02-15T18:04:40.871246768Z Connection id "0HM6HRG9F3OUG", Request id "0HM6HRG9F3OUG:00000004": An unhandled exception was thrown by the application.
2021-02-15T18:04:40.871252068Z Oracle.ManagedDataAccess.Client.OracleException (0x80004005): ORA-12154: TNS:could not resolve the connect identifier specified
2021-02-15T18:04:40.871255568Z ---> OracleInternal.Network.NetworkException (0x00002F7A): ORA-12154: TNS:could not resolve the connect identifier specified
我也试过这个 EZ Connect 字符串,但没有成功:
<user>/<password>@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=<ip address>)(Port=<port>))(CONNECT_DATA=(SID=<mysid>)))
我错过了什么?
更新:该问题似乎是由 Azure 混合连接管理器而非 Oracle 连接的潜在问题引起的。现在正在研究 VPN 连接。暂时保留您尝试不同连接字符串格式的建议。
我们看到了输出中的内容,但需要了解您实际上是如何在调用应用程序中指定连接字符串的。 ora-12154 是最常见的连接问题之一,互联网上到处都是。当你用谷歌搜索时,你发现了什么?
它说您指定的 tns 连接字符串无法在客户端的 tnsnames.ora 文件中找到。由于我不知道你的客户的tnsnames的内容,我也不知道你具体指定了什么,所以我现在不能多说。
但是,如前所述,几乎每个 Oracle 博客和 Internet 上的在线资源中都写有此错误。我最喜欢的是:https://edstevensdba.wordpress.com/2018/09/19/troubleshooting-ora-12154/
还有。 . .
oracle:cdb$ orer ora 12154
12154, 00000, "TNS: 无法解析指定的连接标识符"
// *Cause: 使用请求连接到数据库或其他服务
// 一个连接标识符,指定的连接标识符不能
// 使用其中一种命名方法解析为连接描述符
// 配置。例如,如果使用的连接标识符类型是
// net service name 那么在a中找不到net service name
// 命名方法 repository,否则 repository 不能
// 找到或到达。
// *行动:
// - 如果您使用本地命名(TNSNAMES.ORA 文件):
// - 确保“TNSNAMES”被列为
// Oracle Net 配置文件中的 NAMES.DIRECTORY_PATH 参数
// (SQLNET.ORA)
// - 验证 TNSNAMES.ORA 文件是否存在并且位于正确的位置
// 目录并且可以访问。
// - 检查用作连接标识符的网络服务名称
// 存在于 TNSNAMES.ORA 文件中。
// - 确保 TNSNAMES.ORA 中的任何地方都没有语法错误
// 文件。查找不匹配的括号或杂散字符。错误
// 在 TNSNAMES.ORA 文件中可能会使其无法使用。
// - 如果您使用目录命名:
// - 验证“LDAP”是否被列为
// Oracle Net 配置文件中的 NAMES.DIRETORY_PATH 参数
//(SQLNET.ORA)。
// - 验证 LDAP 目录服务器是否已启动并且它是
// 无障碍。
// - 验证网络服务名称或数据库名称用作
// 连接标识符在目录中配置。
// - 验证正在使用的默认上下文是否正确
// 指定完全限定的网络服务名称或完整的 LDAP DN
// 作为连接标识符
// - 如果您使用简单的连接命名:
// - 验证“EZCONNECT”是否被列为
// Oracle Net 配置文件中的 NAMES.DIRETORY_PATH 参数
//(SQLNET.ORA)。
// - 确保指定主机、端口和服务名称
// 是正确的。
// - 尝试将连接标识符括在引号中。
//
// 请参阅 Oracle 网络服务管理员指南或 Oracle
// 有关命名的更多信息的操作系统特定指南。</p>
此错误是由于应用服务与我们客户的本地旧版 Oracle 数据库之间的 Azure 混合连接配置不正确造成的。错误消息的“无法解析”部分实际上是正确的,表明存在潜在的 DNS 错误。