Подтвердить что ты не робот

Сетевой адаптер не смог установить соединение при подключении к Oracle DB

При попытке подключения с удаленной базой данных Oracle через JDBC я получаю следующее исключение:

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)

Ниже приведена моя настройка:

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 SID
JDBC User/pwd: Correct username / password

Странная проблема заключается в том, что соединение работает отлично, когда я работаю с работы. Когда я пытаюсь подключиться, однако, из дома через VPN-соединение AT & T, оно не работает.

Я подтвердил, что могу достичь IP-адреса, а также telnetted ip на порту 1521, который работает отлично. Подключение к источнику данных с локального сервера приложений WebLogic также работает хорошо. Кроме того, при попытке подключиться к базе данных через sqldeveloper я также могу добраться до базы данных.

Мне нужно получить базу данных, однако из автономного приложения (для целей тестирования). У кого-нибудь есть идея, почему эта проблема возникает? И есть ли альтернативы для подключения к удаленной базе данных Oracle, альтернативы, которые могут использовать sqldeveloper и weblogic?

Вот фрагмент кода, пытающегося подключиться к базе данных:

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");
}
4b9b3361

Ответ 1

Когда клиент подключается к серверу Oracle, он сначала подключается к службе слушателей Oracle. Он часто перенаправляет клиента в другой порт. Таким образом, клиент должен открыть другое соединение на другом порту, который заблокирован брандмауэром.

Таким образом, на самом деле вы столкнулись с проблемой межсетевого экрана из-за перенаправления портов Oracle. Должна быть возможность диагностировать его с помощью сетевого монитора на клиентской машине или с помощью программного обеспечения управления брандмауэром на брандмауэре.

Ответ 2

Если он находится в ящике Linux, я бы предложил вам добавить имя IP-адреса базы данных и разрешение IP к /etc/hosts.

У меня такая же ошибка, и когда мы делаем это, он отлично работает.

Ответ 3

Взгляните на этот пост на Java Ranch:

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

"Решение для моего исключения Io: сетевой адаптер не смог установить соединение" Исключение заключалось в замене IP-адреса сервера базы данных на DNS-имя ".

Ответ 4

У меня была аналогичная проблема раньше. Но это было разрешено, когда я начал использовать имя хоста вместо IP-адреса в моей строке подключения.