====== SQL Server services ======
SQL query to show information about SQL Server services:
* last restarts;
* service account identities (thanks to [[http://simondrichards.wordpress.com/2012/07/05/find-the-sql-server-service-accounts-using-tsql/|Simon D. Richards]]).
===== SQL Server 2008 R2 SP1 and later =====
This just got a lot easier (if you don't mind [[https://connect.microsoft.com/SQLServer/feedback/details/664557/sys-dm-server-services-last-startup-time-is-always-null-for-sql-agent|this bug]] omitting some service start times).
SELECT
servicename
, last_startup_time
, service_account
FROM sys.dm_server_services
===== SQL Server 2008 and earlier =====
DECLARE @SqlService VARCHAR(255)
DECLARE @AgentService VARCHAR(255)
-- default instance
SET @SqlService = 'MSSQLSERVER'
SET @AgentService = 'SQLSERVERAGENT'
-- named instance?
IF CHARINDEX('\', @@SERVERNAME) > 0
BEGIN
SET @SqlService = 'MSSQL$' + RIGHT(@@SERVERNAME,LEN(@@SERVERNAME) - CHARINDEX('\', @@SERVERNAME))
SET @AgentService = 'SQLAgent$' + RIGHT(@@SERVERNAME,LEN(@@SERVERNAME) - CHARINDEX('\', @@SERVERNAME))
END
-- convert to registry keys
SET @SqlService = 'SYSTEM\CURRENTCONTROLSET\SERVICES\' + @SqlService
SET @AgentService = 'SYSTEM\CURRENTCONTROLSET\SERVICES\' + @AgentService
-- get account details
DECLARE @SqlAccount VARCHAR(255)
EXEC xp_regread 'HKEY_LOCAL_MACHINE', @SqlService, 'ObjectName', @SqlAccount OUT
DECLARE @AgentAccount VARCHAR(255)
EXEC xp_regread 'HKEY_LOCAL_MACHINE', @AgentService, 'ObjectName', @AgentAccount OUT
;WITH cte (
[Service]
, [Started]
, ServiceAccount
) AS (
SELECT
'SQL Server'
, create_date
, @SqlAccount
FROM sys.databases
WHERE name = 'tempdb'
UNION ALL
SELECT
'SQL Server Agent'
, MAX(agent_start_date)
, @AgentAccount
FROM msdb.dbo.syssessions
)
SELECT *
FROM cte
{{tag>tsql xp_regread service_accounts admin configuration}}