如何检查SQL Server代理是否正在运行
我正在使用SQL Server 2008 R2。我想找到一种方法来验证SQL Server代理是否正在运行。我怀疑代理没有运行,但我不知道如何检查。如何检查SQL Server代理是否正在运行
在Management Studio中,您可以通过查看对象资源管理器中的SQL Server代理节点来检查SQL Server代理是否正在运行。在下面的屏幕截图中,我的SQL Server 2012实例上的SQL Server代理正在运行(绿色箭头覆盖在SQL Server代理图标上),但SQL Server 2000代理已停止(红色x)。
您还可以查看控制面板 - >管理工具在>服务:
或者在Program Files文件> 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
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
为什么添加Colin's代码示例给你的答案,这是约翰萨姆森7分钟前的答案? – 2012-07-24 14:45:13
不幸的是,我没有检查它。 – 2012-07-24 14:45:58
但现在你知道,你可以将其删除。在两个不同的答案中使用完全相同的代码示例绝对没有价值。 – 2012-07-24 14:46:42
自动检查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"
)
)
最快,最简单,最directest以确定是否SQL Agent的方式运行,并且可以很容易地在SSMS来完成,在查询(因此它可以被自动化),和没有查询已弃用的系统表(即sysprocesses
)或EXECing xp_servicecontrol
,是在SP1推出了SQL Server 2008 R2的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
授予特定的登录,因为它允许获取太多其他信息,那么您在技术上根本不需要授予任何东西,至少不会授予实际用户。见我的回答DBA.StackExchange上类似的问题的详细信息(包括工作示例):
这是我在PowerShell中使用
Get-Service | Where-Object -like -value '*sql*agent*' -Property 'name'
你想检查手动?还是从SQL? – RedFilter 2012-07-24 14:19:33
或代码...? – 2012-07-24 14:19:54
如果可能的话,我更喜欢从SQL服务器管理工作室检查 – qinking126 2012-07-24 14:27:34