Mein Kollege Vladimir zeigte mir neulich, wie man den über den SQL-Server den Staus der anderen SQL-Dienste abfragen kann. Danke! Hier ein paar Beispiele:
EXEC xp_servicecontrol N'QueryState', N'MSSQL$My_EXPRESS';
EXEC xp_servicecontrol N'QueryState', N'SQLAgent$SQL2K8R2';
EXEC xp_servicecontrol N'QueryState', N'msftesql$SQL2005SE';
EXEC xp_servicecontrol N'QueryState', N'msdtc';
EXEC xp_servicecontrol N'QueryState', N'SqlBrowser';
EXEC xp_servicecontrol N'QueryState', N'MSOLAP$SQL_32_STD_ENG';
EXEC xp_servicecontrol N'QueryState', N'ReportServer$My_EXPRESS';
EXEC xp_servicecontrol N'QueryState', N'SQLWriter';

Weitere interessante "Actions" sind "Start" und "Stop".

Ist das gut?

Disclaimer:

  • Man muss mit einem SysAdmin angemeldet sein.
  • Das ist undokumentiert und funktioniert möglicherweise mit anderen Versionen nicht mehr.
  • Getestet habe ich nur mit SQL Server 2005.
  • Falls es nicht geht, dann hat möglicherweise der Benutzer in dessen Kontext der SQL-Server läuft, nicht genug Rechte.

Eine "dokumentierte" Alternative würde xp_cmdshell bieten:
EXEC xp_cmdshell 'SC query msdtc';
Der Output ist aber unhandlich. Und die Aktivierung von xp_cmdshell nervt mich.