powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как отследить потерю соединения с БД?
19 сообщений из 19, страница 1 из 1
Как отследить потерю соединения с БД?
    #39641094
FIL23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрых суток.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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