gpt4 book ai didi

oracle - 对 PUBLIC 数据库链接表的托管 ODP.NET 调用导致 TNS 错误

转载 作者:行者123 更新时间:2023-12-01 22:19:20 25 4
gpt4 key购买 nike

我们的应用程序使用托管 ODP.NET 代码来调用各种 Oracle 过程。

对于我们的一位客户来说,他正在使用公共(public)数据库链接并引用过程中的链接表,该调用失败。经过进一步测试,任何通过 ODP.NET 对链接表运行查询的尝试都会失败。

ORA-12154: TNS: could not resolve the connect identifier specified

全栈:

Oracle.ManagedDataAccess.Client.OracleException: ORA-12154: TNS:could not resolve the connect identifier specified 
at OracleInternal.ServiceObjects.OracleCommandImpl.VerifyExecution(OracleConnectionImpl connectionImpl, Int32& cursorId, Boolean bThrowArrayBindRelatedErrors, OracleException& exceptionForArrayBindDML, Boolean& hasMoreRowsInDB, Boolean bFirstIterationDone)
at OracleInternal.ServiceObjects.OracleCommandImpl.ExecuteReader(String commandText, OracleParameterCollection paramColl, CommandType commandType, OracleConnectionImpl connectionImpl, OracleDataReaderImpl& rdrImpl, Int32 longFetchSize, Int64 clientInitialLOBFS, OracleDependencyImpl orclDependencyImpl, Int64[] scnForExecution, Int64[]& scnFromExecution, OracleParameterCollection& bindByPositionParamColl, Boolean& bBindParamPresent, Int64& internalInitialLOBFS, OracleException& exceptionForArrayBindDML, Boolean isDescribeOnly, Boolean isFromEF)
at Oracle.ManagedDataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior) at Oracle.ManagedDataAccess.Client.OracleCommand.ExecuteDbDataReader(CommandBehavior behavior)
at System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader()
at [APPLICATION CODE]

这很奇怪,因为尝试使用 SQL PLUS 使相同的查询成功,即使客户端计算机上没有 TNS Names ora 文件

我们的应用程序甚至不使用 TNS-Names,它使用显式连接字符串详细信息。

我们甚至通过 DevArt oracle 驱动程序运行了测试查询,结果也很成功。

就好像专门通过托管 ODP.NET 进行调用使服务器以不同的方式对待数据库链接。

ODP.NET  Query (Client Machine A) > (Server A) > Table (Server B) = ERROR
SQL Plus Query (Client Machine A) > (Server A) > Table (Server B) = SUCCESS
DEV ART Query (Client Machine A) > (Server A) > Table (Server B) = SUCCESS

我们现在使用的测试查询是一个简单的 SELECT 语句

有人知道如何让 ODP.NET 像 SQL Plus 一样服从服务器获取此信息吗?

数据库链接信息:

OWNER:    PUBLIC
USERNAME: [FIXED OTHER USER]

最佳答案

这肯定是服务器A和服务器B之间的连接(数据库链接)有问题。

服务器 A 的 tnsnames.ora 文件中可能缺少服务器 B 的 TNS 名称,或者服务器 A 的数据库链接中的 TNS 名称可能不正确。

如果这是客户端问题,我可以想象收到 ORA-12154 错误,但不会收到 ORA-04088:如果您可以进入触发器,显然您与服务器 A 的连接是没问题的。

我想说,下一步是直接连接到服务器 A 上的数据库,并尝试通过数据库链接查询服务器 B 上数据库中的表。我预计这会失败并出现相同的 ORA-12154 错误。

关于oracle - 对 PUBLIC 数据库链接表的托管 ODP.NET 调用导致 TNS 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41192263/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com