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.
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).
Vous pouvez également vérifier dans le Panneau de configuration> Outils d’administration> Services:
Ou dans Program Files> SQL Server> Outils de configuration> Configuration Manager:
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;
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
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:
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):
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
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"
)
)
C'est ce que j'utilise dans Powershell
Get-Service | Where-Object -like -value '*sql*agent*' -Property 'name'