2012-10-23 2 views
5

Avevo utilizzato il seguente codice SQL per elencare tutti i lavori senza una data di fine. Ho pensato che avrei potuto usare questo per trovare tutti i lavori attivi. Quello che ho notato è che ho un numero di lavori in questa tabella con un valore stop_execution_date null. Alcuni lavori identici (stesso job_id) vengono ripetuti più volte in questa tabella.Che cosa significa avere lavori con una data di fine null?

select job.*, activity.* 
from msdb.dbo.sysjobs_view job 
inner join msdb.dbo.sysjobactivity activity 
on (job.job_id = activity.job_id) 
where run_Requested_date is not null and stop_execution_date is null 

Quando eseguo EXEC msdb.dbo.sp_help_job su questi posti di lavoro, vedo che lo stato di esecuzione corrente è inattivo.

Cosa rappresentano questi lavori? È questo il comportamento quando i lavori non vengono uccisi correttamente?

risposta

4

Ogni volta che l'agente SQL viene avviato, inserisce una nuova riga in syssession e successivamente tutti i processi eseguiti otterranno quell'ID di sessione in sysjobactivity. Per i tuoi lavori che hanno una data di stop nullo, suppongo che non siano per la sessione "corrente", il che significherebbe che erano ancora in esecuzione quando l'agente è stato arrestato.

+2

Sono d'accordo con il commento su ** syssession ** - è necessario determinare quali lavori sono attualmente in esecuzione da ** sysjobactivity **. Tuttavia, una data di stop NULL nella sessione corrente indica che il lavoro è attualmente in esecuzione. – efesar

+1

Nella domanda originale, il poster diceva che sp_help_job mostrava i lavori come inattivi. Ma hai ragione, questo è un altro caso in cui la data di fine sarebbe NULL. –