2012-07-24 4 views
9

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 suis soupçonneux que l'agent ne fonctionne pas, mais je ne sais pas comment vérifier.Comment vérifier si SQL Server Agent est en cours d'exécution

+1

Voulez-vous vérifier manuellement? Ou de SQL? – RedFilter

+1

ou à partir du code ...? –

+0

si c'est possible, je préfère vérifier à partir de SQL Server Management Studio – qinking126

Répondre

23

Dans Management Studio, vous pouvez vérifier si SQL Server Agent est en cours d'exécution en consultant le nœud SQL Server Agent dans l'Explorateur d'objets. Dans la capture d'écran suivante, SQL Server Agent 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 pour SQL Server 2000 est arrêté (x rouge).

enter image description here

Vous pouvez également consulter dans le Panneau de configuration> Outils d'administration> Services:

enter image description here

Ou dans Program Files> Serveur SQL> Outils de configuration> Gestionnaire de configuration:

enter image description here

Enfin, vous pouvez vérifier le état en utilisant T-SQL:

DECLARE @agent NVARCHAR(512); 

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

EXEC master.dbo.xp_servicecontrol 'QueryState', @agent; 
+0

Dans le studio de gestion, au lieu des flèches, je vois un cercle blanc avec bordure verte. Qu'est-ce que ça veut dire ? Mais, dans le gestionnaire de configuration, je vois qu'il est en cours d'exécution (flèche verte à l'intérieur du cercle blanc). – Steam

+0

Dans l'un des serveurs, ce script a provoqué l'erreur - Autorisation EXECUTE refusée sur l'objet 'xp_servicecontrol', base de données 'master', propriétaire 'dbo'. – Steam

+0

@blasto ce n'est pas un problème de script, c'est un problème d'autorisations. Vous devez probablement avoir les autorisations nécessaires pour interroger l'état d'un service, quel que soit le script ou la méthode d'interface utilisateur que vous utilisez. –

6

Si l'agent SQL Server est en cours d'exécution, un bouton de lecture vert sera affiché dans le coin en bas à droite de l'icône de l'Agent SQL Server au sein de SQL Server Management Studio.

Pour valider le statut de l'agent SQL Server pour une instance donnée en utilisant T-SQL l'extrait 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

+0

J'ai remarqué que vous pouvez arrêter l'Agent du studio de gestion. Mais, après cela, vous ne pouvez pas le redémarrer à partir de là. Vous pouvez redémarrer à partir des services Windows. Je me demande pourquoi c'est comme ça. – Steam

+0

Cela a fonctionné pour moi. J'ai vu un '1' pour mon InstanceName. Works on 2000, 05, 08R2 – Steam

+1

^^^^^ sysprocesses est obsolète depuis SQL Server 2005, donc non, vous ne devriez pas utiliser cette réponse directement aujourd'hui, sauf si vous voulez la réécrire plus tard – Steam

3
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 d'autre essayer

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/

+0

Pourquoi avez-vous ajouté Colin code échantillon à votre réponse, qui était la réponse de John Samson 7 minutes plus tôt? –

+0

Malheureusement, je ne l'ai pas vérifié. –

+1

Mais vous pouvez l'enlever, maintenant que vous le savez. Il n'y a absolument aucune valeur à avoir exactement le même échantillon de code dans deux réponses différentes. –

2

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

Il commencera à démarrer 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" 
) 
) 
4

Le plus rapide, plus facile, plus directest façon de déterminer si l'agent SQL est en cours d'exécution, et qui peut être fait facilement dans SSMS, est une requête (par conséquent, il peut être automatisé), et n'est pas l'interrogation une table système obsolètesysprocesses) ou EXECing xp_servicecontrol, est un DMV qui a été introduit dans le Service Pack 1 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 (%'; 

Retours:

status status_desc 
4  Running 

Il ne nécessite que l'autorisation du serveur VIEW SERVER STATE, mais vous en avez déjà eu besoin pour en voir le statut dans Object Explorer (dans SSMS). Et, si vous ne voulez pas accorder VIEW SERVER STATE à une connexion particulière parce qu'elle permet d'obtenir trop d'autres informations, vous n'avez techniquement rien à accorder, 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):

What minimum permissions do I need to provide to a user so that it can check the status of SQL Server Agent Service?

0

C'est ce que j'utilise dans powershell

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

Questions connexes