Ich verwende SQL Server 2008 r2. Ich möchte einen Weg finden, um zu überprüfen, ob der SQL Server-Agent ausgeführt wird. Ich bin misstrauisch, dass der Agent nicht ausgeführt wird, aber ich weiß nicht, wie ich das überprüfen soll.
In Management Studio können Sie überprüfen, ob der SQL Server-Agent ausgeführt wird, indem Sie den SQL Server-Agent-Knoten im Objekt-Explorer anzeigen. Im folgenden Screenshot wird der SQL Server-Agent auf meiner SQL Server 2012-Instanz ausgeführt (grüner Pfeil über dem SQL Server-Agentensymbol), der Agent für SQL Server 2000 wird jedoch gestoppt (rotes x).
Sie können auch in der Systemsteuerung> Verwaltung> Dienste Folgendes überprüfen:
Oder in Programme> SQL Server> Konfigurationstools> Configuration Manager:
Abschließend können Sie den Status mit T-SQL überprüfen:
DECLARE @agent NVARCHAR(512);
SELECT @agent = COALESCE(N'SQLAgent$' + CONVERT(SYSNAME, SERVERPROPERTY('InstanceName')),
N'SQLServerAgent');
EXEC master.dbo.xp_servicecontrol 'QueryState', @agent;
Wenn der SQL Server-Agent ausgeführt wird, wird in der rechten unteren Ecke des SQL Server-Agentensymbols in SQL Server Management Studio eine grüne Wiedergabeschaltfläche angezeigt.
Führen Sie den folgenden Codeausschnitt aus, um den Status des SQL Server-Agenten für eine bestimmte Instanz mithilfe von T-SQL zu überprüfen:
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
Quelle = Colin Stasiuk
Die schnellste, einfachste und direkteste Methode, um festzustellen, ob SQL Agent ausgeführt wird, und dies kann in SSMS problemlos durchgeführt werden, ist eine Abfrage (daher kann sie automatisiert werden). und fragen kein veraltetes System ab table (dh sysprocesses
) oder EXECing xp_servicecontrol
ist eine DMV, die in SP1 für SQL Server 2008 R2 eingeführt wurde:
SELECT dss.[status], dss.[status_desc]
FROM sys.dm_server_services dss
WHERE dss.[servicename] LIKE N'SQL Server Agent (%';
Kehrt zurück:
status status_desc
4 Running
Es ist nur die Server-Berechtigung VIEW SERVER STATE
erforderlich, aber Sie haben diese bereits benötigt, um den Status im Objekt-Explorer (in SSMS) anzuzeigen.
UND, wenn Sie einem bestimmten Login keinen VIEW SERVER STATE
gewähren möchten, weil dadurch zu viele andere Informationen abgerufen werden können, müssen Sie technisch überhaupt nichts gewähren, zumindest nicht einem tatsächlichen Benutzer. Siehe meine Antwort auf DBA.StackExchange zu einer ähnlichen Frage für Details (einschließlich eines Arbeitsbeispiels):
IF EXISTS (SELECT 1 FROM sysprocesses WHERE LEFT(program_name, 8) = 'SQLAgent')
PRINT 'Agent is running!'
ELSE
PRINT 'Agent is not connected!';
Lassen Sie mich wissen, ob dies funktioniert
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
Automatisieren Sie die Überprüfung, ob der SQL Server-Agent mit dieser Batchdatei ausgeführt wird.
Der Dienst wird gestartet, wenn er noch nicht ausgeführt wird.
Sie müssen den Dienstnamen (SQLServerAgent) für einige Versionen von MSSQL anpassen.
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"
)
)
Das benutze ich in Powershell
Get-Service | Where-Object -like -value '*sql*agent*' -Property 'name'