Лучший способ проверить, запущены ли процессы SQL Server 2000?
-
23-09-2019 - |
Вопрос
У нас есть старая машина с SQL Server 2000, на которой за ночь выполняется множество заданий.Иногда после выполнения обслуживания сервера и перезагрузки компьютера некоторые компоненты SQL не поддерживают операционную систему (даже если они настроены на это).Поэтому перед запуском наших ночных заданий я хотел бы (с удаленного компьютера) выполнить некоторые проверки, чтобы увидеть, работают ли SQL Server, агент SQL Server и служба SQL Server OLAP.Я нашел несколько вещей, которые, кажется, должны работать, но мне интересно, могут ли эксперты этого сообщества прокомментировать качество и надежность каждого подхода.Я могу закодировать это приложение либо как файл .vbs, запускаемый через запланированные задачи Windows, либо создать службу Windows C#.
Кандидат 1:Выполните запрос к master..sysprocesses и найдите в столбце program_name соответствующие процессы, которые я ожидаю найти.
Кандидат 2:Выполните запрос к master..xpcmd_shell следующим образом:
exec master..xp_cmdshell 'sc \\hostname query SQLServerAgent'
Затем найдите 'STATE:4 БЕГ ' в результатах
Кандидат 3:Используя .NET Framework, найдите этот процесс следующим образом:Проверьте, запущен ли процесс в удаленной системе, используя C#.
Это то, что на самом деле нужно запускать только один раз в день, и оно будет отправлять предупреждение по электронной почте, если какой-либо из процессов, которые должны быть запущены, не работает.
Решение
Для тех, кто заинтересован в решении, которое я получил... читайте дальше.
В итоге я выбрал кандидата 1 из-за простоты разработки и знакомства с C#/ADO.NET/SQL Server.Я создал службу Windows C# для вызова хранимой процедуры в событии 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')