Voyez l'erreur ci-dessous lorsque vous essayez de vous connecter à Oracle 11g sous Red Hat Linux 64 bits à l'aide de pilotes jdbc minces. J'apprécierais beaucoup si quelqu'un peut apporter plus de lumière sur la façon de procéder pour résoudre ce problème.
Caused by: Java.net.SocketException: Connection reset
at Java.net.SocketOutputStream.socketWrite(SocketOutputStream.Java:113)
at Java.net.SocketOutputStream.write(SocketOutputStream.Java:153)
at Oracle.net.ns.DataPacket.send(DataPacket.Java:199)
at Oracle.net.ns.NetOutputStream.flush(NetOutputStream.Java:211)
at Oracle.net.ns.NetInputStream.getNextPacket(NetInputStream.Java:227)
at Oracle.net.ns.NetInputStream.read(NetInputStream.Java:175)
at Oracle.net.ns.NetInputStream.read(NetInputStream.Java:100)
at Oracle.net.ns.NetInputStream.read(NetInputStream.Java:85)
at Oracle.jdbc.driver.T4CSocketInputStreamWrapper.readNextPacket(T4CSocketInputStreamWrapper.Java:123)
at Oracle.jdbc.driver.T4CSocketInputStreamWrapper.read(T4CSocketInputStreamWrapper.Java:79)
at Oracle.jdbc.driver.T4CMAREngine.unmarshalUB1(T4CMAREngine.Java:1122)
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.T4CTTIoauthenticate.doOAUTH(T4CTTIoauthenticate.Java:366)
at Oracle.jdbc.driver.T4CTTIoauthenticate.doOAUTH(T4CTTIoauthenticate.Java:752)
at Oracle.jdbc.driver.T4CConnection.logon(T4CConnection.Java:366)
Vous n'avez inclus aucun détail sur le problème, comme ce qui a changé? Est-ce une nouvelle configuration pour vous ou est-ce que cela a soudainement cessé de fonctionner? Savez-vous si vous avez assez de connexions disponibles? Cela se produit-il à chaque connexion ou est-ce intermittent?
Considérant que l'erreur se produit pendant le processus d'ouverture de session, voici quelques possibilités:
Vérifiez que le thread de stackoverflow suivant indique comment vérifier le nombre de connexions actives et le nombre maximal de connexions. Je m'attendrais à une erreur «ORA-00018: nombre maximal de sessions dépassé» si tel était le problème, ce qui peut ne pas être le cas. Mais ça vaut la peine de vérifier.
Comment vérifier le nombre maximum de connexions autorisées à une base de données Oracle?
Nous avons eu quelque chose de très similaire, déplacer un programme de 32 à 64 bits et un certain nombre de processus simultanés génèrent l'erreur IO Erreur: réinitialisation de la connexion.
Je suis tombé sur ce qui l'a corrigé:
https://community.Oracle.com/message/3701989
En gros, ajoutez le paramètre -Djava.security.egd = file:/dev /./ urandom et ça ira :)
J'ai rencontré un problème similaire avec l'importation Oracle Sqoop et j'ai implémenté le correctif suggéré par ceci link
Ce paramètre a aidé à résoudre le problème:
-Dmapred.child.Java.opts="-Djava.security.egd=file:///dev/urandom"
et j'ai changé le nom de la propriété de configuration mapred-site.xml comme suit:
mapreduce.admin.map.child.Java.opts -Djava.security.egd=file:///dev/urandom
Ceci est un peu spécifique à sqoop, mais je pense que la définition de l’option de la machine virtuelle Java -Djava.security.egd=file:///dev/urandom"
Comme la pile n'indique aucune ORA, vous avez des problèmes de réseau sous-jacents.
Avait le même problème - a échoué sur Linux (parfois), a travaillé sur Windows (toujours).
Lisez à propos de la raison (et de la solution) sur ces sites:
Ce problème était également dû au fait que les paramètresNOM_HÔTEétaient erronés. Ma tentative de connexion a été pendue à:
"main" prio=10 tid=0x00007f7cc8009000 nid=0x2f3a runnable [0x00007f7cce69e000]
Java.lang.Thread.State: RUNNABLE
at Java.net.Inet4AddressImpl.getLocalHostName(Native Method)
at Java.net.InetAddress.getLocalHost(InetAddress.Java:1444)
at Sun.security.provider.SeedGenerator$1.run(SeedGenerator.Java:176)
at Sun.security.provider.SeedGenerator$1.run(SeedGenerator.Java:162)
at Java.security.AccessController.doPrivileged(Native Method)
Assurez-vous donc d'avoir une entrée pour votre nom d'hôte dans /etc/hosts/
.
Si vous émettez une commande hostname
comme celle-ci:
$ hostname
my.server.com
Vous avez besoin d'une ligne dans votre /etc/hosts
:
127.0.0.1 my my.server.com