17

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

4

7 回答 7

36

在 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;
于 2012-07-24T14:29:59.710 回答
10

如果 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

资料来源 =科林·斯塔修克

于 2012-07-24T14:31:55.453 回答
9

确定 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特定登录,因为它允许获取太多其他信息,那么您在技术上根本不需要授予任何东西,至少不需要授予实际用户。有关完整详细信息(包括工作示例),请参阅以下两个资源:

于 2015-06-04T02:18:54.300 回答
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/

于 2012-07-24T14:39:23.053 回答
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"
  )
)
于 2012-12-14T17:00:32.023 回答
1

这是我在powershell中使用的

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

于 2015-07-30T15:12:27.610 回答
0

2020 年针对 Sql Server Developer Addition 2019 更新

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

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

于 2020-05-12T13:01:08.180 回答