如何检查SQL Server代理是否正在运行

时间:2012-07-24 14:18:17

标签: asp.net sql-server sql-server-2008 session session-state

我正在使用SQL Server 2008 r2。我想找到一种方法来验证SQL Server代理是否正在运行。我怀疑代理没有运行,但我不知道如何检查。

7 个答案:

答案 0 :(得分:27)

在Management Studio中,您可以通过查看对象资源管理器中的SQL Server代理节点来检查SQL Server代理是否正在运行。在下面的屏幕截图中,我的SQL Server 2012实例上的SQL Server代理正在运行(SQL Server代理图标上覆盖了绿色箭头),但SQL Server 2000的代理程序已停止(红色x)。

enter image description here

您还可以在“控制面板”中查看>管理工具>服务:

enter image description here

或在程序文件中> SQL Server>配置工具>配置管理器:

enter image description here

最后,您可以使用T-SQL检查状态:

DECLARE @agent NVARCHAR(512);

SELECT @agent = COALESCE(N'SQLAgent$' + CONVERT(SYSNAME, SERVERPROPERTY('InstanceName')), 
  N'SQLServerAgent');

EXEC master.dbo.xp_servicecontrol 'QueryState', @agent;

答案 1 :(得分:6)

如果SQL Server代理正在运行,则SQL Server Management Studio中SQL Server代理图标的右下角将显示绿色播放按钮。

要使用T-SQL验证给定实例的SQL Server代理的状态,请执行以下代码段:

IF EXISTS (  SELECT 1 
             FROM master.dbo.sysprocesses 
             WHERE program_name = N'SQLAgent - Generic Refresher')
BEGIN
    SELECT @@SERVERNAME AS 'InstanceName', 1 AS 'SQLServerAgentRunning'
END
ELSE 
BEGIN
    SELECT @@SERVERNAME AS 'InstanceName', 0 AS 'SQLServerAgentRunning'
END

来源= Colin Stasiuk

答案 2 :(得分:4)

确定SQL Agent是否正在运行并且可以在SSMS中轻松完成的最快,最简单,最直接的方法是查询(因此可以自动执行),不是查询已弃用的系统表(即sysprocesses)或EXECing xp_servicecontrol,是在SP1中为SQL Server 2008 R2引入的DMV:

sys.dm_server_services

SELECT dss.[status], dss.[status_desc]
FROM   sys.dm_server_services dss
WHERE  dss.[servicename] LIKE N'SQL Server Agent (%';

返回:

status  status_desc
4       Running

它只需要VIEW SERVER STATE服务器权限,但您已经需要它以便在对象资源管理器(在SSMS中)中查看它的状态。

并且,如果您不想将VIEW SERVER STATE授予特定的登录,因为它允许获取太多其他信息,那么您在技术上根本不需要授予任何内容,至少不需要授予任何内容。实际用户。有关详细信息(包括一个工作示例),请参阅我在DBA.StackExchange上关于类似问题的答案:

What minimum permissions do I need to provide to a user so that it can check the status of SQL Server Agent Service?

答案 3 :(得分:3)

IF EXISTS (SELECT 1 FROM sysprocesses WHERE LEFT(program_name, 8) = 'SQLAgent')
  PRINT 'Agent is running!'
ELSE
  PRINT 'Agent is not connected!';

让我知道这是否有效,请尝试这个

IF EXISTS (  SELECT 1 

           FROM master.dbo.sysprocesses 

           WHERE program_name = N'SQLAgent - Generic Refresher')

BEGIN

   SELECT @@SERVERNAME AS 'InstanceName', 1 AS 'SQLServerAgentRunning'

END

ELSE 

BEGIN

   SELECT @@SERVERNAME AS 'InstanceName', 0 AS 'SQLServerAgentRunning'

END

参考:http://benchmarkitconsulting.com/colin-stasiuk/2009/07/20/check-sql-server-agent-status-on-all-sql-servers/

答案 4 :(得分:2)

自动检查SQL Server代理是否与此批处理文件一起运行。

如果服务尚未运行,它将开始启动服务。

您需要为某些版本的MSSQL调整服务名称(SQLServerAgent)。

echo off
echo Test SQL Server Agent Service

for /F "tokens=3 delims=: " %%H in ('sc query "SQLServerAgent" ^| findstr "STATE"') do (
  if /I "%%H" NEQ "RUNNING" (
   echo service was stopped, starting service
     rem put your optional errorlog or warning message here
     net start "SQLServerAgent"
  )
)

答案 5 :(得分:0)

这是我在powershell中使用的

Get-Service | Where-Object -like -value '*sql*agent*' -Property 'name'

答案 6 :(得分:0)

在2020年针对Sql Server Developer Addition 2019更新了

查看->注册服务器->本地服务器组

这应该列出所有本地服务器。如果服务器显示红色X,则将其停止。或者,您可以右键单击它,然后转到“服务控制”。从那里您可以开始/停止重新启动等。