ODP.net géré pilote jette ORA-12570: Session Réseau: paquet Inattendu erreur de lecture
Dans l'un de nos produits, nous extraire des données de la base de données Oracle à l'aide de procédures stockées à l'aide de la ODP.net géré pilote.
Chaque maintenant et puis (environ tous les 1000 requêtes) nous obtenons l'exception suivante:
(ORA-12570: Network Session: Unexpected packet read error)
---> Oracle.ManagedDataAccess.Client.OracleException: ORA-12570: Network Session: Unexpected packet read error
---> OracleInternal.Network.NetworkException: ORA-12570: Network Session: Unexpected packet read error
---> System.ArgumentOutOfRangeException: Specified argument was out of the range of valid values.
Parameter name: size
at System.Net.Sockets.Socket.Receive(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags, SocketError& errorCode)
at OracleInternal.Network.ReaderStream.ReadIt(OraBuf OB, Int32 len)
--- End of inner exception stack trace ---
at OracleInternal.Network.ReaderStream.ReadIt(OraBuf OB, Int32 len)
at OracleInternal.Network.ReaderStream.WaitForReset()
at OracleInternal.Network.OracleCommunication.Reset()
at OracleInternal.TTC.TTCExecuteSql.ReceiveExecuteResponse(Accessor[]& defineAccessors, Accessor[] bindAccessors, Boolean bHasReturningParams, SQLMetaData& sqlMetaData, SqlStatementType statementType, Int64 noOfRowsFetchedLastTime, Int32 noOfRowsToFetch, Int32& noOfRowsFetched, Int64& queryId, Int32 longFetchSize, Int32 initialLOBFetchSize, Int64[] scnFromExecution, Boolean& bAllPureInputBinds, DataUnmarshaller& dataUnmarshaller, MarshalBindParameterValueHelper& marshalBindParamsHelper, Boolean bDefineDone, Boolean& bMoreThanOneRowAffectedByDmlWithRetClause)
--- End of inner exception stack trace ---
at Oracle.ManagedDataAccess.Client.OracleException.HandleError(OracleTraceLevel level, OracleTraceTag tag, Exception ex)
at OracleInternal.TTC.TTCExecuteSql.ReceiveExecuteResponse(Accessor[]& defineAccessors, Accessor[] bindAccessors, Boolean bHasReturningParams, SQLMetaData& sqlMetaData, SqlStatementType statementType, Int64 noOfRowsFetchedLastTime, Int32 noOfRowsToFetch, Int32& noOfRowsFetched, Int64& queryId, Int32 longFetchSize, Int32 initialLOBFetchSize, Int64[] scnFromExecution, Boolean& bAllPureInputBinds, DataUnmarshaller& dataUnmarshaller, MarshalBindParameterValueHelper& marshalBindParamsHelper, Boolean bDefineDone, Boolean& bMoreThanOneRowAffectedByDmlWithRetClause)
at OracleInternal.ServiceObjects.OracleCommandImpl.ExecuteNonQuery(String commandText, OracleParameterCollection paramColl, CommandType commandType, OracleConnectionImpl connectionImpl, Int32 longFetchSize, Int32 lobPrefetchSize, OracleDependencyImpl orclDependencyImpl, Int64[]& scnFromExecution, OracleParameterCollection& bindByPositionParamColl, Boolean& bBindParamPresent, Boolean isFromEF)
at Oracle.ManagedDataAccess.Client.OracleCommand.ExecuteNonQuery()
Il semble que ODP.net appelle Système.Net.Les Sockets.Socket.Recevoir avec un invalide paramètre de taille (<=0 ou supérieure à la longueur de la mémoire tampon, moins la valeur du paramètre de décalage).
L'exception ne peut être reproduit à la main et n'est jamais soulevée lors de l'exécution des procédures différentes, avec des paramètres différents (ie c'est de l'aléatoire).
De Configuration:
ODP.net géré version du pilote: 4.121.1.0
.net framework 4.5
Version du serveur Oracle: Oracle Database 11g Enterprise Edition Version 11.2.0.4.0 (Linux)
Quelqu'un a déjà rencontré ce problème? Existe-il des correctifs disponibles?
Merci d'avance!
Ce n'est pas votre situation, mais la même erreur se produira lorsque vous essayez d'utiliser l'Oracle pur géré pilote lors de la connexion au serveur qui nécessite de chiffrement avancé (stackoverflow.com/a/34227815/12597)
Salut, avez-vous géré comment résoudre ce problème? Merci
Oui, mais il a fallu un certain temps... (voir la réponse ci-dessous)
Voir la réponse ci-dessous
OriginalL'auteur vc 74 | 2014-11-25
Vous devez vous connecter pour publier un commentaire.
Après l'ouverture d'un ticket avec le support d'Oracle, ils ont envoyé une officieux version mise à jour de la gestion de ODP.net bibliothèque qui semble résoudre le problème.
J'espère que le correctif doit faire partie de la prochaine version ODAC (la dernière disponible aujourd'hui est de Oct 2015).
Si vous voyez ce message d'erreur dans votre application, il est probablement dû à la même bug dans la gestion ODP.net bibliothèque, pas la façon dont vous l'utiliser.
Ce qui est ennuyeux, c'est qu'ils ne semblent pas accorder beaucoup d'attention aux messages affichés sur leurs forums, si vous n'avez pas de compte de support, la seule chose que vous pouvez faire est d'attendre une mise à jour
Oracle.ManagedDataAccess de nuget: 12.1.24160419 - même problème.
Même problème avec la 12c de l'ODP .NET client, Version du Produit 4.121.2.20150926 ODAC la VERSION 4. Et il m'est arrivé par hasard et pour la première fois après 4 mois de débogage de l'amende juste. Il est allé à mon
catch
, puis il a continué à le prochain appel de la fonction. J'ai sauvegardé mon debug curseur de relancer ma DB mise à jour de la fonction qu'a l'exception, et puis il est allé à travers très bien sans l'erreur. Peut-être que la solution est simplement d'avoir une routine qui vérifie la présence de l'erreur et de ré-exécute la DB de la fonction de mise à jour si il le trouve?En fait, certains n'ont plus de recherche. Semble que cette question pourrait en fait être un doublon: stackoverflow.com/questions/35352060/...
OriginalL'auteur vc 74
Après la lecture, grâce à une question similaire à ODP.NET Oracle.ManagedDataAcess aléatoire ORA-12570 erreurs, il me semble que c'est en fait un regroupement de problème. Apparemment, la réponse est à mettre
Pooling=false
dans la Chaîne de Connexion, ou de trouver simplement le nombre de threads peut être ouvert et combien de temps la connexion peut être ouvert avant qu'il ne devienne trop pour Oracle pour gérer. Ce fut la réponse de l'auteur de la question posté le:OriginalL'auteur vapcguy