Лучший способ узнать, запущены ли процессы SQL Server 2000? - PullRequest
2 голосов
/ 29 марта 2010

У нас есть старый компьютер с SQL Server 2000, на котором куча заданий выполняется в одночасье. Иногда, после обслуживания сервера и перезагрузки компьютера, некоторые компоненты SQL не подходят к ОС (даже если они настроены для этого). Поэтому, прежде чем наши ночные задания должны быть запущены, я хотел бы (с удаленного компьютера) выполнить несколько проверок, чтобы проверить, работают ли SQL Server, агент SQL Server и служба SQL Server OLAP. Я нашел несколько вещей, которые, похоже, должны работать, но мне интересно, смогут ли эксперты этого сообщества прокомментировать качество и надежность каждого подхода. Я могу закодировать это приложение как файл .vbs, запускаемый с помощью запланированных задач Windows, или создать службу Windows C #.

Кандидат 1: Выполните запрос к master..sysprocesses и найдите в столбце имя_программы соответствующие процессы, которые я ожидаю найти.

Кандидат 2: Выполните запрос к master..xpcmd_shell следующим образом:

exec master..xp_cmdshell 'sc \\hostname query SQLServerAgent'

Затем ищите 'STATE: 4 RUNNING' в результатах

Кандидат 3: Используя .NET Framework, найдите процесс следующим образом: Проверьте, запущен ли процесс в удаленной системе с использованием C #

Это то, что действительно нужно запускать только один раз в день, и оно отправит уведомление по электронной почте, если какой-либо из процессов, которые должны быть запущены, не работает.

1 Ответ

1 голос
/ 31 марта 2010

Для тех, кто заинтересован в решении, я закончил с ... читать дальше.

В итоге я выбрал Кандидата 1 из-за простоты разработки и знакомства с C # / ADO.NET / SQL Server. Я создал C # Windows Service для вызова хранимого процесса в событии Timer_Elapsed (довольно стандартный материал).

Вот внутренности хранимого процесса, который вызывает служба:

SELECT
    RTRIM(LTRIM(hostname)) AS hostname,
    RTRIM(LTRIM(program_name)) AS program_name,
    RTRIM(LTRIM(nt_domain)) AS nt_domain,
    RTRIM(LTRIM(nt_username)) AS nt_username,
    RTRIM(LTRIM(loginame)) AS loginame
FROM
    master..sysprocesses
WHERE
    hostname = 'CSSMCDBSW03'
AND
    program_name IN ('Microsoft SQL Server Analysis Services', 'SQLAgent - Generic Refresher')
...