2009-07-20 6 views
1

Есть ли «хороший» способ проверить, установлен ли сетевой узел с использованием «простого» SQL? Я подумал о некоторой командес MS-SQL или, возможно, о получении возвращаемого значения из пинг-скрипта на самом сервере.MS SQL ping внешний сервер

У кого-нибудь есть идея?

+0

Возникает вопрос: * Почему * Вы пытаетесь это сделать? – Tomalak

+0

В моем SQL-сервере хранятся ссылки на контент, который предоставляется моему внешнему FTP-серверу. Я хочу, чтобы мой сервер проверял все X минут, включен ли ftp-бокс, если он не запускает обновление и помещает соответствующий континент как «темп». недоступен'. – KB22

+0

Не следует ли это делать на уровне приложения, а не на уровне базы данных? – Tomalak

ответ

1

Там две возможные способы, чтобы ваш ответ: 1. Вы хотите знать, если SQL-сервер работает на любом хосте
2. Вы хотите свистеть произвольный узел с сервера SQL с помощью некоторых запросов.

  1. Вы можете использовать ответ dariom. 1a. если вы хотите запросить один SQL-сервер у другого, вам лучше использовать функциональность «Связанные серверы» SQL Server.

  2. Вы можете использовать хранимую процедуру master.dbo.xp_cmdshell для выполнения PING, которая затем возвращает результаты как текстовые строки и код состояния.

EXEC master.dbo.xp_cmdshell 'пинг 192.168.1.1'

+0

Thx darth, это работает для меня. – KB22

+0

Код статуса не очень полезен - для меня он возвращает 1 на ошибку и 0 на успех. Но он возвращает 0 на «TTL, срок действия которого истек», поэтому он не является полностью надежным. – Tomalak

+0

@Tomalak: К сожалению, здесь вы должны проанализировать полученный результат. : - / –

-1

Я предполагаю, вы имеете в виду «простой» SQL, а не «Палин» :-)

Если вы пытаетесь увидеть, если SQL работает на хосте можно попытаться подключиться к SQL Browser Service с помощью SSRP (SQL Server Resolution Protocol) (но это необходимо установить и запустить на сервере).

Вы можете попробовать подход «наилучшего предположения» и сделать TCP-соединение с портом 1433 (по умолчанию - SQL Server Database Engine). Если порт открыт, может случиться, что SQL Server прослушивает - вы могли бы попытаться подключиться к SQL Server и выполнить команду (например, SELECT @@VERSION или что-то конкретное для вашего приложения). Проблемы с этим подходом:

  • SQL Server Database Engine может быть настроен на использование нестандартного TCP-порта.
  • SQL Server может даже не использовать TCP - вам придется подключаться с использованием именованных каналов (я не уверен, как это делается).
  • Некоторые другие службы могут быть настроены на использование TCP-порта 1433. Это не означает, что SQL Server прослушивает.
  • Если порт 1433 открыт и используется SQL Server, вам необходимо предоставить учетные данные для подключения к нему и выполнения команд.

По сути, подход с наилучшими предположениями действительно будет работать только с SQL-серверами под вашим контролем.

+0

Я считаю, что он хочет проверить произвольные хосты, а не только SQL-серверы ... – Tomalak

+0

Hi, thx для вашего совета! Я думаю, проблема в том, что мне нужно проверить FTP-сервер, а не сервер sql. thx в любом случае – KB22

Смежные вопросы