Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.03;
Скачать: CL | DM;

Вниз

Как на "клиенте" максимально быстро отловить крах SQL   Найти похожие ветки 

 
_Сергей_   (2004-09-06 11:36) [0]

Здравствуйте!
  Имеется задача: непрерывное производство, данные должны отправляться на MSSQL каждые 10 сек. При крахе SQL сервера (самого сервера, сетевого оборудования и т.д.) надо переключиться на резервный, при восстановлении - обратно. Время обнаружения обоих ситуаций критично (желательно не должно превышать 1-1.5 сек).
  Для клиента эти переключения должны проходить без сообщений об ошибке.
  Посоветуйте чайнику как это лучше реализовать. Пробовал MSConnection и ADOConnection - пока не очень получается.


 
Карелин Артем ©   (2004-09-06 11:40) [1]

Ну как?
Заключить действия в try except для обнаружения факта ошибки.
Заготовить по одной строке подключения на каждый сервер или по экземпляру ADOConnection.
При обибке менять значит строку подключения или компонент доступа.


 
_Сергей_   (2004-09-06 11:48) [2]

К сожалению, не годится. При обрыве сети, например, except происходит через 5-10 сек, а факт восстановления приходится проверять при каждой транзакции. Явный "вылет" по времени.


 
Sergey13 ©   (2004-09-06 12:19) [3]

По таймеру запускай простенький запросик (например текущую дату возвратить) и его уже в  try except.


 
Рамиль ©   (2004-09-06 12:34) [4]


> При обрыве сети, например, except происходит через
> 5-10 сек, а факт восстановления приходится проверять
> при каждой транзакции. Явный "вылет" по времени.

Сделать локальный буфер для данных.


 
Ega23 ©   (2004-09-06 12:40) [5]

Пингуй сервер в отдельном потоке. В случае краха - переключайся на резервный. Но, ИМХО, за 1-1.5 сек. - нереально.


 
MOA ©   (2004-09-06 13:05) [6]

Вариант рекомендуемый при таких требованиях - кластер.
Ещё вариант - попробуйте воспользоваться MSQM (возможно, и DTC) + Alert от SQL. Сам не пользовался, но IMHO - это похоже на то, что Вам нужно. Эффект - запросы на запись будут задерживаться в очереди, если SQL сервер не доступен. По алертам - оператор перезапускает сервер.
Удачи!


 
сергей1   (2004-09-06 13:13) [7]

винда определяет разрыв связи действительно долго, поэтому отсылка мелких запросов не поможет, все выльется в те-же 8 сек. Возможно, надо создать мелкое приложение, отсылающее маленький пакет размером в байтик с сервера на клиента каждые пол секунды, а клиент ловит этот пакет. Как только пакет не пришел в назначенное время - связи нет. Разрыв определяется почти мгновенно (можно слать пакеты через 0.1 сек. например). Это решит проблему разрыва. А теперь если заставить это мелкое приложение выполнять мелкий запрос на самом сервере, и в зависимости от результата посылать или не посылать байтик - решиться проблема неисправности самого MSSQL, а не только физической связи


 
Sergey13 ©   (2004-09-06 13:22) [8]

2[7] сергей1   (06.09.04 13:13)
>винда определяет разрыв связи действительно долго, поэтому отсылка мелких запросов не поможет, все выльется в те-же 8 сек.
Как мерял? Что то сомнительно. За МС не скажу, щас попробовал на Оракле сервер погасил, так запрос сразу отвалился с ошибкой.


 
Ega23 ©   (2004-09-06 13:23) [9]

30 сек. Timeout, если мне память не изменяет. Но, вроде, можно эту цифру поменять.


 
Карелин Артем ©   (2004-09-06 13:32) [10]

В конструкторе строки подключения такой параметр есть вроде бы...


 
сергей1   (2004-09-06 14:02) [11]

там есть какой-то general timeout, он в 0 установлен.
Вот сейчас проверил, посылал в событии таймера запрос на сервак каждые 0.5 сек. - потом оторвал сетевой хвост - ошибка вылезла секунд через 10


 
сергей1   (2004-09-06 14:16) [12]

хотя насчет 8 сек. задержки из-за самой винды я малость погнал, около 3 выходит, протестил сейчас одно наше сетевое приложение (не имеющее отношение к БД), да и вообще - когда кабель выдергиваешь, окошко о разрыве связи как-раз через это время всплывает


 
Рамиль ©   (2004-09-06 15:11) [13]

А чем не нравится вариант с буфером все таки? Пишешь в очередь, как только записать на сервер не удается, пишешь на другой, переодически проверяя при этом "старый". Или критична и дальнейшая обработка данных?


 
сергей1   (2004-09-06 15:24) [14]

так насколько я понял, у него время очень критично. То, что на сервер не удалось записать выясняется только через несколько секунд, а надо быстрее


 
Ega23 ©   (2004-09-06 16:22) [15]

Трёхзвенка?


 
Arm79   (2004-09-06 23:54) [16]

разместить на каждом из серверов БД доп. приложение, исполняющее SQL запросы (экзекутер). Каждое их этих приложений должно оповещать "родительское" о результате и/или своем функционировании. А у "родительского" в отдельном треде должна выполняться прослушка таких сообщений. проходит с 1-го, хорошо, не приходит - пишем на второй. и тд.



Страницы: 1 вся ветка

Текущий архив: 2004.10.03;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.03 c
14-1095137843
Мюмзик
2004-09-14 08:57
2004.10.03
что за сайт?


14-1095161630
Карелин Артем
2004-09-14 15:33
2004.10.03
Почем суппорт?


4-1093079315
Arnold
2004-08-21 13:08
2004.10.03
Как узнать количество запущенных процессов???


4-1093249421
Li_
2004-08-23 12:23
2004.10.03
как hook ом отловить нажатие cntrl+q ?


1-1095272951
Sergokkke
2004-09-15 22:29
2004.10.03
RichView