Вопросы, которые периодически задают многие:
"Как узнать статус служб SQL сервер?"
"Как узнать под кем стартует сервис?"
"Как всё это сделать с помощью запроса T-SQL?"
Параметры служб можно легко получить через стандартную оснаску Windows "Службы (Services)" - services.msc
Либо через стандартную утилиту SQL Server Configuration Manager - SQLServerManagerXX.msc, где XX - номер версии SQL Server.
Но получить эту информацию на удалённом сервере можно и через запрос на T-SQL. Вот несколько способов:
1) Недокументированная процедура master..xp_servicecontrol у которой 2 входных параметра - команда (start/stop/pause/continue/querystate) и имя службы. Эта процедура позволяет перезапускать службы и просматривать текущий статус.
exec master.. xp_servicecontrol @Action = 'querystate', @ServiceName = N'MSSQLSERVER';
2) Используем недокументированную процедуру master..xp_regread, которая позволяет считывать настройки из реестра.
declare @ServiceName sysname;
exec master..xp_regread
'HKEY_LOCAL_MACHINE'
, 'SYSTEM\CurrentControlSet\services\MSSQLSERVER'
, 'ObjectName'
, @ServiceName OUTPUT;
select @ServiceName as 'Log On As';
3) Через WMI (Windows Management Instrumentation)
exec master..xp_cmdshell 'wmic service where "Name like ''%sql%''" get Caption, StartName, Started';
4) Через утилиту командной строки SC.exe
exec master..xp_cmdshell 'SC query MSSQLSERVER';
5) С помощью запроса на PoSh (PowerShell):
exec master..xp_cmdshell '""C:\WINDOWS\system32\windowspowershell\v1.0\powershell" "get-service MSSQLSERVER | Format-List *""';
6) В SQL Server 2008R2 +SP1 появилось новое Динамическое административное представление sys.dm_server_services
select servicename, service_account, status_desc from sys.dm_server_services;
7) CLR-сборка