ADO.NET: более быстрый способ проверить, доступен ли сервер базы данных? - PullRequest
5 голосов
/ 04 мая 2010

В данный момент я использую этот код для проверки доступности базы данных:

public bool IsDatabaseOnline(string con)
{
    bool isConnected = false;
    SQLConnection connect = null;

    try {
        connect = new SQLConnection(con);
        connect.Open();
        isConnected = true;

    } catch (Exception e) {
        isConnected = false;

    } finally {
        if (connect != null)
            connect.Close();
    }

    return isConnected;
}

Хотя этот код работает нормально, у него есть недостаток. Если сервер не в сети, он тратит около 4 полных секунд, пытаясь открыть соединение, прежде чем решить, что оно недоступно.

Есть ли способ проверить соединение, не пытаясь фактически его открыть и не ждать тайм-аут? Что-то вроде базы данных, эквивалентной ping?

Ответы [ 3 ]

3 голосов
/ 04 мая 2010

Вы можете просто изменить время ожидания соединения на более короткое.Пройдите тестирование и посмотрите, как низко вы можете пойти и при этом быть надежным.Бьюсь об заклад, вы могли бы приблизиться к 500 мс.

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.connectiontimeout.aspx

2 голосов
/ 21 июня 2015

Мой метод (после успешного подключения) - сделать выбор, который не зависит от таблиц, например, времени. В MS SQL Server:

"select Sysdatetime ()"

0 голосов
/ 04 мая 2010

Да и нет.

Вы всегда можете заметить, какой порт слушает ваш сервер, а затем попробовать подключиться к нему напрямую через сокет. Затем, если вам это удастся, вы можете «предположить», что он в сети, но это может не зависеть от вашей сетевой среды. Это самый "пинг" -подход. Конечно, там может быть что-то еще, но это, вероятно, маловероятно в стандартной среде, где БД временно не работает.

Кроме того, если ваша БД находится на выделенной машине, вы можете на самом деле пинговать ее. Но это только проверит, работает ли машина, а не сервер БД.

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

...