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

qin*_*126 13 sql-server asp.net session session-state sql-server-2008

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

Aar*_*and 29

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

在此输入图像描述

您还可以在控制面板>管理工具>服务中签入:

在此输入图像描述

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

在此输入图像描述

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

DECLARE @agent NVARCHAR(512);

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

EXEC master.dbo.xp_servicecontrol 'QueryState', @agent;
Run Code Online (Sandbox Code Playgroud)

  • @blasto我不可能为你回答这个问题 - 我对你如何在你的商店实施安全性一无所知.我会告诉你`sysprocesses`自SQL Server 2005以来已被弃用,所以不,你今天不应该直接使用那个答案,除非你想稍后再重写它... (3认同)

Joh*_*som 9

如果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
Run Code Online (Sandbox Code Playgroud)

来源= Colin Stasiuk

  • 自SQL Server 2005起,不赞成使用^^^^^ sysprocesses,因此,不,您今天不应该直接使用该答案,除非您以后要重写它 (2认同)

Sol*_*zky 5

确定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 (%';
Run Code Online (Sandbox Code Playgroud)

返回值:

status  status_desc
4       Running
Run Code Online (Sandbox Code Playgroud)

它只需要VIEW SERVER STATE服务器权限,但是您已经需要它才能在Object Explorer(在SSMS中)中查看其状态。

并且,如果您不希望授予VIEW SERVER STATE特定的登录名,因为它允许获取太多其他信息,那么从技术上讲,您根本不需要授予任何东西,至少不需要授予实际用户。有关完整的详细信息,请参见以下两个资源(包括工作示例):