Не удается подключиться к Oracle 11g с сетевой машины через java

У меня есть orace 11g, работающий на 192.168.1.217, и я пытаюсь подключить его с помощью драйвера JDBC с java, и это дает мне следующую ошибку

IO Error: The Network Adapter could not establish the connection

Я использую библиотеку ojdbc6.jar.

Вот мой код

public void makeOracleConnection() {
        try {
            Class.forName("oracle.jdbc.OracleDriver");
            oraCon = DriverManager.getConnection("jdbc:oracle:thin:@192.168.1.217:1521:orcl", "hr", "hr");
            oraStmt = oraCon.createStatement();
            oraRsStmt=oraCon.createStatement(ResultSet.CONCUR_READ_ONLY,ResultSet.TYPE_SCROLL_INSENSITIVE);
        } catch (Exception e) {
            System.out.println("Error while making connection with Database  : " + e.getMessage());
        }
    }

Я также пытался пропинговать 192.168.1.217, тогда контакты прошли успешно. Также на этой машине работает TNSLISTENER. пожалуйста помоги.

Пожалуйста, найдите трассировку стека печати здесь

run:
java.sql.SQLRecoverableException: IO Error: The Network Adapter could not establish the connection

    at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:743)
    at oracle.jdbc.driver.PhysicalConnection.connect(PhysicalConnection.java:657)
    at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
    at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:560)
    at java.sql.DriverManager.getConnection(DriverManager.java:664)
    at java.sql.DriverManager.getConnection(DriverManager.java:247)
    at test.oracle.makeOracleConnection(oracle.java:30)
    at test.oracle.<init>(oracle.java:21)
    at test.oracle.main(oracle.java:69)
Caused by: oracle.net.ns.NetException: The Network Adapter could not establish the connection
    at oracle.net.nt.ConnStrategy.execute(ConnStrategy.java:470)
    at oracle.net.resolver.AddrResolution.resolveAndExecute(AddrResolution.java:506)
    at oracle.net.ns.NSProtocol.establishConnection(NSProtocol.java:595)
    at oracle.net.ns.NSProtocol.connect(NSProtocol.java:230)
    at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1452)
    at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:496)
    ... 8 more
Caused by: java.net.ConnectException: Connection refused: connect
    at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
    at java.net.Socket.connect(Socket.java:589)
    at oracle.net.nt.TcpNTAdapter.connect(TcpNTAdapter.java:163)
    at oracle.net.nt.ConnOption.connect(ConnOption.java:159)
    at oracle.net.nt.ConnStrategy.execute(ConnStrategy.java:428)
    ... 13 more
BUILD SUCCESSFUL (total time: 1 second)

person Mr x    schedule 18.05.2016    source источник
comment
Нам нужно больше информации об ошибке. Если трассировка стека или что-то еще регистрируется, вы должны опубликовать это. Вы также должны убедиться, что что-то действительно прослушивает порт 1521 в 192.168.1.217 (например, запустите ss -l "sport = :1521" в Linux).   -  person K Erlandsson    schedule 18.05.2016
comment
это на машине с виндовс.   -  person Mr x    schedule 18.05.2016
comment
Найти трассировку стека печати в отредактированном вопросе   -  person Mr x    schedule 18.05.2016
comment
Может глупо, но пользователь hr получил права на подключение? У нас несколько раз возникала проблема, что в результате операций для нас создавалась учетная запись оракула, но они забывали предоставить ему право на подключение. Посмотрите здесь stackoverflow.com/questions/9447492/   -  person cheffe    schedule 20.05.2016
comment
Я могу подключиться к hr с помощью sqldeveloper, но когда я пытаюсь использовать удаленную машину, это не работает.   -  person Mr x    schedule 20.05.2016


Ответы (3)


Вы получаете ошибку

java.net.ConnectException: Connection refused: connect

Это означает, что на машине и порту, к которому вы пытаетесь подключиться, ничего не прослушивается. Ваш код Java выглядит правильно, поэтому я продолжу расследование того, что Oracle действительно прослушивает порт 1521 на 192.168.1.217.

Если вы запустите run netstat -n на сервере, вы должны найти строку, которая выглядит как

TCP    [::]:1521              [::]:0                 LISTENING

Если что-то действительно прослушивает этот порт. Если вы не найдете эту строку, проверьте конфигурацию Oracle.

person K Erlandsson    schedule 18.05.2016
comment
Это показывает то же самое, разница в том, что LISTENING заменен на TIME_WAIT - person Mr x; 18.05.2016

Попробуйте подключиться с помощью другого инструмента, например sqlplus, чтобы убедиться, что проблема не в Oracle. Если вы не можете подключиться к разработчику sqlplus/sql, убедитесь, что ваш оракул настроен на разрешение удаленных подключений, а также прослушивает заданные адреса/порты.

person Nadir    schedule 18.05.2016
comment
sqlplus работает нормально. И файл tnsnames.ora имеет tcp-соединение на порту 1521 с sid orcl - person Mr x; 18.05.2016
comment
хм.. хорошо, так что, может быть, какие-то причудливые правила брандмауэра, которые блокируют ваше соединение? - person Nadir; 18.05.2016
comment
я отключил брандмауэр - person Mr x; 18.05.2016
comment
ок, а когда подключаешься через sqlplus, ты используешь учетную запись hr или какую-то встроенную? Возможно, база данных находится в смонтированном состоянии (но не запущена), и вам нужно войти в систему с учетными данными базы данных и запустить ее правильно (просто удачная догадка, у меня заканчиваются идеи) - person Nadir; 18.05.2016

public void makeOracleConnection() {
    try {
        Class.forName("oracle.jdbc.OracleDriver");
        Connection oraCon = DriverManager.getConnection("jdbc:oracle:thin:@192.168.1.217:1521:orcl", "hr", "hr");
        Statement oraStmt = oraCon.createStatement();
        //oraRsStmt=oraCon.createStatement(ResultSet.CONCUR_READ_ONLY,ResultSet.TYPE_SCROLL_INSENSITIVE);
        ResultSet rs = oraStmt.executeQuery("select hello as result from dual");

        while(rs.next()) {
             System.out.println(rs.getString("result"));
        } 
    } 
    catch (Exception e)
        System.out.println("Error while making connection with Database  : " + e.getMessage());
    }
}

Попробуйте это. Надеюсь, это поможет. Мне также не нравится ваш путь подключения. Это правильно? Я думаю, что это должно быть что-то вроде этого:

jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(LOAD_BALANCE=YES)(ADDRESS=(PROTOCOL=tcp)(HOST=ip adres)(PORT=port)))(CONNECT_DATA=(SERVICE_NAME = orcl)))","username","password"
person Medet Koilybay    schedule 27.05.2016
comment
Пожалуйста, дайте мне знать, если это поможет) - person Medet Koilybay; 27.05.2016