Сетевой адаптер не может установить соединение при соединении с БД Oracle - PullRequest
18 голосов
/ 20 октября 2011

При попытке подключиться к удаленной базе данных 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's 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");
}

Ответы [ 4 ]

15 голосов
/ 20 октября 2011

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

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

3 голосов
/ 15 октября 2012

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

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

1 голос
/ 20 октября 2011

Посмотрите на этот пост на ранчо Java:

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

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

0 голосов
/ 02 января 2017

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...