我正在使用 SQL Server 2008 r2。我想找到一种方法来验证 SQL Server 代理是否正在运行。我怀疑代理没有运行,但我不知道如何检查。
7 回答
在 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;
如果 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
资料来源 =科林·斯塔修克
确定 SQL 代理是否正在运行并且可以在 SSMS 中轻松完成的最快、最简单、最直接的方法是查询(因此可以自动化),而不是查询已弃用的系统表(即sysprocesses
)或执行xp_servicecontrol
, 是在 SQL Server 2008 R2 的 SP1 中引入的 DMV:
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
特定登录,因为它允许获取太多其他信息,那么您在技术上根本不需要授予任何东西,至少不需要授予实际用户。有关完整详细信息(包括工作示例),请参阅以下两个资源:
- 我需要向用户提供哪些最低权限才能检查 SQL Server 代理服务的状态?(DBA.StackExchange 上的类似问题)
- 无需将高级权限授予任何人即可安全轻松地使用高级权限:服务器级(博客文章)
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
自动检查 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"
)
)
这是我在powershell中使用的
Get-Service | Where-Object -like -value '*sql*agent*' -Property 'name'
2020 年针对 Sql Server Developer Addition 2019 更新
查看 --> 注册服务器 --> 本地服务器组
这应该列出所有本地服务器。如果服务器有一个红色 X,它就会停止。或者您可以右键单击它并转到服务控制。从那里您可以开始/停止重新启动等。