Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как отследить потерю соединения с БД? / 19 сообщений из 19, страница 1 из 1
06.05.2018, 21:41
    #39641094
FIL23
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отследить потерю соединения с БД?
Добрых суток.

Такая ситуация. Использую IBX D7 + FireBird2.5.
В течении суток программа теряет соединение с БД (на сервере).
И при попытке выполнить запрос к ней возникает исключение, основанное на отсутствие этого самого соединения.

Я понимаю что можно сделать запрос и каждый раз им проверят подключение к БД и в случае исключения переподключать БД.

Может есть более красивый способ?
Спасибо.
...
Рейтинг: 0 / 0
06.05.2018, 22:01
    #39641103
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отследить потерю соединения с БД?
FIL23> Может есть более красивый способ?

Совсем красивого идеального нет, потому что не может быть.
Но подсмотреть можно хотя бы в тех же FIBPlus - там есть
события OnLostConnect, *RestoreConnect и пр.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
06.05.2018, 22:03
    #39641104
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отследить потерю соединения с БД?
Хотя и они не панацея и перехватывать (и обрабатывать) ошибку потери
соединения (и не только её) при всех обращениях к БД придётся всё равно.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
06.05.2018, 22:07
    #39641106
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отследить потерю соединения с БД?
FIL23Может есть более красивый способ?

Есть более правильный: найти почему программа теряет соединение и устранить причину этого
ненормального явления.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
06.05.2018, 22:23
    #39641115
чччД
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отследить потерю соединения с БД?
FIL23Добрых суток.

Такая ситуация. Использую IBX D7 + FireBird2.5.
В течении суток программа теряет соединение с БД (на сервере).
И при попытке выполнить запрос к ней возникает исключение, основанное на отсутствие этого самого соединения.

Я понимаю что можно сделать запрос и каждый раз им проверят подключение к БД и в случае исключения переподключать БД.

Может есть более красивый способ?
Спасибо.
А зачем тебе? Ну, узнаешь ты не в момент запроса. И?
...
Рейтинг: 0 / 0
06.05.2018, 23:33
    #39641133
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отследить потерю соединения с БД?
Сделай компонент, который будет проверять и восстанавливать соединение перед каждым запросом.
...
Рейтинг: 0 / 0
06.05.2018, 23:52
    #39641136
чччД
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отследить потерю соединения с БД?
rgreatСделай компонент, который будет проверять и восстанавливать соединение перед каждым запросом.
Т.е., каждый запрос в отдельной транзакции? Или контекст транзакции тоже восстанавливать, чудесным образом?

И как это - "восстанавливать соединение", если физически нет связи?
...
Рейтинг: 0 / 0
07.05.2018, 00:59
    #39641162
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отследить потерю соединения с БД?
Как, как... Компонентом!
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
07.05.2018, 08:53
    #39641198
Vlad F
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отследить потерю соединения с БД?
Можно просто свою простейшую функцию-обертку типа OpenQuery(Query: TIBQuery), которая будет пытаться открывать переданый ей запрос и в случае неудачи, при получении исключения соотв вида (о потере соединения) переоткрывать связанную с Query TIBDatabase, стартовать транзакцию и в случае успеха повторять запрос.
...
Рейтинг: 0 / 0
07.05.2018, 09:33
    #39641209
krapotkin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отследить потерю соединения с БД?
чаще всего, это все равно дохлый номер
если программа сделана на классическом RAD подходе, то у вас 100% есть еще 100500 открытых датасетов, которые тоже закрылись при потере коннекта и теперь их надо переоткрывать
в этом случае единственный вариант "с гарантией" - выйти/войти
либо продумывать архитектуру на других принципах, без открытых датасетов
...
Рейтинг: 0 / 0
07.05.2018, 09:34
    #39641210
Arm79
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отследить потерю соединения с БД?
А почему не хотите использовать концепцию соединения по требованию? Открыли соединение, получили данные, закрыли соединение.

Зачем постоянно держать соединение открытым?
...
Рейтинг: 0 / 0
07.05.2018, 09:37
    #39641213
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отследить потерю соединения с БД?
Dimitry SibiryakovЕсть более правильный: найти почему программа теряет соединение и устранить причину этого

Если какое-то время программа не проявляет активности, то маршрутизаторы или брандмауэры просто закрывают соединение. А доступа к маршрутизатору(ам) может и не быть.
Как вариант, периодически выполнять какой-нибудь "пустой" запрос у Firebird.
...
Рейтинг: 0 / 0
07.05.2018, 09:38
    #39641214
krapotkin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отследить потерю соединения с БД?
соединение долго устанавливается. не дело это
...
Рейтинг: 0 / 0
07.05.2018, 09:38
    #39641215
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отследить потерю соединения с БД?
Arm79Зачем постоянно держать соединение открытым?

время...
...
Рейтинг: 0 / 0
07.05.2018, 09:39
    #39641217
Arm79
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отследить потерю соединения с БД?
krapotkinсоединение долго устанавливается. не дело это
Долго устанавливается для Firebird? Драйвера не реализуют пулинг?
...
Рейтинг: 0 / 0
07.05.2018, 09:41
    #39641220
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отследить потерю соединения с БД?
чччДrgreatСделай компонент, который будет проверять и восстанавливать соединение перед каждым запросом.
Т.е., каждый запрос в отдельной транзакции? Или контекст транзакции тоже восстанавливать, чудесным образом?

И как это - "восстанавливать соединение", если физически нет связи?Если у тебя транзакции - то обработка ошибок в любом случае нужна в более сложная.
...
Рейтинг: 0 / 0
07.05.2018, 10:37
    #39641252
goldmi45
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отследить потерю соединения с БД?
читаем про обработку EIBError. Диагностировать потерю соединения можно только выполнив запрос к базе. Но дополнительный (фейковый) запрос, который предназначен для того, чтобы диагностировать потерю, не нужен, т.к. любой запрос выполняет эту проверку.

Программы бывают разные. Если программа создаётся для работы 24 часа 7 дней в неделю, то вариант перезайти не прокатит, т.к. некому просто эту программу вовремя запустить (при появлении коннекта с базой). В этом случае программа должна корректно закрыть открытые запросы и не инициировать новых до восстановления соединения.

ЗЫ: В FIBах имеется спец. событие OnLostConnect(Database: TFIBDatabase; E: EFIBError; var Actions: TOnLostConnectActions; var DoRaise: Boolean) и режим laWaitRestore. Это на случай, если решите перейти на FIB+
...
Рейтинг: 0 / 0
07.05.2018, 11:04
    #39641269
Vlad F
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отследить потерю соединения с БД?
Однако сам автор вопроса, походу сразу же потерял к нему интерес.))
...
Рейтинг: 0 / 0
07.05.2018, 11:23
    #39641283
vavan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отследить потерю соединения с БД?
krapotkinесли программа сделана на классическом RAD подходе, то у вас 100% есть еще 100500 открытых датасетовсмотря что считать "классическим"
в многозвенке (хоть бы том же классическом мидасе) клиент вполне переживет и разрыв соединения апсервера с бд и самого апсервера и/или бд перезапуск. и никакой тучи "открытых" датасетов именно к базе, хотя клиентские вполне себе активны
krapotkinлибо продумывать архитектуру на других принципах, без открытых датасетовили гранаты датасеты другой системы
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как отследить потерю соединения с БД? / 19 сообщений из 19, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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