web-dev-qa-db-fra.com

L'adaptateur réseau n'a pas pu établir la connexion lors de la connexion à Oracle DB.

Lors de la tentative de connexion à une base de données Oracle distante via JDBC, je reçois l'exception suivante:

Java.sql.SQLRecoverableException: IO-fout: The Network Adapter could not establish the connection
at Oracle.jdbc.driver.T4CConnection.logon(T4CConnection.Java:419)
at Oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.Java:536)
at Oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.Java:228)
at Oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.Java:32)
at Oracle.jdbc.driver.OracleDriver.connect(OracleDriver.Java:521)
at Java.sql.DriverManager.getConnection(DriverManager.Java:322)
at Java.sql.DriverManager.getConnection(DriverManager.Java:358)

Ce qui suit est ma mise en place:

Database: Oracle 10g Release 2 Standard Edition

JDBC library: ojdbc6.jar
JDBC driver: Oracle.jdbc.driver.OracleDriver
JDBC URL: jdbc:Oracle:thin:@9.2.2.2:1521:ORCL where ORCL is database's SID
JDBC User/pwd: Correct username / password

Étrange à propos de ce problème, c'est que la connexion fonctionne très bien lorsque je travaille à partir du travail. Lorsque j'essaie cependant de me connecter depuis chez moi via une connexion VPN AT & T, cela ne fonctionne pas.

J'ai confirmé que je pouvais atteindre l'adresse IP et j'ai également transmis l'adresse IP sur le port 1521, ce qui fonctionne parfaitement. La connexion à la source de données à partir d'un serveur d'applications WebLogic local fonctionne également correctement. En outre, lorsque je tente de me connecter à la base de données via sqldeveloper, je peux également accéder à la base de données.

Cependant, je dois accéder à la base de données à partir d'une application autonome (à des fins de test). Quelqu'un at-il une idée pourquoi ce problème se produit? Et s’il existe des alternatives pour la connexion à une base de données Oracle distante, des alternatives que sqldeveloper et weblogic utilisent peut-être?

Voici un extrait du code qui tente de se connecter à la base de données:

public static void main(String args[]) throws ClassNotFoundException, SQLException {
    Class.forName("Oracle.jdbc.driver.OracleDriver");
    Connection conn = DriverManager.getConnection("jdbc:Oracle:thin:@9.2.2.2:1521:ORCL", "user", "pwd");
}
18
user976230

Lorsqu'un client se connecte à un serveur Oracle, il se connecte d'abord au service d'écoute Oracle. Il redirige souvent le client vers un autre port. Le client doit donc ouvrir une autre connexion sur un port différent, bloqué par le pare-feu.

Vous avez donc peut-être rencontré un problème de pare-feu en raison de la redirection de port Oracle. Il devrait être possible de le diagnostiquer avec un moniteur de réseau sur la machine client ou avec le logiciel de gestion de pare-feu sur le pare-feu.

15
Codo

Si c'est sur une machine Linux, je vous suggère d'ajouter le nom IP de la base de données et la résolution IP au /etc/hosts.

J'ai la même erreur et lorsque nous faisons ce qui précède, cela fonctionne bien.

3
user1747864

Jetez un coup d'œil à cet article sur Java Ranch:

http://www.coderanch.com/t/300287/JDBC/Java/Io-Exception-Network-Adapter-could

"La solution pour mon" exception Io: l'adaptateur réseau n'a pas pu établir la connexion ". L'exception consistait à remplacer l'IP du serveur de base de données par le nom DNS."

1
Leonardo Cruz

J'ai eu le même problème avant. Mais cela a été résolu lorsque j'ai commencé à utiliser le nom d'hôte au lieu de l'adresse IP dans ma chaîne de connexion.

0
Shreyas SG