I know that this should be a question for Oracle, but there are already four threads in https://community.oracle.com asking the same and they get no answer. Maybe someone in stackoverflow can help me as we are getting MASSIVE problems with the managed drivers. Our hope is that someone from this community could know the answer.
After migrating from the 11 unmanaged to the 12c managed drivers (4.121.2.0 from Nuget) our system is getting exceptions from Oracle. This is the call stack:
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()
We did some test and it seems that the pooling is not working correctly. As far as we can tell even if you keep the system just running without doing anything, the connections from the pool will die. When this happens the system cannot work anymore as there are no connections it could use. It seems that the connections are invalid but they are not being recycled by the drivers. In this case we need to kill the process. As this is a business server working as a service it is a major problem.
The same software with the previous unmanaged drivers had no problems at all, so it has nothing to do with the size of the pool or connections not being disposed (as I said we could reproduce the problem with nearly no queries to the system).
Have any of you heard something similar and could please help us? Thank you very much for any hints.
Can't put this in a comment, so here it goes, just in case someone gets here as I did one week ago...
Our issue was when switching from Oracle.DataAccess to Oracle.ManagedDataAccess.
The first one was working correctly, but with the upgrade to the managed driver, all went to hell (without changing anything in code)
We had debug everything (or at least we thought so) and nothing came up, until a colleague came up with something about readers not disposed correctly when called with commandbehaviour parameter.
As I said, we thought we had it all double and triple-checked... but this kind of reader call was the issue (btw it wasn't located in our DB Access module, which avoided us seeing it until now... organise your code!):
rd = cmd.ExecuteReader(CommandBehavior.CloseConnection)
when calling this way with the managed driver, (it seems) the reader does not close itself
Just calling
rd.Close()
after retrieving necessary data from the reader did the trick.
User contributions licensed under CC BY-SA 3.0