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

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

对于正在使用公共数据库链接并在过程中引用链接表的客户之一,该调用失败.经过进一步测试,任何通过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名称,它使用显式连接字符串详细信息.

我们甚至通过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相同的方式为服务器提供服务?

DB链接信息:

OWNER:    PUBLIC
USERNAME: [FIXED OTHER USER]

最佳答案 这肯定是服务器A和服务器B之间的连接(数据库链接)的问题.

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

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

我想说下一步是直接连接到服务器A上的数据库,并尝试通过数据库链接查询服务器B上的数据库中的表.我希望这会因同一个ORA-12154错误而失败.

点赞