powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Восстановление соединения с сервером Oracle
25 сообщений из 25, страница 1 из 1
Восстановление соединения с сервером Oracle
    #37718469
pvasea
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет. Вкратце проблема:
Приложение(jdbc) запрашивает исходные данные с сервера Oracle, формирует файлы-сценарии прозвонки и отправляет их по ftp на Asterisk.
Разрывы ftp восстанавливаю(благо у Apache есть библиотеки продвинутые) в автомате.
Но как быть когда с Oracle кратковременно рвётся соединение?
...
Рейтинг: 0 / 0
Восстановление соединения с сервером Oracle
    #37718479
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
connection-pool с тестированием и пересозданием соединией. Отвалилась операция - взяли другое соединение, запустили ещё раз.
...
Рейтинг: 0 / 0
Восстановление соединения с сервером Oracle
    #37720218
crazy_hands
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pvaseaВсем привет. Вкратце проблема:
Приложение(jdbc) запрашивает исходные данные с сервера Oracle, формирует файлы-сценарии прозвонки и отправляет их по ftp на Asterisk.
Разрывы ftp восстанавливаю(благо у Apache есть библиотеки продвинутые) в автомате.
Но как быть когда с Oracle кратковременно рвётся соединение?

Вы используете jdbc, проверьте вот что: Вы используете универсальное java.sql.Connection или же родной oracle.jdbc.driver.OracleConnection? При использование java.sql.Connection в связке с oracle.jdbc наблюдаются глюки.
...
Рейтинг: 0 / 0
Восстановление соединения с сервером Oracle
    #37720260
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crazy_handsВы используете jdbc, проверьте вот что: Вы используете универсальное java.sql.Connection или же родной oracle.jdbc.driver.OracleConnection? При использование java.sql.Connection в связке с oracle.jdbc наблюдаются глюки.
Что за феерический бред? java.sql.Connection это интерфейс, который oracle.jdbc.driver.OracleConnection реализует.
...
Рейтинг: 0 / 0
Восстановление соединения с сервером Oracle
    #37720268
crazy_hands
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowiczcrazy_handsВы используете jdbc, проверьте вот что: Вы используете универсальное java.sql.Connection или же родной oracle.jdbc.driver.OracleConnection? При использование java.sql.Connection в связке с oracle.jdbc наблюдаются глюки.
Что за феерический бред? java.sql.Connection это интерфейс, который oracle.jdbc.driver.OracleConnection реализует.

Это не бред это опыт многолетней работы. На веблоджике 10, например, это проявляется через 2-3 дня работы приложения, лечится перезагрузкой. Когда в приложении меняешь на oracle.jdbc.driver.OracleConnection, то приложение уже работает стабильно постоянно. Также такой глюк был и у последней версии оракл аппликейшн.
...
Рейтинг: 0 / 0
Восстановление соединения с сервером Oracle
    #37720307
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crazy_handsЭто не бред это опыт многолетней работы.

Опыт, который достаётся одним только наблюдением без понимания?

crazy_handsНа веблоджике 10, например, это проявляется через 2-3 дня работы приложения, лечится перезагрузкой. Когда в приложении меняешь на oracle.jdbc.driver.OracleConnection, то приложение уже работает стабильно постоянно. Также такой глюк был и у последней версии оракл аппликейшн.
Ну, то есть: было не знаем что, станцевали с бубном - помогло. Теперь всем советуем.

OracleConnection реализует интерфейс java.sql.Connection. Разница может быть только в том как и откуда экзмпляры этих объектов получены. java.sql.Connection это не какой-то там "универсальный" конекшн. Это просто список методов к которым можно обратится.
...
Рейтинг: 0 / 0
Восстановление соединения с сервером Oracle
    #37720501
pvasea
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот фрагменты кода. Где посоветуете выполнять тестирование пула?
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
static Connection con = null;   
................
   public void updateTManager(String vFlag) throws SQLException {
        PreparedStatement stmt_UpdtTManager_p = null;
        ResultSet rsetTManager = null;
        if (con == null)
            getDBConnection();
        try {
            stmt_UpdtTManager_p = 
                    con.prepareStatement("UPDATE RC.ADO_TManager SET dfADO= ?");
            stmt_UpdtTManager_p.setString(1, vFlag); 
            stmt_UpdtTManager_p.executeUpdate(); // execute update statement for RC.ADO_TManager
        } catch (SQLException ex) {
            System.err.println("SQLException on updateTManager(): " + 
                               ex.getMessage());
        } finally {
            stmt_UpdtTManager_p.close();
        }
    } // updateTManager()   
	......................
	
 public boolean getDBConnection() {
        while (con == null) {
            try {
                // Load the Oracle JDBC driver
                op.append("Connecting DB......." + "\n");
                logger.info("Connecting DB.......");


                DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());

                Properties info = new Properties();
                info.put("user", username.getText());
                info.put("password", password.getText());

                System.out.println("Connecting DB.......");
                // Connect to the database
                con = DriverManager.getConnection(url.getText().trim(), info);
 
                op.append("DB Connected." + "\n");
                System.out.println("DB Connected.");
                logger.info("DB Connected.");

            } catch (SQLException ex) {
                System.err.println("SQLException on getDBConnection(): " + 
                                   ex.getMessage());
            } finally {
                if (con == null) {
                    System.out.println("Failed connection");
                    return false;
                }
            }
        }
        return true;

    } // getDBConnection
...
Рейтинг: 0 / 0
Восстановление соединения с сервером Oracle
    #37720521
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pvasea,

Поле con необходимо убрать. Вместо него всегда использовать DataSource.getConnection()
В качестве DataSource использовать любой готовый пул, тот же Apache Commons DBCP. Там есть, например, параметр testOnBorrow, при каждом получении соединения, оно будет тестироваться простым запросом и, в случае ошибки, будет пересоздано.
...
Рейтинг: 0 / 0
Восстановление соединения с сервером Oracle
    #37720611
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
On 23.03.2012 18:32, Blazkowicz wrote:

> В качестве DataSource использовать любой готовый пул, тот же Apache Commons DBCP. Там есть, например, параметр
> testOnBorrow, при каждом получении соединения, оно будет тестироваться простым запросом и, в случае ошибки, будет
> пересоздано.

Разве что по dataSource.getConnection() в DBCP будет возвращаться не OracleConnection, а другая реализация, в результате
отпадут методы, объявленные именно в OracleConnection. Но до OracleConnection в DBCP можно достучаться.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Восстановление соединения с сервером Oracle
    #37720620
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Denis Popovотпадут методы, объявленные именно в OracleConnection


Автор и сейчас ими не пользуется:
static Connection con = null;
...
Рейтинг: 0 / 0
Восстановление соединения с сервером Oracle
    #37720683
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
On 23.03.2012 19:40, Blazkowicz wrote:

> Автор и сейчас ими не пользуется:
> static Connection con = null;

Ну автор сам написал, что это фрагменты.. а где-нибудь в коде вполне может быть вызов oracle.sql.CLOB.createTemporary(),
и аргументом у него Connection, но работает только с OracleConnection.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Восстановление соединения с сервером Oracle
    #37721517
pvasea
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,просьба пояснить физику DataSource.getConnection(). Сейчас я использую
Connection con = DriverManager.getConnection(url.getText().trim(), info);
Т.е. выбираю соединение из пула .
В чём отличие от использования DataSource.getConnection() ?
...
Рейтинг: 0 / 0
Восстановление соединения с сервером Oracle
    #37721736
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pvaseaConnection con = DriverManager.getConnection(url.getText().trim(), info);
Т.е. выбираю соединение из пула .

Как вы определили что это пул?
...
Рейтинг: 0 / 0
Восстановление соединения с сервером Oracle
    #37722023
pvasea
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,забыл поставить "?". Полагал, что соединение выбирается из пула. Не буду более задавать банальных вопросов. Где можно прочесть как и откуда генерятся соединения?
...
Рейтинг: 0 / 0
Восстановление соединения с сервером Oracle
    #37722312
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DriverManager.getConnection создаёт физическое содинение с сервером. Пул либо берется оракловый из драйвера, либо опенсорсный - C3P0, DBCP
...
Рейтинг: 0 / 0
Восстановление соединения с сервером Oracle
    #37728124
pvasea
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В продолжение темы, кому-нибудь будет интересно: MiniConnectionPoolManager
...
Рейтинг: 0 / 0
Восстановление соединения с сервером Oracle
    #37728131
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pvaseaВ продолжение темы, кому-нибудь будет интересно: MiniConnectionPoolManager
И какая от него польза? max connection?
...
Рейтинг: 0 / 0
Восстановление соединения с сервером Oracle
    #37728889
oneHalf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще в самом JDBC не помню с какой версии появился метод isValid для Connection, который и проверяет соединение на адекватность. В методе getDBConnection можно реализовать проверку, живое соединение или нет и переподнять если надо.
Единственная проблема - не все драйверы корректно реализуют данный метод.
...
Рейтинг: 0 / 0
Восстановление соединения с сервером Oracle
    #37728970
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
oneHalfЕдинственная проблема - не все драйверы корректно реализуют данный метод.
конечно.
Ведь соединение может порваться в любой момент:
а) вы ничего по БЛ не делаете (смотрите на экран)
б) вы взяли коннект для сохранения объекта
в) вы в процессе сохранения
Каждый вариант нужно обрабатывать индивидуально. т.к. индивидуальная БЛ.
Т.е. нет тут сабжа - АВТОвосстановление соединения.
Это не протокол TCP с гарантированной АВТОдоставкой.
...
Рейтинг: 0 / 0
Восстановление соединения с сервером Oracle
    #37729028
oneHalf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123конечно.
Ведь соединение может порваться в любой момент:
а) вы ничего по БЛ не делаете (смотрите на экран)
б) вы взяли коннект для сохранения объекта
в) вы в процессе сохранения
Каждый вариант нужно обрабатывать индивидуально. т.к. индивидуальная БЛ.
Т.е. нет тут сабжа - АВТОвосстановление соединения.
Это не протокол TCP с гарантированной АВТОдоставкой.

Не понял вообще ничего из вышенаписанного - БЛ видимо бизнес логика что ли, каждый вариант - это че вообще, обрабатывать индивидуально - это как. "Т.е. нет тут сабжа - АВТОвосстановление соединения." - это орг. вывод?

Ну порвалось "в любой момент" - ну обработал исключение, сделал n-ое количество попыток восстановить соединение, получилось - клёво, повторил транзакцию, не получилось - выдал сообщение о потери связи с бд.
...
Рейтинг: 0 / 0
Восстановление соединения с сервером Oracle
    #37729054
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ещё раз. "Восстановление соединения" решается индивидуально в каждой ИС. Они все разные по ТЗ и задачам.
У одних бабка сидит и пялится на экран в мухосранске. У других банковские транзакции 24х7
Если не согласен, то раскажи подробнее про:
oneHalfсделал n-ое количество попыток восстановить соединение
где это написать и чему равно n
PS
в общем случае есть
Код: sql
1.
select 'Test connection'


или обёртка из функции Коннект.ТыЖивой?
...
Рейтинг: 0 / 0
Восстановление соединения с сервером Oracle
    #37729091
oneHalf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что значит - "Восстановление соединения" решается индивидуально - можно пример хотя бы для двух случаев - я просто не понимаю о чем вы - о количестве попыток, таймауте или имеете ввиду просто другой алгоритм восстановления?

В любом случае для топикстартера, как мне кажется, не проблема "идивидуально" определиться и реализовать восстановление соединения по той логике, которая ему нужна, без прикручивания целого пула.

Просто пул может смешно выглядеть в случае, когда у меня 200 десктопных клиентов (двузвенка) держат по одному соединению к бд, а я чтобы решить проблему с обрывом, к каждому клиенту прикручиваю пул минимум из 2-х соединенией. Бд скажет мне спасибо.

Еще раз про реализацию isValid - она разная для разных бд, где то вообще метод не релизован.
Пример Postgre - http://postgresql.1045698.n5.nabble.com/jdbc4-isValid-int-implementation-td5115637.html , как сейчас там - не знаю.
...
Рейтинг: 0 / 0
Восстановление соединения с сервером Oracle
    #37729115
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
oneHalfПросто пул может смешно выглядеть в случае, когда у меня 200 десктопных клиентов (двузвенка) держат по одному соединению к бд,
полностью согласен.
Вот и я иду от простого к сложному ТЗ. А не наоборот (оверхед).
В простом случае (десктоп):
Аналог IE-Web. Например, ты читаешь этот форум. Как ты определишь что соединение порвалось?
Только нажав F5.
Т.е. аффтару:
- разберись в причине "рвётся". Таймаут неверный?
- повесь в меню для пользователя "Connect \ Войти" и т.д.
- везде поставить try и внятное сообщение "Пропала связь от уборщицы со шваброй".
- анализ причины разрыва (у меня было по ORA-коду)
______________________________________________
"Сделай настолько просто, насколько это возможно, но не проще". © А. Эйнштейн.
AutoPOI.ru — ГИС-технологии для Oracle
...
Рейтинг: 0 / 0
Восстановление соединения с сервером Oracle
    #37730989
pvasea
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123, по поводу "...Это не протокол TCP с гарантированной АВТОдоставкой...." не понял до конца.
В " Oracle Net8 Configuration and Troubleshooting ", by Hugo Toledo & Jonathan Gennick O'REILLY:
"Однако, когда используются тонкие (thin) JDBC-драйверы, все смотрится совсем по другому. Тонкие драйверы были разработаны для того, чтобы функционировать без какого-либо установленного программного обеспечения Oracle. Они полностью выполнены на Java и поддерживают только TCP/IP. Для того, чтобы сделать такую разработку, Oracle был должен реализовать в Net8 необходимые функциональные возможности Java."
...
Рейтинг: 0 / 0
Восстановление соединения с сервером Oracle
    #37731026
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pvasea,
- я к тому, что АВТОматизация в протоколах проще, чем АВТОМАтизация таких вещей как - УправленияТранзакциями\АвтоРеконнектом\ОтложеннойЗагрузкой и т.д.
Т.е. сабж лежит близко к БЛ, и поэтому простых рецептов нет.
- по поводу, тонкого драйвера, согласен. Он нужен чтобы не ставить дополнительного ПО на клиента (Oracle клиент)
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Восстановление соединения с сервером Oracle
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]