2012-07-24 31 views
9

Estoy usando SQL Server 2008 r2. Quiero encontrar una manera de verificar si SQL Server Agent se está ejecutando. Sospecho que el agente no se está ejecutando, pero no sé cómo verificarlo.Cómo comprobar si SQL Server Agent se está ejecutando

+1

¿Quieres comprobar ¿a mano? ¿O de SQL? – RedFilter

+1

o del código ...? –

+0

si es posible, prefiero consultarlo desde el estudio de administración del servidor SQL – qinking126

Respuesta

23

En Management Studio, puede verificar si el Agente de SQL Server se está ejecutando mirando el nodo del Agente de SQL Server en el Explorador de objetos. En la siguiente captura de pantalla, el Agente SQL Server en mi instancia de SQL Server 2012 se está ejecutando (flecha verde superpuesta en el icono del Agente SQL Server), pero el agente para SQL Server 2000 está detenido (x rojo).

enter image description here

También puede comprobar en el Panel de control> Herramientas administrativas> Servicios:

enter image description here

o en archivos de programa> SQL Server> Herramientas de configuración> Administrador de configuración:

enter image description here

Finalmente, puede verificar el estado utilizando 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

En el estudio de administración, en lugar de las flechas, veo un círculo blanco con borde verde. Qué significa esto ? Pero, en el administrador de configuración, veo que se está ejecutando (flecha verde dentro del círculo blanco). – Steam

+0

En uno de los servidores, este script provocó el error: se negó el permiso EXECUTE en el objeto 'xp_servicecontrol', la base de datos 'master', el propietario 'dbo'. – Steam

+0

@blasto eso no es un problema de script, eso es un problema de permisos. Presumiblemente, debe tener los permisos adecuados para consultar el estado de un servicio, independientemente de la secuencia de comandos o el método de IU que utilice. –

6

Si el Agente SQL Server se está ejecutando, un botón de reproducción verde se mostrará en la esquina inferior derecha del icono del Agente SQL Server dentro de SQL Server Management Studio.

para validar el estado del Agente SQL Server para una instancia determinada utilizando T-SQL ejecutar el código siguiente fragmento:

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 

Fuente = Colin Stasiuk

+0

Me di cuenta de que puede detener al agente desde el estudio de administración. Pero, después de eso, no puedes reiniciar desde allí. Puede reiniciar desde los servicios de Windows. Me pregunto por qué es así. – Steam

+0

Esto funcionó para mí. Vi un '1' para mi InstanceName. Funciona en 2000, 05, 08R2 – Steam

+1

^^^^^ sysprocesses ha quedado obsoleto desde SQL Server 2005, por lo que no, no debe usar esa respuesta directamente hoy, a menos que desee volver a escribirla más tarde – Steam

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

Déjame saber si esto funciona else intente esto

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 

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

+0

¿Por qué agregó Colin's muestra de código a su respuesta, que fue la respuesta de John Samson 7 minutos antes? –

+0

desafortunadamente, no lo revisé. –

+1

Pero puede eliminarlo, ahora que lo sabe. No tiene absolutamente ningún valor tener exactamente la misma muestra de código en dos respuestas diferentes. –

2

Automatice la comprobación si el Agente SQL Server se está ejecutando con este archivo por lotes.

Se iniciará el servicio si aún no se está ejecutando.

Deberá ajustar el nombre del servicio (SQLServerAgent) para algunas versiones 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

El,, camino más directo más fácil más rápida para determinar si el Agente SQL se está ejecutando, y que se puede hacer fácilmente en SSMS, es una consulta (por lo tanto puede ser automatizado), y no se consulta una tabla del sistema en desuso (es decir,sysprocesses) o EXECing xp_servicecontrol, es una DMV que se introdujo en el SP1 de 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 (%'; 

Devuelve:

status status_desc 
4  Running 

Sólo requiere el permiso VIEW SERVER STATE servidor, pero ya lo necesitaba para ver su estado en el Explorador de objetos (en SSMS).

Y, si no desea otorgar VIEW SERVER STATE a un inicio de sesión particular porque permite obtener demasiada información, entonces técnicamente no necesita otorgar nada en absoluto, al menos no a un usuario real. Véase mi respuesta en DBA.StackExchange en una pregunta similar para los detalles (incluyendo un ejemplo de trabajo):

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

0

Esto es lo que yo uso en powershell

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

Cuestiones relacionadas