Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как лучше всего пинговать сервер? [MSSQL]


Ega23 ©   (2006-02-08 15:06:00) 

Нужно отслеживать наличие живого MS SQL сервера.
Теоретически, можно элементарный запросец к БД master написать, выполнять его время от времени и пытаться exception выловить.
Другие пути есть?


Ega23   (2006-02-09 11:20:00) [1]


> и усер может из master.sysdatabases получить данные запросом?
>  или этот усер - разработчик?


Да не из master. Я коннект-то на вполне определённую базу настраиваю.


paul_k   (2006-02-09 11:16:00) [2]

и усер может из master.sysdatabases получить данные запросом? или этот усер - разработчик?

каждую секунду не слишком часто ли?
попытка конекта к "отвалившейся" базе/серверу может занимать намного больше


Ega23   (2006-02-09 11:12:00) [3]


> с другой стороны, у юзера от имени которого проводится проверка,
>  как правило нет прав на "мастер"


У нас серверная идентификация пользователей, а не смешанная.


Ega23   (2006-02-09 11:11:00) [4]


> а не смог законектится почему? сервер в дауне? базы нет?
>  или база в дауне? или уборщица пылесосом шнурок сетевой
> выдернула?
>


try
ADOConnection.Connected:=True;
except
ShowMessgae('Сервер в дауне')
Exit;
end;

aqPing.Connection:=ADOConnection;
aqPing.SQL.Text:='Select Top 1 Name from sysobjects';

и пошёл поток на пинг каждую секунду:

try
aqPing.Open;
except
ShowMessage('Сервер отвалился');
end;


Что-то типа этого...


paul_k   (2006-02-09 11:07:00) [5]

с другой стороны, у юзера от имени которого проводится проверка, как правило нет прав на "мастер"


paul_k   (2006-02-09 11:05:00) [6]

а если базы нетути то и нечего к ней конектится так?

> Если не смог на базу законнектиться

а не смог законектится почему? сервер в дауне? базы нет? или база в дауне? или уборщица пылесосом шнурок сетевой выдернула?


Ega23   (2006-02-09 10:55:00) [7]


> и для проверки наличия БД дергать сначала  master.sysdatabases
> (проверить наличие самой БД) а потом уже sysobjects в проверяемой
> базе.
>


Ну это уже лишнее. Если не смог на базу законнектиться, то тут уже проверяй-непроверяй, всё равно швах.


paul_k   (2006-02-09 10:43:00) [8]

и для проверки наличия БД дергать сначала   master.sysdatabases(проверить наличие самой БД) а потом уже sysobjectsв проверяемой базе.


Ega23   (2006-02-09 09:01:00) [9]


> Anatoly Podgoretsky ©   (08.02.06 17:00) [8]
>
> Ну правильно, только пункт 4 лишний, достаточно пункта 5
> Кроме try except также нужен try finally


ОК, спасибо...


Anatoly Podgoretsky   (2006-02-08 17:00:00) [10]

Ega23 ©   (08.02.06 15:20) [3]
Ну правильно, только пункт 4 лишний, достаточно пункта 5
Кроме try except также нужен try finally


Sergey13   (2006-02-08 16:53:00) [11]

2[6] Ega23 ©   (08.02.06 16:46)
> А это одно из тербований к ПО
Ну тогда понятно.


Ega23   (2006-02-08 16:46:00) [12]


> А как ты это знание о работоспособности собираешься использовать?


А это одно из тербований к ПО: есть некий удалённый сервер БД, с которого нужно брать некую дополнительную информацию. При этом изображение активности сервера должено быть выведено на панель состояний.
И если сервер по какой-то причине отвалился - должна поизойти тревога.


Sergey13   (2006-02-08 16:17:00) [13]

2 [3] Ega23 ©   (08.02.06 15:20)
А как ты это знание о работоспособности собираешься использовать?


YuRock   (2006-02-08 16:08:00) [14]

Ну, Select Top 1 1 from sysobjects- так мож. лучше будет :)))


Ega23   (2006-02-08 15:20:00) [15]


> Надо именно делать соединение к базе.


Я, пожалуй, не совсем точно выразился. Сама команда PING меня не интересует, т.к. комп может в сети присутствовать, а сам сервер при этом может быть остановлен.
Интересует именно проверка в реальном времени наличия определённой БД на определённом сервере.
Пока я себе это представляю так:
1. Завожу отдельный поток.
2. Настраиваю в его рамках отдельный коннект к БД.
3. С какой-то частотой "дёргаю" запрос, что-то типа Select Top 1 Name from sysobjects
4. Проверяю результат запроса.
5. Ну и try - except на открытие, конечно.

Интересует мнение коллег по цеху - правильной дорогой иду, или есть другие более пристойные варианты?


MOA   (2006-02-08 15:17:00) [16]

Можно дополнительно попробовать настроить Alert на Fatal Error, чтобы Agent автоматически отсылал сообщение об ошибках. Естественно, для этого нужна живая ОС агента - так что этот вид ошибок не отловится ;(. Хотя агент может мониторить и сервер на "чужом" компьютере...


Anatoly Podgoretsky   (2006-02-08 15:10:00) [17]

Пинг ничего не дает, кроме того он обычно запрещен.
Надо именно делать соединение к базе.


Наверх

Титульная страница Поиск, карта сайта Написать письмо