This set of scripts is designed to log scheduled processes
Tables
Scheduled Data Process Log Table
dbo.process_log
CREATE TABLE [dbo].[process_log]( [RunDateTime] [datetime] NOT NULL, [Process] [varchar](200) NOT NULL, [DisplayName] [varchar](200) NULL, [Schedule] [varchar](200) NULL, [AffectedTables] [varchar](4000) NULL, [AfftecedViews] [varchar](4000) NULL, CONSTRAINT [PK_process_log] PRIMARY KEY CLUSTERED ( [RunDateTime] ASC, [Process] ASC ) GO
Azure Data Factory Incremental Prcoess Log Table
More information can be found at: https://learn.microsoft.com/en-us/azure/data-factory/tutorial-incremental-copy-overview
dbo.adf_level
CREATE TABLE [dbo].[adf_level]( [ProcessName] [varchar](200) NOT NULL, [TableName] [varchar](200) NOT NULL, [RunDateTime] [datetime] NOT NULL, [DataDateTime] [datetime] NULL, CONSTRAINT [PK_process_level] PRIMARY KEY CLUSTERED ( [ProcessName] ASC, [TableName] ASC, [RunDateTime] ASC ) GO ALTER TABLE [dbo].[adf_level] ADD CONSTRAINT [DF_adf_level_RunDateTime] DEFAULT (getdate()) FOR [RunDateTime] GO
Views
Scheduled Data Process View
dbo.vScheduledProcesses
CREATE VIEW [dbo].[vScheduledProcesses] as SELECT DPL.DisplayName as [Display Name], DPL.[Process] as [Process], DPL.[Schedule], CAST(MD.MaxDateTime as Date) as [Last Run Date], CAST(MD.MaxDateTime as Time) as [Last Run Time], CASE WHEN DPL.Schedule='Daily' AND DATEDIFF(DAY,MD.MaxDateTime,GETDATE())>1 THEN 'Issue' WHEN DPL.Schedule='Daily' AND DATEDIFF(DAY,MD.MaxDateTime,GETDATE())<=1 THEN 'OK' WHEN DPL.Schedule='Weekly' AND DATEDIFF(DAY,MD.MaxDateTime,GETDATE())>7 THEN 'Issue' WHEN DPL.Schedule='Weekly' AND DATEDIFF(DAY,MD.MaxDateTime,GETDATE())<=7 THEN 'OK' ELSE NULL END as [Status], DPL.AffectedTables as [Affected Tables], DPL.AfftecedViews as [Affected Views] FROM [dbo].[process_log] DPL INNER JOIN (SELECT Process, MAX([RunDateTime]) as MaxDateTime FROM dbo.process_log GROUP BY Process) MD ON DPL.Process=MD.Process AND DPL.RunDateTime=MD.MaxDateTime GO
Stored Procedures
Daily Jobs
dbo.DailyJobs
CREATE PROCEDURE [dbo].[DailyJobs]
AS
BEGIN
-- This procedure is scheduled to run every day on the SQL Server Agent
-- Execute other Stored Procedures here:
-- Description of stored procedure
BEGIN TRY
{ sql_statement | statement_block };
END TRY
BEGIN CATCH
RAISERROR ('{SQL Statement Name} was unable to run',1,0);
END CATCH
-- Log Maintenance
DELETE DPL
FROM [dbo].[process_log] DPL
INNER JOIN (SELECT Process, MAX(RunDateTime) MaxDateTime FROM [dbo].[process_log] GROUP BY Process) DD ON DPL.Process=DD.Process
WHERE DPL.Schedule='Daily'
AND DPL.RunDateTime<DATEADD(MONTH,-1,GETDATE())
AND DPL.RunDateTime<DD.MaxDateTime
;
DELETE APL
FROM [dbo].[adf_level] APL
INNER JOIN (SELECT ProcessName, MAX(RunDateTime) MaxDateTime FROM [dbo].[adf_level] GROUP BY ProcessName) DD ON APL.ProcessName=DD.ProcessName
WHERE RunDateTime<DATEADD(MONTH,-1,GETDATE())
AND RunDateTime<DD.MaxDateTime
;
END
GO
Weekly Jobs
dbo.WeeklyJobs
CREATE PROCEDURE [dbo].[WeeklyJobs]
AS
BEGIN
-- This procedure is scheduled to run every week on the SQL Server Agent
-- Execute other Stored Procedures here: -- Description of stored procedure
BEGIN TRY
{ sql_statement | statement_block };
END TRY
BEGIN CATCH
RAISERROR('{SQL Statement Name} was unable to run',1,0);
END CATCH
-- Log Maintenance
DELETE DPL
FROM [dbo].[process_log] DPL
INNER JOIN (SELECT Process, MAX(RunDateTime) MaxDateTime FROM [dbo].[process_log] GROUP BY Process) DD ON DPL.Process=DD.Process
WHERE DPL.Schedule='Weekly'
AND DPL.RunDateTime<DATEADD(MONTH,-1,GETDATE())
AND DPL.RunDateTime<DD.MaxDateTime
;
END
GO