【问题标题】:How to check if SQL Server Agent is running如何检查 SQL Server 代理是否正在运行
【发布时间】:2012-07-22 21:18:58
【问题描述】:

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

【问题讨论】:

  • 您要手动检查吗?还是来自 SQL?
  • 如果可能的话,我更喜欢从 SQL Server 管理工作室检查

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


【解决方案1】:

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

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

或者在程序文件 > Microsoft 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;

【讨论】:

  • 在管理工作室中,我看到的不是箭头,而是一个带有绿色边框的白色圆圈。这是什么意思 ?但是,在配置管理器中,我看到它正在运行(白色圆圈内的绿色箭头)。
  • 在其中一台服务器中,此脚本导致错误 - 对象“xp_servicecontrol”、数据库“master”、所有者“dbo”的执行权限被拒绝。
  • @blasto 这不是脚本问题,而是权限问题。大概你需要有正确的权限来查询服务的状态,不管你使用什么脚本或 UI 方法。
  • 是的。是否建议对查询进行限制 - MASTER.dbo.sysprocesses?这是一种常见的做法吗?如果不是,那么 John Sansom 的查询可能会更好。
  • @blasto 我无法为您回答这个问题 - 我不知道也不感兴趣您希望如何在您的商店中实施安全性。我会告诉你 sysprocesses 自 SQL Server 2005 以来已被弃用,所以不,你今天不应该直接使用该答案,除非你想稍后重新编写它......
【解决方案2】:

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

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

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

【讨论】:

  • 我注意到您可以从管理工作室阻止代理。但是,在那之后你不能从那里重新启动它。您可以从 Windows 服务重新启动。我想知道为什么会这样。
  • 这对我有用。我看到我的 InstanceName 有一个“1”。适用于 2000、05、08R2
  • ^^^^^sysprocesses 自 SQL Server 2005 以来已被弃用,所以不,您今天不应该直接使用该答案,除非您想稍后重新编写它
【解决方案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/

【讨论】:

  • 你为什么将 Colin 的代码示例添加到你的答案中,这是 7 分钟前 John Samson 的答案?
  • 很遗憾,我没有检查。
  • 但是你可以删除它,现在你知道了。在两个不同的答案中使用完全相同的代码示例绝对没有任何价值。'
【解决方案4】:

自动检查 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】:

    确定 SQL 代理是否正在运行并且可以在 SSMS 中轻松完成的最快、最简单、最直接的方法是查询(因此可以自动化),不是查询已弃用的系统表(即sysprocesses)或执行xp_servicecontrol,是在 SQL Server 2008 R2 的 SP1 中引入的 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 授予特定登录名,因为它允许获取太多其他信息,那么从技术上讲,您根本不需要授予任何东西,至少不需要授予实际用户.有关完整详细信息(包括工作示例),请参阅以下两个资源:

    【讨论】:

      【解决方案6】:

      这是我在powershell中使用的

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

      【讨论】:

        【解决方案7】:

        2020 年针对 Sql Server Developer Addition 2019 更新

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

        这应该列出所有本地服务器。如果服务器有一个红色 X,它就会停止。或者您可以右键单击它并转到服务控制。从那里你可以开始/停止重启等。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-10-21
          • 2010-09-06
          • 1970-01-01
          • 2020-02-17
          • 1970-01-01
          • 2022-12-03
          • 2016-04-25
          相关资源
          最近更新 更多