How to implement .... ODBC connection lost error handing

Все, что вы хотели знать о программизме, но боялись спросить.
Ответить
Аватара пользователя
dima
Житель
Сообщения: 690
Зарегистрирован: 19 фев 2003, 19:26
Откуда: Хабаровск->Toronto

How to implement .... ODBC connection lost error handing

Сообщение dima »

привет.

Исходные данные.
Программа (С++) бежит 24/7. По запросу клиента делает выборку из БД, подключена через ODBC (к MS SQL). Архитектура построена так, что соединенте все время открыто. Менять архитектуру нельзя. Это приводит к тому, что после back-up-а SQL сервера или проблем с локальной сетью, программу надо перестартовывать.

Вопрос.
Надо сделать, чтоб программа сама решала проблему с исчезновением соединения.

Какие-нибудь идеи ?
Аватара пользователя
папа Карло
Шарманщик
Сообщения: 8565
Зарегистрирован: 17 фев 2003, 15:04
Откуда: НН -> BC -> WA -> UT -> CA

Сообщение папа Карло »

например раз в минуту в соседнем треде делать select 1 если приехало назад что значит база живая.
vg
Маньяк
Сообщения: 2803
Зарегистрирован: 29 май 2003, 22:29
Откуда: Магадан - Миссиссага

Сообщение vg »

dima,
1) Есть ли возможность переписать программу? Если да, то в чём собственно затруднения нормально обрабатывать экзепш, когда не удаётся соединиться с сервером в промежутках времени, когда он бекапится?

2) Судя потому, что ты написал, программа выполняет с некоторой периодичностью некий мониторинг, сдёргивая с сервака статистику. Не вижу необходимости держать всё время соединение открытым в этом случае. Твоя задача и тебе решать, конечно. Но поясни, если это возможно, зачем такая горбатая архитектура?
vg
Маньяк
Сообщения: 2803
Зарегистрирован: 29 май 2003, 22:29
Откуда: Магадан - Миссиссага

Сообщение vg »

Папа,
1) если ты под тредом ты понимаешь тоже, что и я, т.е. один из вторичных потоков процесса, то всё можно сделать и в первичном потоке. Другое дело, что у Димы, скорее всего нет возможности переписать код того приложения. Дима-то, как видно из его постингов не ламер. Сделал бы давно, если б был у него сорц.

2) возможно, конечно, Папа, что ты действительно крут, как я. И ты имеешь ввиду, что можно написать прогу, которая будет из одного из своих потоков (вторичных, скорее всего тогда) создавать процесс для того приложения (о котором мы говорим и которое нельзя как бы перекодировать). Тогда действительно в отдельном потоке можно select-м проверять "keepalive", и если не alive, то прибивать дочерний процесс, а затем порождать его снова, когда БД станет доступной.
В этом случае ты, конечно, прав. И мыслишь очень достойно. Типа, как я. Тогда ты молодец.
ura
Житель
Сообщения: 915
Зарегистрирован: 09 мар 2003, 22:46

Сообщение ura »

А подсесть на ODBC драйвер нет возможности?
Ответить