reede, 9. oktoober 2009

Andmebaasi tööde ülevaade

Selleks, et mingi SQL SERVER Agent-i töö käiks peab
1. Töö ise olema lubatud
2. Töö enda plaanur olema lubatud

Kuna mõnikord unustad selle märkeruudu "Enabled" peale sättida siis abiks SP mis teeb ülevaate SQL Agenti andmebaasi töödest.

ENABLED väli näitab kas töö on peatatud
SCHEDULE_ENABLED väli näitab kas töö plaanur on peatatud

[dbo].[SQLSERVERAGENTDATETIME_KUIDO] funktsiooni ma olen kirjeldanud
varasemalt siin http://kuidoveeb.blogspot.com/2009/04/sql-server-agent-kuupaeva-funktsioon.html

Parameeter @job_names võimaldab filtreerida töö nime alguse järgi

-- =============================================
-- Description: Andmebaasi tööde nimekiri
-- =============================================
CREATE PROCEDURE [dbo].[WINTIME_JOBS_KUIDO_S]
@job_names NVARCHAR(128)=N'MINUTOOD'
WITH EXECUTE AS 'DBO' --käivitame teatud kasutaja õigustes kuna pole mõtet and igaühele otse tabelitele juurdepääsu
AS
BEGIN
SET NOCOUNT ON
DECLARE @err INT
IF RIGHT(@job_names,1) <> '%'
SET @job_names=@job_names+'%'
--OTSIME KÕIGEPEALT SOBIVAD TÖÖD VÄLJA (filter nime alguse järgi)
DECLARE @tood TABLE (job_id UNIQUEIDENTIFIER PRIMARY KEY, job_name NVARCHAR(128) COLLATE DATABASE_DEFAULT, enabled TINYINT,
job_owner NVARCHAR(128) COLLATE DATABASE_DEFAULT NULL )
INSERT INTO @tood (job_id, job_name, [enabled] , job_owner)
SELECT sj.JOB_ID, sj.NAME, sj.[enabled],su.name FROM [msdb]..sysjobs sj
LEFT JOIN msdb..[SYSUSERS] su ON (sj.owner_sid = su.sid )
WHERE sj.name LIKE @job_names
--TEEME ÜLEVAATE
SELECT ISNULL(b.job_owner,'') AS job_owner, b.job_name, b.job_id, b.[enabled]
,[dbo].[SQLSERVERAGENTDATETIME_KUIDO](c.next_run_date,c.next_run_time) AS NEXT_RUN_TIME
,a.step_name, a.subsystem, a.command, a.database_name
,a.step_id, a.step_name, c.schedule_enabled
,Hist.[MESSAGE] AS LAST_RUN_MESSAGE, Hist.LAST_RUN_TIME
,Hist.[RUN_DURATION] AS LAST_RUN_DURATION, Hist.RUN_STATUS AS LAST_RUN_STATUS
FROM msdb..sysjobsteps a
INNER JOIN @tood b ON ( a.job_id =b.job_id )
INNER JOIN (SELECT sc.job_id , sc.next_run_time, sc.next_run_date, ssc.[enabled] AS schedule_enabled
FROM msdb..sysjobschedules sc --uurib ka schedule on enabled
INNER JOIN [msdb]..[sysschedules] ssc ON (sc.[schedule_id] = ssc.[schedule_id])
WHERE EXISTS (SELECT job_id FROM @tood Tli WHERE Tli.job_id = sc.job_id )
) c ON (a.job_id = c.job_id)
INNER JOIN
(
SELECT DISTINCT J1.JOB_ID, J1.[MESSAGE],
[dbo].[SQLSERVERAGENTDATETIME_KUIDO](J1.RUN_DATE,J1.RUN_TIME) AS LAST_RUN_TIME,
J1.RUN_STATUS, J1.RUN_DURATION
FROM msdb.dbo.sysjobhistory J1 WHERE J1.step_id=0
AND job_id IN (SELECT job_id FROM @tood Tli )
AND ( [dbo].[SQLSERVERAGENTDATETIME_KUIDO](J1.RUN_DATE,J1.RUN_TIME) =
( SELECT MAX([dbo].[SQLSERVERAGENTDATETIME_KUIDO](J2.RUN_DATE,J2.RUN_TIME) )
FROM msdb.dbo.sysjobhistory J2 WHERE J1.[job_id] = J2.JOB_ID AND J2.step_id=0) )
) Hist ON (a.job_id = Hist.JOB_ID )
ORDER BY B.JOB_NAME
/*
LAST_RUN_STATUS
0 Failed
1 Succeeded
2 Retry (step only)
3 Canceled
4 In-progress message
5 Unknown
*/
END