我知道这应该是 Oracle 的一个问题,但是https://community.oracle.com中已经有四个线程在问同样的问题,但他们没有得到答案。也许stackoverflow中的某个人可以帮助我,因为我们遇到了托管驱动程序的大量问题。我们希望这个社区的人能知道答案。
在从 11 非托管迁移到 12c 托管驱动程序(来自 Nuget 的 4.121.2.0)后,我们的系统从 Oracle 获得异常。这是调用堆栈:
Oracle.ManagedDataAccess.Client.OracleException (0x80004005): Request timed out
bei OracleInternal.ConnectionPool.PoolManager`3.Get(ConnectionString csWithDiffOrNewPwd, Boolean bGetForApp, String affinityInstanceName, Boolean bForceMatch)
bei OracleInternal.ConnectionPool.OraclePoolManager.Get(ConnectionString csWithNewPassword, Boolean bGetForApp, String affinityInstanceName, Boolean bForceMatch)
bei OracleInternal.ConnectionPool.OracleConnectionDispenser`3.Get(ConnectionString cs, PM conPM, ConnectionString pmCS, SecureString securedPassword, SecureString securedProxyPassword)
bei Oracle.ManagedDataAccess.Client.OracleConnection.Open()
我们做了一些测试,似乎池工作不正常。据我们所知,即使您保持系统运行而不做任何事情,来自池的连接也会中断。发生这种情况时,系统将无法再工作,因为没有可以使用的连接。似乎连接无效,但驱动程序没有回收它们。在这种情况下,我们需要终止该进程。由于这是作为服务工作的业务服务器,因此这是一个主要问题。
与以前的非托管驱动程序相同的软件根本没有问题,因此它与池的大小或未处理的连接无关(正如我所说,我们可以在几乎不询问系统的情况下重现该问题)。
你们有没有人听说过类似的事情,可以请帮助我们吗?非常感谢您的任何提示。