![]() |
|
|
By: Jugal Shah | Read Comments (5) | Print Jugal has 8+ years of extensive SQL Server experience and has worked on SQL Server 2000, 2005, 2008 and 2008 R2. Related Tips: 1 | 2 | 3 | 4 | More |
|
As you know SQL Server runs using a bunch of different services in order for it to operate. These can be monitored, started and stopped using SQL Server Configuration Manager or Windows Services, but this is not always the most convenient way of checking the services. Is there any way this can be done within SQL Server Management Studio? In this tip we take a look at a undocumented stored procedure that will allow you to do this.
To check the SQL Server services or any other service status using SSMS you can execute the extended stored procedure xp_servicecontrol. This is un documented extended stored procedure.
SyntaxQueryState |
Use this command to check the Services status whether service is running or stopped |
Start |
Use this command to start the service |
Stop |
use this command to stop the service |
--See below example to check the status of SQL Services EXEC xp_servicecontrol N'querystate',N'MSSQLServer' EXEC xp_servicecontrol N'querystate',N'SQLServerAGENT' EXEC xp_servicecontrol N'querystate',N'msdtc' EXEC xp_servicecontrol N'querystate',N'sqlbrowser' EXEC xp_servicecontrol N'querystate',N'MSSQLServerOLAPService' EXEC xp_servicecontrol N'querystate',N'ReportServer' --See below example to start/stop service using SSMS EXEC xp_servicecontrol N'stop',N'SQLServerAGENT' EXEC xp_servicecontrol N'start',N'SQLServerAGENT' --See below example to check non-SQL Service EXEC xp_servicecontrol querystate, DHCPServer
set nocount on CREATE TABLE #ServicesStatus ( myid int identity(1,1), serverName nvarchar(100) default @@serverName, serviceName varchar(100), Status varchar(50), checkdatetime datetime default (getdate()) ) INSERT #ServicesStatus (Status) EXEC xp_servicecontrol N'QUERYSTATE',N'MSSQLServer' update #ServicesStatus set serviceName = 'MSSQLServer' where myid = @@identity INSERT #ServicesStatus (Status) EXEC xp_servicecontrol N'QUERYSTATE',N'SQLServerAGENT' update #ServicesStatus set serviceName = 'SQLServerAGENT' where myid = @@identity INSERT #ServicesStatus (Status) EXEC xp_servicecontrol N'QUERYSTATE',N'msdtc'; update #ServicesStatus set serviceName = 'msdtc' where myid = @@identity; INSERT #ServicesStatus (Status) EXEC xp_servicecontrol N'QUERYSTATE',N'sqlbrowser' update #ServicesStatus set serviceName = 'sqlbrowser' where myid = @@identity select * from #ServicesStatus select char(13) select char(13) drop table #ServicesStatus
sqlcmd -SServerName1 -E -dtempdb -iMyScript.sql -W >>sqlServicesStatus.txt sqlcmd -SServerName2 -E -dtempdb -iMyScript.sql -W >>sqlServicesStatus.txt sqlcmd -SServerName3 -E -dtempdb -iMyScript.sql -W >>sqlServicesStatus.txt sqlcmd -SServerName4 -E -dtempdb -iMyScript.sql -W >>sqlServicesStatus.txt sqlcmd -SServerName5 -E -dtempdb -iMyScript.sql -W >>sqlServicesStatus.txt
Notes
If the service that you are checking does not exist you will get an error message like the following:Msg 22003, Level 16, State 1, Line 0 OpenSOpenService() returned error 1060, 'The specified service does not exist as an installed service.'Also, xp_servicecontrol is an undocument system stored procedure, so you will not get a support for it and moreover there is a chance of code changes or parameter changes, so be aware of this if you decide to use this.
| Share: | Share | Tweet |
|
![]() |
![]() |
Free SQL Server Learning |
| Friday, June 11, 2010 - 9:23:45 AM - tskelley | Read The Tip |
|
Thanks for the tip. I have been looking into some type of health monitoring capability for our application that includes a mix of database and windows services. As the author mentioned, this is an undocumented and therefore not supported by Microsoft. See link below: Usage of xp_servicecontrol is unsupported Now for my question. How would I select the results from this procedure into a variable, so I could report back to the user that the process failed? Something like (but does not work): DECLARE @result nvarchar(255)EXEC @result = xp_servicecontrol N'querystate',N'sqlbrowser'IF CHARINDEX('Running', @result) > 0 PRINT 'Success'ELSE PRINT 'Failure' |
|
| Friday, June 11, 2010 - 10:05:28 AM - admin | Read The Tip |
|
You could try something like this: DECLARE @result nvarchar(255)DECLARE @status table (result nvarchar(255)) INSERT @status EXEC xp_servicecontrol N'querystate',N'MSSQLServer' SELECT @result = result FROM @status IF @result = 'Running.' PRINT 'Success' ELSE PRINT 'Failure'
|
|
| Thursday, August 12, 2010 - 3:23:17 PM - Dr DBA | Read The Tip |
|
Love this tip! I would like to know how to check the Analysis and FulltextSearch service, any idea? Thanks |
|
| Wednesday, August 18, 2010 - 9:58:44 AM - Dr DBA | Read The Tip |
|
Here are some more info for analysis and full text search EXEC master.dbo.xp_servicecontrol N'QUERYSTATE',N'MSSQLServerOLAPService' - Analysis Service EXEC xp_servicecontrol N'QUERYSTATE',N'MSFTESQL ' -- Full Text Search Service
Does anyone now how to check to see if these, or others, services are not present? If a service say Reporting Services is not installed you get an error. I would be good to first check to see if the service is there then check its status |
|
| Thursday, April 05, 2012 - 2:15:35 AM - sagar | Read The Tip |
|
Thanks for the tip, is there any option inerting all records in table.... Many thanks in advance |
|
|
privacy | disclaimer | copyright | advertise | about authors | contribute | feedback | giveaways | user groups Some names and products listed are the registered trademarks of their respective owners. Edgewood Solutions LLC | MSSharePointTips.com | MSSQLTips.com |