Bonjour,

Nous avons rencontré le problème suivant ces derniers jours.

Nous avons une application java qui utilise un schéma dans une db multi-purpose sur un serveur db oracle 10g (serveur 64 bits). Pour les besoins de l'application, qui doit accéder à deux autres db distantes (une db oracle 8 sur un serveur 32 bits et une db oracle 10 sur un serveur 32 bits), des db links ont été mis en place vers ces deux db.

Lorsque l'on ramène beaucoup de données via l'un ou l'autre des db links, on obtient l'erreur suivante dans la console oracle:

Mon Oct 27 10:46:14 2008
Error 2068 trapped in 2PC on transaction 6.45.1820. Cleaning up.
Error stack returned to user:
ORA-02068: suivant erreur sévère de BIVDEV_TFFD.WORLD
ORA-12571: TNS : échec à l'écriture du paquet
Lors d'un select entre les db oracle 8 (32 bits) et oracle 10 (64 bits)

Thu Oct 30 16:36:30 2008
Error 2068 trapped in 2PC on transaction 31.3.2. Cleaning up.
Error stack returned to user:
ORA-02068: suivant erreur sévère de W4D_W4.WORLD
ORA-12571: TNS : échec à l'écriture du paquet
Lors d'un select entre les db oracle 10 (32 bits) et oracle 10 (64 bits)

Voici l'erreur remontée dans la console java:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
java.sql.SQLException: Il n'y a plus de données à lire dans le socket
	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146)
	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:208)
	at oracle.jdbc.driver.T4CMAREngine.unmarshalUB1(T4CMAREngine.java:1123)
	at oracle.jdbc.driver.T4CMAREngine.unmarshalSB1(T4CMAREngine.java:1075)
	at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:480)
	at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:219)
	at oracle.jdbc.driver.T4CPreparedStatement.fetch(T4CPreparedStatement.java:1042)
	at oracle.jdbc.driver.OracleResultSetImpl.close_or_fetch_from_next(OracleResultSetImpl.java:297)
	at oracle.jdbc.driver.OracleResultSetImpl.next(OracleResultSetImpl.java:213)
	at be.nsi.java.db.environnement.Db_environnement_manager.populate_recherche(Db_environnement_manager.java:386)
	at org.apache.jsp.Templates.search_jsp._jspService(org.apache.jsp.Templates.search_jsp:987)
	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:99)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:325)
	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:295)
	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:245)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
	at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:674)
	at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:465)
	at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:400)
	at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:303)
	at fr.w4.http.W4Servlet.service(Unknown Source)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	at org.apache.catalina.servlets.InvokerServlet.serveRequest(InvokerServlet.java:419)
	at org.apache.catalina.servlets.InvokerServlet.doPost(InvokerServlet.java:169)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:825)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:731)
	at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:526)
	at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
	at java.lang.Thread.run(Thread.java:595)
lors d'un select sur une vue qui joint des tables des trois db, et donc utilise les deux db links (vers une db oracle 10 32 bits et vers une db oracle 8 32 bits).

L'erreur se produit avec un moins gros volume de données entre les deux db oracle 10 qu'entre la db oracle 10 et oracle 8.

A première vue, je dirais qu'il semble y avoir un problème de communication entre les deux types d'architecture (32 bits et 64 bits), mais je suis très loin d'être spécialiste dans le domaine.

La version de jdbc est 14.

Quelqu'un a-t'il déjà rencontré ce type d'erreur? Si oui quelles sont les solutions possibles?