ODP.NET Oracle.ManagedDataAcess aléatoire ORA-12570 erreurs
Je suis en train de migrer vers Oracle.ManagedDataAcess du non géré version et recevoir des randoms ORA-12570 TNS:paquet de lecteur de l'échec.
Je ne sais pas pourquoi cette erreur commence, mais une fois qu'il commence, à chaque demande ultérieure, donne la même erreur pendant environ 10 à 30 minutes, puis il travaille à nouveau pour un autre 10 à 30 minutes et ainsi de suite.
Si c'est un hasard d'échecs ultérieurs pour un certain temps, puis de succès de
Déjà essayé beaucoup de choses, pour reprendre l':
L'environnement:
- Oracle.ManagedDataAcess version 12.1.2400 (4.121.2.20150926) (nuget) (pas de gac de référence installé sur le serveur qui pourrait remplacer le bac version)
- Oracle Serveur de Base de données Oracle 12c Enterprise Edition Version 12.1.0.2.0 - 64bit Production
- Windows 2012 (mise à Jour de Windows ok)
Vérifié:
- Pare-feu: Il n'est pas un problème de pare-feu
- Machine d'erreur: Le même problème se pose sur ma machine, d'Azur, à WebApp et AWS EC2
- Interférence: Il n'y a pas de sniffer en cours d'exécution, transparent proxy etc.
- De chiffrement: je n'ai pas utiliser n'importe quel type de cryptage (sauf si il y a quelque chose activé par défaut je ne sais pas)
- Connexions de la chaîne: de La même chaîne de connexion fonctionne parfaitement avec la version non géré
Renseignements supplémentaires:
- C'est une base de données de production, il est très stable
- L'application est compilée à anycpu, le pool d'applications IIS est limité à 64bits
- Im test exactement la même demande à chaque fois (juste un rafraîchissement sur une url d'un repos ws, webapi), de sorte qu'il n'est pas lié au format de données
Configuration:
Serveur sqlnet.ora
SQLNET.AUTHENTICATION_SERVICES= (NTS) Des NOMS.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
Application Web.config
<connectionStrings>
<add name="XXXX" connectionString="Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=xxx.xxx.com)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=xxx)));User Id=xxxxx;Password=xxxxx;" />
</connectionStrings>
<configSections>
<section name="oracle.manageddataaccess.client" type="OracleInternal.Common.ODPMSectionHandler, Oracle.ManagedDataAccess, Version=4.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
</configSections>
<oracle.manageddataaccess.client>
<version number="*">
<dataSources>
<!--<dataSource alias="SampleDataSource" descriptor="(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORCL))) " />-->
</dataSources>
<settings>
<setting name="SQLNET.AUTHENTICATION_SERVICES" value="NONE"/> <!--NTS-->
<setting name="sqlnet.crypto_checksum_server" value="rejected"/>
<setting name="sqlnet.crypto_checksum_client" value="rejected"/>
<setting name="SQLNET.ENCRYPTION_SERVER" value="rejected"/>
</settings>
</version>
</oracle.manageddataaccess.client>
Quelques références:
https://community.oracle.com/thread/3634263?start=0&tstart=0
ODP.net géré pilote jette ORA-12570: Session Réseau: paquet Inattendu erreur de lecture
Géré Client Oracle avec Oracle des Options de Sécurité Avancées
ODP.NET erreur dans IIS: ORA-12357 Réseau de la Fin de la Session de fichier
Mise à JOUR de 1
Après la mise en commun changé (comme je l'ai décrit comme une réponse ici), j'ai décidé de publier une version pour faire un peu de réel test. Après 1 jour et les utilisateurs se plaindre de la performance, j'ai une autre erreur: la Valeur ne peut pas être null. Nom du paramètre: byteArray
J'ai changé la référence à la non géré version et que tout allait bien à nouveau, plus rapide, sans bytearray erreur, meilleure mise en commun de gestion.
Donc je vais juste donner de la gestion de version pour l'instant, peut-être que je vais essayer encore une fois sur Oracle prochaine version.
Ici quelques références sur cette nouvelle erreur, comme vous pouvez le voir, on dirait un autre bug (encore sans réponse).
https://community.oracle.com/thread/3676588?start=0&tstart=0
EF + ODP.NET + CLOB = Valeur Ne peut pas être Null - nom de Paramètre: byteArray?
Jusqu'à présent, les raisons pour pas utiliser:
- Mise en commun de gestion de bug
- CLOB null/not null bytearray erreurs
- Dégradation des performances probablement liée à la mise en commun de bug
- Très détaillé de la question, la bonne! Pouvez vous essayer avec "la Mutualisation=False" dans votre chaîne de connexion? Je soupçonne que vous avez un problème avec le regroupement de connexions
- Ok je viens de changé à la mise en commun=false, maintenant je vais attendre si l'erreur se produit de nouveau. Merci!
- Vérifiez le journal des alertes sur la base de données secondaires pour les erreurs dans le même temps. Ensuite, la recherche et la résolution de ces problèmes....
- Est-ce résolu? Je suis encore en train de ce en 2016! Mêmes composants (Oracle Managed d'Accès aux Données).
- Pas encore de. La dernière version sur NuGet est toujours le même: Publié pour la Dernière fois: 2015-10-14 | Dernière Version: 12.1.2400
- Merci pour la suggestion d'utiliser non géré version, je n'ai pas le choix trop.
- Voir mon commentaire sur l'enregistrement dans le journal des alertes même temps que l'erreur se produit. Qui peut être la clé.
Vous devez vous connecter pour publier un commentaire.
Après la désactivation de la mise en commun (Pooling=False), comme @bdn02 suggéré, j'ai pu confirmer qu'il travaillait. Cependant, je pense qu'il devrait affecter les performances et j'étais inquiet au sujet de la publication de ce code en production sans mise en commun (je pensais que les valeurs standards ont été ok).
J'ai donc essayé de nombreuses configurations et ressemble en quelque sorte (il n'est pas très clair) de la piscine de gestion d'oracle était en train de relever un ORA-12570 erreur et, après une période de temps, les sessions sont fermées et que l'application fonctionne à nouveau.
De trouver la meilleure configuration avec le regroupement activé, j'ai créé une application de test pour commencer à 50 threads (chacun fait 1 test de chaque 50ms), et une diminution du pool par défaut les valeurs jusqu'à ce que l'erreur arrêté. De cette façon, j'ai été en mesure d'obtenir une configuration optimale, stable, sans aucune erreur.
Évidemment, il ne s'applique pas à tous les serveurs, mais c'est ma dernière chaîne de connexion de configuration:
Je vous donne un script powershell que j'utilise pour vérifier la connectivité de base de données.
$baselogpath = ""
$filesuffix = "_GetDBConnection"
$dbuser =""
$dbpassword =""
$dbalias = "";
$command = new-Object Oracle.DataAccess.Client.OracleCommand($queryString, $connection);
$connection.Open();
$count = $command.ExecuteScalar();
$connection.Close();
$message = "Records found: " + $count;
$esito = "OK";
}
Catch
{
$message = $_.Exception.Message;
$esito = "KO";
}
$now = Get-Date
$filename = $baselogpath + $now.Year + $now.Month.Tostring("00") + $now.Day.Tostring("00") + $filesuffix + ".log"
if (!(Test-Path($filename)))
{
$fileheader = "Time Esito, Elapsed, Message"
$fileheader > $filename
}
$Time.Stop();
$Elapsed = $Time.Elapsed;
$row = $now.Hour.toString("00") + ":" + $now.Minute.toString("00") + ":" + $now.Second.toString("00") + " " + $esito + "," + $Elapsed.Hours.toString("00") + ":" + $Elapsed.Minutes.toString("00") + ":" + $Elapsed.Seconds.toString("00") + "," + $message;
$row >> $filename
Pouvez-vous essayer de prévoir ce script à chaque minute, à l'aide de la gestion de version d'Oracle dll géré?
Je voudrais comprendre si le problème est uniquement sur une application web ou si oracle est géré pilote connexes.
Vous vous permettrait de faire un test avancé, vous pouvez planifier une copie de ce script qui utilisent le non géré version d'oracle.dataaccess.
Bonne chance
J'ai rencontré ce même erreur intermittente à l'aide de SQL Server Reporting Services 2016 avec l'ODAC 12c Release 4:
Ajout de la mise en commun paramètre
Data Source="myOracleDB";Pooling="false"
à la source de données Oracle dans SSRS complètement résolu le problème.Immédiatement ré-exécution de l'état fonctionne très bien.
Je me rends compte il y a des problèmes de performances potentiels dans la création d'une nouvelle connexion à chaque fois plutôt que d'utiliser la piscine, mais jusqu'à ce que Oracle corrige cela, je ne veux pas que mes utilisateurs de rencontrer cette erreur.
J'ai reçu cette erreur dans une application d'exception. Il n'y avait pas plus de détails utiles à l'intérieur de l'exception. Changer les options de groupement de ne corrige pas le problème, ni la désactivation de la mise en commun. Une fois le traçage est activé, c'était une erreur "ORA-12537 réseau de la fin de la session de fichier" dans le fichier de trace (pas propagé à l'exception de l'application). Ce thread suggère une ancienne version du pilote oracle qui est à blâmer. J'ai vérifié, et j'ai été en utilisant la version de 2014. La mise à niveau vers la 2017/12.2 c/12.2.0.1.0 version résolu le problème.