web-dev-qa-db-fra.com

Comment vérifier si l'agent SQL Server est en cours d'exécution

J'utilise SQL Server 2008 R2. Je veux trouver un moyen de vérifier si SQL Server Agent est en cours d'exécution. Je soupçonne l'agent de ne pas fonctionner, mais je ne sais pas comment vérifier.

10
qinking126

Dans Management Studio, vous pouvez vérifier si l'agent SQL Server est en cours d'exécution en consultant le nœud Agent SQL Server dans l'Explorateur d'objets. Dans la capture d'écran suivante, l'agent SQL Server sur mon instance SQL Server 2012 est en cours d'exécution (flèche verte superposée sur l'icône de l'agent SQL Server), mais l'agent de SQL Server 2000 est arrêté (x rouge).

enter image description here

Vous pouvez également vérifier dans le Panneau de configuration> Outils d’administration> Services:

enter image description here

Ou dans Program Files> SQL Server> Outils de configuration> Configuration Manager:

enter image description here

Enfin, vous pouvez vérifier l'état à l'aide de T-SQL:

DECLARE @agent NVARCHAR(512);

SELECT @agent = COALESCE(N'SQLAgent$' + CONVERT(SYSNAME, SERVERPROPERTY('InstanceName')), 
  N'SQLServerAgent');

EXEC master.dbo.xp_servicecontrol 'QueryState', @agent;
25
Aaron Bertrand

Si l'agent SQL Server est en cours d'exécution, un bouton de lecture vert apparaît dans le coin inférieur droit de l'icône de l'Agent SQL Server dans SQL Server Management Studio.

Pour valider le statut de l'agent SQL Server pour une instance donnée à l'aide de T-SQL, exécutez le fragment de code suivant:

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

Source = Colin Stasiuk

6
John Sansom

Le moyen le plus rapide, le plus simple et le plus direct de déterminer si l'agent SQL est en cours d'exécution et que cela peut être fait facilement dans SSMS est une requête (elle peut donc être automatisée), et n'interroge pas un système obsolète table (c'est-à-dire sysprocesses) ou EXECing xp_servicecontrol, est un fichier DMV introduit dans SP1 pour SQL Server 2008 R2:

sys.dm_server_services

SELECT dss.[status], dss.[status_desc]
FROM   sys.dm_server_services dss
WHERE  dss.[servicename] LIKE N'SQL Server Agent (%';

Résultats:

status  status_desc
4       Running

Cela nécessite uniquement l'autorisation du serveur VIEW SERVER STATE, mais vous en aviez déjà besoin pour en voir le statut dans l'Explorateur d'objets (dans SSMS).

ET, si vous ne souhaitez pas attribuer VIEW SERVER STATE à une connexion particulière car cela permet d'obtenir trop d'informations supplémentaires, vous n'avez techniquement pas besoin d'accorder quoi que ce soit, du moins pas à un utilisateur réel. Voir ma réponse sur DBA.StackExchange sur une question similaire pour les détails (y compris un exemple de travail):

Quelles sont les autorisations minimales que je dois fournir à un utilisateur pour qu'il puisse vérifier l'état du service SQL Server Agent?

4
Solomon Rutzky
IF EXISTS (SELECT 1 FROM sysprocesses WHERE LEFT(program_name, 8) = 'SQLAgent')
  PRINT 'Agent is running!'
ELSE
  PRINT 'Agent is not connected!';

Faites-moi savoir si cela fonctionne sinon essayez ceci 

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

Référence: http://benchmarkitconsulting.com/colin-stasiuk/2009/07/20/check-sql-server-agent-status-on-all-sql-servers/

3
NG.

Automatiser la vérification si l'agent SQL Server est en cours d'exécution avec ce fichier de commandes. 

Il démarrera le service s'il ne fonctionne pas déjà. 

Vous devrez modifier le nom du service (SQLServerAgent) pour certaines versions de MSSQL.

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"
  )
)
2
Jens Frandsen

C'est ce que j'utilise dans Powershell

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

0
chrisevett