Plus de données à lire à partir d'erreur de socket
Nous sommes à l'aide d'Oracle comme base de données de notre application Web. L'application fonctionne bien la plupart du temps, mais nous en arrivons à ce "plus de données à lire à partir de socket" erreur.
Caused by: java.sql.SQLRecoverableException: No more data to read from socket
at oracle.jdbc.driver.T4CMAREngine.unmarshalUB1(T4CMAREngine.java:1142)
at oracle.jdbc.driver.T4CMAREngine.unmarshalSB1(T4CMAREngine.java:1099)
at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:288)
at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:191)
at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:523)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:207)
at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:863)
at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1153)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1275)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3576)
at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3620)
at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeQuery(OraclePreparedStatementWrapper.java:1491)
at org.apache.commons.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:93)
at org.apache.commons.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:93)
at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:208)
at org.hibernate.loader.Loader.getResultSet(Loader.java:1869)
at org.hibernate.loader.Loader.doQuery(Loader.java:718)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:270)
at org.hibernate.loader.Loader.doList(Loader.java:2449)
... 63 more
Nous utilisons spring, hibernate et j'ai la suite de la source de données dans mon fichier de contexte d'application.
<bean class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close" id="dataSource">
<property name="driverClassName" value="${database.driverClassName}" />
<property name="url" value="${database.url}" />
<property name="username" value="${database.username}" />
<property name="password" value="${database.password}" />
<property name="defaultAutoCommit" value="false" />
<property name="initialSize" value="10" />
<property name="maxActive" value="30" />
<property name="validationQuery" value="select 1 from dual" />
<property name="testOnBorrow" value="true" />
<property name="testOnReturn" value="true" />
<property name="poolPreparedStatements" value="true" />
<property name="removeAbandoned" value="true" />
<property name="logAbandoned" value="true" />
</bean>
Je ne suis pas sûr de savoir si c'est à cause des erreurs d'application, base de données des erreurs ou des erreurs de réseau.
Nous voir la suite sur l'oracle des journaux
Thu Oct 20 10:29:44 2011
Errors in file d:\oracle\diag\rdbms\ads\ads\trace\ads_ora_3836.trc (incident=31653):
ORA-03137: TTC protocol internal error : [12333] [4] [195] [3] [] [] [] []
Incident details in: d:\oracle\diag\rdbms\ads\ads\incident\incdir_31653\ads_ora_3836_i31653.trc
Thu Oct 20 10:29:45 2011
Trace dumping is performing id=[cdmp_20111020102945]
Thu Oct 20 10:29:49 2011
Sweep [inc][31653]: completed
Sweep [inc2][31653]: completed
Thu Oct 20 10:34:20 2011
Errors in file d:\oracle\diag\rdbms\ads\ads\trace\ads_ora_860.trc (incident=31645):
ORA-03137: TTC protocol internal error : [12333] [4] [195] [3] [] [] [] []
Incident details in: d:\oracle\diag\rdbms\ads\ads\incident\incdir_31645\ads_ora_860_i31645.trc
Thu Oct 20 10:34:21 2011
Oracle Version : 11.2.0.1.0
- Il ressemble à votre serveur Oracle rudement déconnecté de votre connexion à l'application alors que c'était la lecture une sorte de jeu de résultats.
- Cette erreur le plus probable se produit dans les applications qui utilisent une base de données de pool de connexions. Lorsque l'application extrait d'une connexion qui a été suspendu ou a été staled, et l'a utilisé pour se connecter à la base de données, cette erreur se produit.
- J'ai mis le regroupement de connexion de configuration pour valider la connexion avant d'être utilisé. Ne faut pas que le non-respect de la rassis connexions
- Vous obtenez exactement la même erreur et de la pile?
- mots-clés de google: en allemand: "Keine weiteren Daten aus Socket zu lesen"
- parfois, il semble même en avoir un ORA numéro attribué: "ORA-17410 plus de données à partir de socket": plus de détails sur le problème de Burleson: dba-oracle.com/t_sqlexception_17410_no_more_data.htm
- Cette réponse stackoverflow.com/a/16964640/119741 il fixe
Vous devez vous connecter pour publier un commentaire.
Pour les erreurs comme cela, vous devez associer le support d'oracle. Malheureusement, vous ne mentionnez pas quelle version d'oracle que vous utilisez. L'erreur peut être liée à l'optimiseur de lier jeter un oeil. En fonction de la version oracle différentes solutions s'appliquent.
Vous avez deux façons d'aborder ce:
_optim_peek_user_binds = false
Bien sûr, soulignent les paramètres doivent être définis uniquement si elle a été informée par le support d'oracle
Nous avons été confrontés à un même problème, nous avons résolu en augmentant
initialSize
etmaxActive
taille de pool de connexions.Vous pouvez vérifier ce lien
Peut-être que cela aide quelqu'un.
Un autre cas: Si vous êtes à la date d'envoi des paramètres à un sql paramétrée, assurez-vous que vous avez envoyé
java.sql.Timestamp
et pasjava.util.Date
. Sinon vous avezExemple de déclaration:
Dans notre code java, nous utilisons
org.apache.commons.dbutils
et nous avons les éléments suivants:Ci-dessus n'était pas jusqu'à ce que nous avons changé les paramètres de date à
java.sql.Timestamp
Essayer deux choses:
java/jdk1.6.0_31/jre/lib/security/Java.security
changementsecurerandom.source=file:/dev/urandom
àsecurerandom.source=file:///dev/urandom
J'ai eu le même problème. J'ai été en mesure de résoudre le problème de l'application côté, dans le scénario suivant:
J'ai utilisé la connexion de base de données mise en commun
apache tomcat-jdbc
:Vous pouvez prendre les paramètres de configuration suivants comme référence:
Cette configuration est suffisante pour corriger l'erreur. Cela fonctionne très bien pour moi dans le scénario mentionné ci-dessus.
Pour plus de détails sur la configuration d'apache tomcat-jdbc: https://tomcat.apache.org/tomcat-7.0-doc/jdbc-pool.html
La dégradation de l'environnement JRE de 7 à 6 résolu ce problème pour moi.
C'est un niveau très faible d'exception, qui est ORA-17410.
Il se peut par plusieurs raisons:
Un problème temporaire sur les réseaux.
Mauvais pilote JDBC version.
Quelques problèmes avec les données particulières de la structure (sur la base de données secondaires).
Base de données de bogues.
Dans mon cas, c'était un bug de nous frapper sur la base de données, qui doit être corrigé.
Oui, comme @ggkmath dit, parfois un bon vieux redémarrage est exactement ce dont vous avez besoin. Comme lors de la "contacter l'auteur et demandez-lui de réécrire l'application, pendant ce temps d'attente" n'est pas une option.
Ce qui arrive quand une application ne s'écrit pas (encore) d'une manière qu'il peut gérer le redémarrage de la base de données.
Dans notre cas, nous avons eu une requête qui permet de charger plusieurs éléments avec select * from x, où quelque chose dans (...)
La partie a été si longtemps pour le test de référence.(17mb que le texte de la requête). La requête est valide, mais le texte aussi long. Le raccourcissement de la requête résolu le problème.
Me semblait fixer mon exemple en supprimant le paramètre de l'espace réservé pour une requête paramétrée.
Pour une raison quelconque, l'utilisation de ces espaces fonctionnent très bien, et puis ils ont arrêté de travailler et j'ai obtenu l'erreur/bug.
Comme une solution de contournement, j'ai remplacé les littéraux pour ma espaces et il a commencé à travailler.
Supprimer cette
Utiliser cette
J'ai eu cette erreur puis redémarré mon serveur GlassFish qui a tenu des pools de connexion entre mon application client et la base de données, et l'erreur a disparu. Donc, essayez de redémarrer votre serveur d'applications, le cas échéant.