Added latest changes for SQL Agent - Refer v2

This commit is contained in:
Neeraj Kumar
2025-10-20 08:03:45 -04:00
parent 716014d0bf
commit 49a18b5c47
225 changed files with 10452 additions and 0 deletions

View File

@ -0,0 +1,62 @@
-- Create the database
CREATE DATABASE DevlDUTASJobSchedule;
GO
USE DevlDUTASJobSchedule;
GO
-- Create the main control table
CREATE TABLE dbo.JobControl (
JobID INT IDENTITY(1,1) PRIMARY KEY,
JobName VARCHAR(50) NOT NULL UNIQUE,
ScheduledStartTime TIME NOT NULL,
SchedulerAction VARCHAR(10) NOT NULL CHECK (SchedulerAction IN ('CONTINUE', 'STOP')),
IsActive BIT DEFAULT 1,
CreatedDate DATETIME DEFAULT GETDATE()
);
GO
-- Create job dependencies table
CREATE TABLE dbo.JobDependencies (
DependencyID INT IDENTITY(1,1) PRIMARY KEY,
JobName VARCHAR(50) NOT NULL,
PredecessorJobName VARCHAR(50) NULL,
FOREIGN KEY (JobName) REFERENCES dbo.JobControl(JobName)
);
GO
-- Create execution history table
CREATE TABLE dbo.JobExecutionHistory (
ExecutionID INT IDENTITY(1,1) PRIMARY KEY,
JobName VARCHAR(50) NOT NULL,
RunDate DATE NOT NULL,
ScheduledStartTime TIME NOT NULL,
ActualStartTime DATETIME NULL,
ActualEndTime DATETIME NULL,
Status VARCHAR(20) DEFAULT 'Pending' CHECK (Status IN ('Pending', 'Running', 'Success', 'Failed', 'ForceComplete')),
ErrorMessage VARCHAR(MAX) NULL,
OverrideFlag BIT DEFAULT 0,
OverrideBy VARCHAR(100) NULL,
OverrideDate DATETIME NULL
);
GO
-- Create holidays table
CREATE TABLE dbo.FederalHolidays (
HolidayID INT IDENTITY(1,1) PRIMARY KEY,
HolidayDate DATE NOT NULL UNIQUE,
HolidayName VARCHAR(100) NOT NULL,
Year INT NOT NULL
);
GO
-- Create Exit Code table for PowerShell Script
CREATE TABLE dbo.JobExitCodes
(
JobExecutionID INT IDENTITY(1,1) PRIMARY KEY, -- unique ID per execution
JobName NVARCHAR(128) NOT NULL, -- job name
RunDate DATE NOT NULL, -- date of execution
ExitCode INT NOT NULL, -- exit code from job
RecordedTime DATETIME NOT NULL DEFAULT GETDATE() -- timestamp of execution
);
GO

View File

@ -0,0 +1,31 @@
-- Clear existing data and insert 2025-2026 holidays (ignoring 0000000000 dates)
INSERT INTO dbo.FederalHolidays (HolidayDate, HolidayName, Year) VALUES
-- 2025 Holidays
('2025-01-01', 'New Years Day', 2025),
('2025-01-20', 'Martin Luther King Day', 2025),
('2025-02-17', 'Presidents Day', 2025),
('2025-05-26', 'Memorial Day', 2025),
('2025-06-19', 'Juneteenth Day', 2025),
('2025-07-04', 'Independence Day', 2025),
('2025-09-01', 'Labor Day', 2025),
('2025-10-13', 'Columbus Day', 2025),
('2025-11-11', 'Veterans Day', 2025),
('2025-11-27', 'Thanksgiving Day', 2025),
('2025-12-25', 'Christmas Day', 2025),
-- 2026 Holidays
('2026-01-01', 'New Years Day', 2026),
('2026-01-19', 'Martin Luther King Day', 2026),
('2026-02-16', 'Presidents Day', 2026),
('2026-05-25', 'Memorial Day', 2026),
('2026-06-19', 'Juneteenth Day', 2026),
('2026-07-03', 'Independence Day', 2026), -- Note: July 3rd observed since July 4th is Saturday
('2026-09-07', 'Labor Day', 2026),
('2026-10-12', 'Columbus Day', 2026),
('2026-11-11', 'Veterans Day', 2026),
('2026-11-26', 'Thanksgiving Day', 2026),
('2026-12-25', 'Christmas Day', 2026);
GO
-- Verify the data
SELECT * FROM dbo.FederalHolidays ORDER BY HolidayDate;

View File

@ -0,0 +1,79 @@
USE [DevlDUTASJobSchedule]
GO
INSERT INTO [dbo].[JobControl] (
[JobName],
[ScheduledStartTime],
[SchedulerAction],
[IsActive],
[CreatedDate],
[Frequency]
)
VALUES
('DEVL_DAILY_DTSBX215', '4:00:00', 'CONTINUE', 1, GETDATE(), 'DAILY'),
('DEVL_DAILY_DTSBX305', '4:00:00', 'STOP', 1, GETDATE(), 'DAILY'),
('DEVL_DAILY_DTSGSID0', '6:00:00', 'CONTINUE', 1, GETDATE(), 'DAILY'),
('DEVL_DAILY_GSIRQ300', '6:05:00', 'STOP', 1, GETDATE(), 'DAILY'),
('DEVL_DAILY_DTSRQ202', '6:10:00', 'CONTINUE', 1, GETDATE(), 'DAILY'),
('DEVL_DAILY_DTSGSID1', '6:15:00', 'CONTINUE', 1, GETDATE(), 'DAILY'),
('DEVL_DAILY_DTSBX202', '7:00:00', 'CONTINUE', 1, GETDATE(), 'DAILY'),
('DEVL_DAILY_DTSFT202', '8:00:00', 'CONTINUE', 1, GETDATE(), 'DAILY'),
('DEVL_DAILY_DTSBX432', '8:30:00', 'CONTINUE', 1, GETDATE(), 'DAILY'),
('DEVL_DAILY_DTSGACHD', '9:00:00', 'CONTINUE', 1, GETDATE(), 'DAILY'),
('DEVL_DAILY_DTSBX303', '10:00:00', 'CONTINUE', 1, GETDATE(), 'DAILY'),
('DEVL_DAILY_DTSGWAGE', '14:00:00', 'CONTINUE', 1, GETDATE(), 'DAILY'),
('DEVL_DAILY_DTSGCHKS', '14:05:00', 'CONTINUE', 1, GETDATE(), 'DAILY'),
('DEVL_DAILY_DTSESDAY', '14:05:00', 'CONTINUE', 1, GETDATE(), 'DAILY'),
('DEVL_DAILY_DTSGPAYT', '14:10:00', 'CONTINUE', 1, GETDATE(), 'DAILY'),
('DEVL_DAILY_DTSDX145', '16:05:00', 'CONTINUE', 1, GETDATE(), 'DAILY'),
('DEVL_DAILY_DTSBX629', '16:15:00', 'STOP', 1, GETDATE(), 'DAILY'),
('DEVL_DAILY_DTSBX630', '16:30:00', 'STOP', 1, GETDATE(), 'DAILY'),
('DEVL_DAILY_DTSFRAUD', '16:30:00', 'STOP', 1, GETDATE(), 'DAILY'),
('DEVL_DAILY_DTSRACHD', '17:00:00', 'CONTINUE', 1, GETDATE(), 'DAILY'),
('DEVL_DAILY_DTSBXACH', '17:00:00', 'STOP', 1, GETDATE(), 'DAILY'),
('DEVL_DAILY_DTSBXREG', '17:00:00', 'STOP', 1, GETDATE(), 'DAILY'),
('DEVL_DAILY_DTSBX430', '17:00:00', 'STOP', 1, GETDATE(), 'DAILY'),
('DEVL_DAILY_DTSBX626', '17:00:00', 'STOP', 1, GETDATE(), 'DAILY'),
('DEVL_DAILY_DTSBX530', '17:00:00', 'STOP', 1, GETDATE(), 'DAILY'),
('DEVL_DAILY_DTSBXREL', '17:00:00', 'STOP', 1, GETDATE(), 'DAILY'),
('DEVL_DAILY_DTSBX450', '17:15:00', 'STOP', 1, GETDATE(), 'DAILY'),
('DEVL_DAILY_DTSBX451', '17:15:00', 'STOP', 1, GETDATE(), 'DAILY'),
('DEVL_DAILY_DTSPACHD', '18:00:00', 'STOP', 1, GETDATE(), 'DAILY'),
('DEVL_DAILY_DTSPX148', '18:05:00', 'STOP', 1, GETDATE(), 'DAILY'),
('DEVL_DAILY_DTSRQ325', '18:05:00', 'STOP', 1, GETDATE(), 'DAILY'),
('DEVL_DAILY_DTSBX427', '18:07:00', 'STOP', 1, GETDATE(), 'DAILY'),
('DEVL_DAILY_DTSPDAY1', '18:10:00', 'STOP', 1, GETDATE(), 'DAILY'),
('DEVL_DAILY_DTSW4WGE', '18:15:00', 'STOP', 1, GETDATE(), 'DAILY'),
('DEVL_DAILY_DTSGSID2', '18:15:00', 'STOP', 1, GETDATE(), 'DAILY'),
('DEVL_DAILY_DTSGSID9', '18:15:00', 'STOP', 1, GETDATE(), 'DAILY'),
('DEVL_DAILY_DTSMIN01', '18:20:00', 'STOP', 1, GETDATE(), 'DAILY'),
('DEVL_DAILY_DTSMIN02', '18:20:00', 'STOP', 1, GETDATE(), 'DAILY'),
('DEVL_DAILY_DTSRQ459', '19:00:00', 'STOP', 1, GETDATE(), 'DAILY'),
('DEVL_DAILY_DTSBXPFL', '19:00:00', 'STOP', 1, GETDATE(), 'DAILY'),
('DEVL_DAILY_DESBD427', '19:05:00', 'CONTINUE', 1, GETDATE(), 'DAILY'),
('DEVL_DAILY_DTSBX403', '20:00:00', 'CONTINUE', 1, GETDATE(), 'DAILY'),
('DEVL_DAILY_DTSBE405', '20:15:00', 'CONTINUE', 1, GETDATE(), 'DAILY'),
('DEVL_DAILY_DTSBX405', '20:15:00', 'CONTINUE', 1, GETDATE(), 'DAILY'),
('DEVL_DAILY_DTSRQ335', '21:00:00', 'STOP', 1, GETDATE(), 'DAILY'),
('DEVL_DAILY_DTSBX601', '21:25:00', 'STOP', 1, GETDATE(), 'DAILY'),
('DEVL_WEEKLY_DTSGSID0', '6:00:00', 'CONTINUE', 1, GETDATE(), 'WEEKLY'),
('DEVL_WEEKLY_DTSGSID1', '6:15:00', 'CONTINUE', 1, GETDATE(), 'WEEKLY'),
('DEVL_WEEKLY_DTSBX202', '7:00:00', 'CONTINUE', 1, GETDATE(), 'WEEKLY'),
('DEVL_WEEKLY_DTSFT202', '8:00:00', 'STOP', 1, GETDATE(), 'WEEKLY'),
('DEVL_WEEKLY_DTSBX470', '7:00:00', 'CONTINUE', 1, GETDATE(), 'WEEKLY'),
('DEVL_WEEKLY_DTSBXREJ', '17:00:00', 'CONTINUE', 1, GETDATE(), 'WEEKLY'),
('DEVL_WEEKLY_DTSPDAY7', '19:10:00', 'STOP', 1, GETDATE(), 'WEEKLY'),
('DEVL_WEEKLY_DTSBX122', '19:14:00', 'CONTINUE', 1, GETDATE(), 'WEEKLY'),
('DEVL_WEEKLY_DTSRQ511', '19:14:00', 'CONTINUE', 1, GETDATE(), 'WEEKLY'),
('DEVL_WEEKLY_DTSRQ444', '7:00:00', 'CONTINUE', 1, GETDATE(), 'WEEKLY'),
('DEVL_WEEKLY_DTSRQ126', '9:00:00', 'CONTINUE', 1, GETDATE(), 'WEEKLY'),
('DEVL_MONTHLY_DTSRQ414', '18:15:00', 'STOP', 0, GETDATE(), 'MONTHLY'),
('DEVL_MONTHLY_DTSPMON1', '19:15:00', 'STOP', 0, GETDATE(), 'MONTHLY'),
('DEVL_MONTHLY_DTSCHGVB', '19:26:00', 'CONTINUE', 0, GETDATE(), 'MONTHLY'),
('DEVL_MONTHLY_DTSCHGVR', '19:27:00', 'STOP', 0, GETDATE(), 'MONTHLY'),
('DEVL_MONTHLY_DTSVBKUP', '19:26:00', 'CONTINUE', 0, GETDATE(), 'MONTHLY'),
('DEVL_MONTHLY_DTSVRSTR', '19:30:00', 'STOP', 0, GETDATE(), 'MONTHLY'),
('DEVL_MONTHLY_DTSRQ442', '19:37:00', 'CONTINUE', 0, GETDATE(), 'MONTHLY'),
('DEVL_MONTHLY_DTSBX460', '19:35:00', 'CONTINUE', 0, GETDATE(), 'MONTHLY'),
('DEVL_MONTHLY_DTSRQ513', '19:37:00', 'CONTINUE', 0, GETDATE(), 'MONTHLY'),
('DEVL_MONTHLY_DTSCHGDC', '13:00:00', 'CONTINUE', 0, GETDATE(), 'MONTHLY');

View File

@ -0,0 +1,80 @@
USE [DevlDUTASJobSchedule]
GO
TRUNCATE TABLE [dbo].[JobDependencies];
INSERT INTO [dbo].[JobDependencies] (
[JobName],
[PredecessorJobName]
)
VALUES
('DEVL_DAILY_DTSGSID0','DEVL_DAILY_DTSBX305'),
('DEVL_DAILY_GSIRQ300','DEVL_DAILY_DTSBX305'),
('DEVL_DAILY_DTSRQ202','DEVL_DAILY_GSIRQ300'),
('DEVL_DAILY_DTSGSID1','DEVL_DAILY_GSIRQ300'),
('DEVL_DAILY_DTSBX202','DEVL_DAILY_GSIRQ300'),
('DEVL_DAILY_DTSFT202','DEVL_DAILY_GSIRQ300'),
('DEVL_DAILY_DTSBX432','DEVL_DAILY_GSIRQ300'),
('DEVL_DAILY_DTSGACHD','DEVL_DAILY_GSIRQ300'),
('DEVL_DAILY_DTSBX303','DEVL_DAILY_GSIRQ300'),
('DEVL_DAILY_DTSGWAGE','DEVL_DAILY_GSIRQ300'),
('DEVL_DAILY_DTSGCHKS','DEVL_DAILY_GSIRQ300'),
('DEVL_DAILY_DTSESDAY','DEVL_DAILY_GSIRQ300'),
('DEVL_DAILY_DTSGPAYT','DEVL_DAILY_GSIRQ300'),
('DEVL_DAILY_DTSDX145','DEVL_DAILY_GSIRQ300'),
('DEVL_DAILY_DTSBX629','DEVL_DAILY_GSIRQ300'),
('DEVL_DAILY_DTSBX630','DEVL_DAILY_DTSBX629'),
('DEVL_DAILY_DTSFRAUD','DEVL_DAILY_DTSBX629'),
('DEVL_DAILY_DTSRACHD','DEVL_DAILY_DTSFRAUD'),
('DEVL_DAILY_DTSBXACH','DEVL_DAILY_DTSFRAUD'),
('DEVL_DAILY_DTSBXREG','DEVL_DAILY_DTSFRAUD'),
('DEVL_DAILY_DTSBX430','DEVL_DAILY_DTSFRAUD'),
('DEVL_DAILY_DTSBX626','DEVL_DAILY_DTSFRAUD'),
('DEVL_DAILY_DTSBX530','DEVL_DAILY_DTSFRAUD'),
('DEVL_DAILY_DTSBXREL','DEVL_DAILY_DTSFRAUD'),
('DEVL_DAILY_DTSBX450','DEVL_DAILY_DTSBXACH'),
('DEVL_DAILY_DTSBX450','DEVL_DAILY_DTSBXREG'),
('DEVL_DAILY_DTSBX450','DEVL_DAILY_DTSBX430'),
('DEVL_DAILY_DTSBX450','DEVL_DAILY_DTSBX626'),
('DEVL_DAILY_DTSBX450','DEVL_DAILY_DTSBX530'),
('DEVL_DAILY_DTSBX450','DEVL_DAILY_DTSBXREL'),
('DEVL_DAILY_DTSBX451','DEVL_DAILY_DTSBXACH'),
('DEVL_DAILY_DTSBX451','DEVL_DAILY_DTSBXREG'),
('DEVL_DAILY_DTSBX451','DEVL_DAILY_DTSBX430'),
('DEVL_DAILY_DTSBX451','DEVL_DAILY_DTSBX626'),
('DEVL_DAILY_DTSBX451','DEVL_DAILY_DTSBX530'),
('DEVL_DAILY_DTSBX451','DEVL_DAILY_DTSBXREL'),
('DEVL_DAILY_DTSPACHD','DEVL_DAILY_DTSBX450'),
('DEVL_DAILY_DTSPACHD','DEVL_DAILY_DTSBX451'),
('DEVL_DAILY_DTSPX148','DEVL_DAILY_DTSPACHD'),
('DEVL_DAILY_DTSRQ325','DEVL_DAILY_DTSPACHD'),
('DEVL_DAILY_DTSBX427','DEVL_DAILY_DTSPX148'),
('DEVL_DAILY_DTSBX427','DEVL_DAILY_DTSRQ325'),
('DEVL_DAILY_DTSPDAY1','DEVL_DAILY_DTSBX427'),
('DEVL_DAILY_DTSW4WGE','DEVL_DAILY_DTSPDAY1'),
('DEVL_DAILY_DTSGSID2','DEVL_DAILY_DTSPDAY1'),
('DEVL_DAILY_DTSGSID9','DEVL_DAILY_DTSPDAY1'),
('DEVL_DAILY_DTSMIN01','DEVL_DAILY_DTSW4WGE'),
('DEVL_DAILY_DTSMIN01','DEVL_DAILY_DTSGSID2'),
('DEVL_DAILY_DTSMIN01','DEVL_DAILY_DTSGSID9'),
('DEVL_DAILY_DTSMIN02','DEVL_DAILY_DTSW4WGE'),
('DEVL_DAILY_DTSMIN02','DEVL_DAILY_DTSGSID2'),
('DEVL_DAILY_DTSMIN02','DEVL_DAILY_DTSGSID9'),
('DEVL_DAILY_DTSRQ459','DEVL_DAILY_DTSMIN01'),
('DEVL_DAILY_DTSRQ459','DEVL_DAILY_DTSMIN02'),
('DEVL_DAILY_DTSBXPFL','DEVL_DAILY_DTSRQ459'),
('DEVL_DAILY_DESBD427','DEVL_DAILY_DTSBXPFL'),
('DEVL_DAILY_DTSBX403','DEVL_DAILY_DTSBXPFL'),
('DEVL_DAILY_DTSBE405','DEVL_DAILY_DTSBXPFL'),
('DEVL_DAILY_DTSBX405','DEVL_DAILY_DTSBXPFL'),
('DEVL_DAILY_DTSRQ335','DEVL_DAILY_DTSBXPFL'),
('DEVL_DAILY_DTSBX601','DEVL_DAILY_DTSRQ335'),
('DEVL_WEEKLY_DTSBXREJ','DEVL_DAILY_DTSBXREL'),
('DEVL_WEEKLY_DTSBX122','DEVL_WEEKLY_DTSPDAY7'),
('DEVL_WEEKLY_DTSRQ511','DEVL_WEEKLY_DTSPDAY7'),
('DEVL_MONTHLY_DTSRQ414','DEVL_DAILY_DTSPDAY1'),
('DEVL_MONTHLY_DTSCHGVB','DEVL_MONTHLY_DTSPMON1'),
('DEVL_MONTHLY_DTSCHGVR','DEVL_MONTHLY_DTSCHGVB'),
('DEVL_MONTHLY_DTSVBKUP','DEVL_MONTHLY_DTSPMON1'),
('DEVL_MONTHLY_DTSVRSTR','DEVL_MONTHLY_DTSVBKUP'),
('DEVL_MONTHLY_DTSRQ442','DEVL_MONTHLY_DTSRQ513');

View File

@ -0,0 +1,65 @@
USE msdb;
GO
-- Schedule DEVL Monthly Jobs for October 2025
------------------------------------------------
EXEC dbo.usp_ScheduleMonthlyJob
@JobName='DEVL_MONTHLY_DTSRQ414',
@Env='DEVL',
@RunDate='2025-11-03',
@RunTime='18:15:00';
EXEC dbo.usp_ScheduleMonthlyJob
@JobName='DEVL_MONTHLY_DTSPMON1',
@Env='DEVL',
@RunDate='2025-10-31',
@RunTime='19:15:00';
EXEC dbo.usp_ScheduleMonthlyJob
@JobName='DEVL_MONTHLY_DTSCHGVB',
@Env='DEVL',
@RunDate='2025-10-31',
@RunTime='19:26:00';
EXEC dbo.usp_ScheduleMonthlyJob
@JobName='DEVL_MONTHLY_DTSCHGVR',
@Env='DEVL',
@RunDate='2025-10-31',
@RunTime='19:27:00';
EXEC dbo.usp_ScheduleMonthlyJob
@JobName='DEVL_MONTHLY_DTSVBKUP',
@Env='DEVL',
@RunDate='2025-10-31',
@RunTime='19:26:00';
EXEC dbo.usp_ScheduleMonthlyJob
@JobName='DEVL_MONTHLY_DTSVRSTR',
@Env='DEVL',
@RunDate='2025-10-31',
@RunTime='19:30:00';
EXEC dbo.usp_ScheduleMonthlyJob
@JobName='DEVL_MONTHLY_DTSRQ442',
@Env='DEVL',
@RunDate='2025-10-31',
@RunTime='19:37:00';
EXEC dbo.usp_ScheduleMonthlyJob
@JobName='DEVL_MONTHLY_DTSBX460',
@Env='DEVL',
@RunDate='2025-10-31',
@RunTime='19:35:00';
EXEC dbo.usp_ScheduleMonthlyJob
@JobName='DEVL_MONTHLY_DTSRQ513',
@Env='DEVL',
@RunDate='2025-10-31',
@RunTime='19:37:00';
EXEC dbo.usp_ScheduleMonthlyJob
@JobName='DEVL_MONTHLY_DTSCHGDC',
@Env='DEVL',
@RunDate='2025-11-03',
@RunTime='13:00:00';
GO

View File

@ -0,0 +1,279 @@
USE [msdb]
GO
-- Execute the stored procedure for each job
EXEC [dbo].[usp_CreateSQLAgentJob]
@JobName = 'DEVL_DAILY_DTSBX215',
@StartTimeHHMMSS = 40000,
@Env = 'DEVL',
@Frequency = 'DAILY';
EXEC [dbo].[usp_CreateSQLAgentJob]
@JobName = 'DEVL_DAILY_DTSBX305',
@StartTimeHHMMSS = 40000,
@Env = 'DEVL',
@Frequency = 'DAILY';
EXEC [dbo].[usp_CreateSQLAgentJob]
@JobName = 'DEVL_DAILY_DTSGSID0',
@StartTimeHHMMSS = 60000,
@Env = 'DEVL',
@Frequency = 'DAILY';
EXEC [dbo].[usp_CreateSQLAgentJob]
@JobName = 'DEVL_DAILY_GSIRQ300',
@StartTimeHHMMSS = 60500,
@Env = 'DEVL',
@Frequency = 'DAILY';
EXEC [dbo].[usp_CreateSQLAgentJob]
@JobName = 'DEVL_DAILY_DTSRQ202',
@StartTimeHHMMSS = 61000,
@Env = 'DEVL',
@Frequency = 'DAILY';
EXEC [dbo].[usp_CreateSQLAgentJob]
@JobName = 'DEVL_DAILY_DTSGSID1',
@StartTimeHHMMSS = 61500,
@Env = 'DEVL',
@Frequency = 'DAILY';
EXEC [dbo].[usp_CreateSQLAgentJob]
@JobName = 'DEVL_DAILY_DTSBX202',
@StartTimeHHMMSS = 70000,
@Env = 'DEVL',
@Frequency = 'DAILY';
EXEC [dbo].[usp_CreateSQLAgentJob]
@JobName = 'DEVL_DAILY_DTSFT202',
@StartTimeHHMMSS = 80000,
@Env = 'DEVL',
@Frequency = 'DAILY';
EXEC [dbo].[usp_CreateSQLAgentJob]
@JobName = 'DEVL_DAILY_DTSBX432',
@StartTimeHHMMSS = 83000,
@Env = 'DEVL',
@Frequency = 'DAILY';
EXEC [dbo].[usp_CreateSQLAgentJob]
@JobName = 'DEVL_DAILY_DTSGACHD',
@StartTimeHHMMSS = 90000,
@Env = 'DEVL',
@Frequency = 'DAILY';
EXEC [dbo].[usp_CreateSQLAgentJob]
@JobName = 'DEVL_DAILY_DTSBX303',
@StartTimeHHMMSS = 100000,
@Env = 'DEVL',
@Frequency = 'DAILY';
EXEC [dbo].[usp_CreateSQLAgentJob]
@JobName = 'DEVL_DAILY_DTSGWAGE',
@StartTimeHHMMSS = 140000,
@Env = 'DEVL',
@Frequency = 'DAILY';
EXEC [dbo].[usp_CreateSQLAgentJob]
@JobName = 'DEVL_DAILY_DTSGCHKS',
@StartTimeHHMMSS = 140500,
@Env = 'DEVL',
@Frequency = 'DAILY';
EXEC [dbo].[usp_CreateSQLAgentJob]
@JobName = 'DEVL_DAILY_DTSESDAY',
@StartTimeHHMMSS = 140500,
@Env = 'DEVL',
@Frequency = 'DAILY';
EXEC [dbo].[usp_CreateSQLAgentJob]
@JobName = 'DEVL_DAILY_DTSGPAYT',
@StartTimeHHMMSS = 141000,
@Env = 'DEVL',
@Frequency = 'DAILY';
EXEC [dbo].[usp_CreateSQLAgentJob]
@JobName = 'DEVL_DAILY_DTSDX145',
@StartTimeHHMMSS = 160500,
@Env = 'DEVL',
@Frequency = 'DAILY';
EXEC [dbo].[usp_CreateSQLAgentJob]
@JobName = 'DEVL_DAILY_DTSBX629',
@StartTimeHHMMSS = 161500,
@Env = 'DEVL',
@Frequency = 'DAILY';
EXEC [dbo].[usp_CreateSQLAgentJob]
@JobName = 'DEVL_DAILY_DTSBX630',
@StartTimeHHMMSS = 163000,
@Env = 'DEVL',
@Frequency = 'DAILY';
EXEC [dbo].[usp_CreateSQLAgentJob]
@JobName = 'DEVL_DAILY_DTSFRAUD',
@StartTimeHHMMSS = 163000,
@Env = 'DEVL',
@Frequency = 'DAILY';
EXEC [dbo].[usp_CreateSQLAgentJob]
@JobName = 'DEVL_DAILY_DTSRACHD',
@StartTimeHHMMSS = 170000,
@Env = 'DEVL',
@Frequency = 'DAILY';
EXEC [dbo].[usp_CreateSQLAgentJob]
@JobName = 'DEVL_DAILY_DTSBXACH',
@StartTimeHHMMSS = 170000,
@Env = 'DEVL',
@Frequency = 'DAILY';
EXEC [dbo].[usp_CreateSQLAgentJob]
@JobName = 'DEVL_DAILY_DTSBXREG',
@StartTimeHHMMSS = 170000,
@Env = 'DEVL',
@Frequency = 'DAILY';
EXEC [dbo].[usp_CreateSQLAgentJob]
@JobName = 'DEVL_DAILY_DTSBX430',
@StartTimeHHMMSS = 170000,
@Env = 'DEVL',
@Frequency = 'DAILY';
EXEC [dbo].[usp_CreateSQLAgentJob]
@JobName = 'DEVL_DAILY_DTSBX626',
@StartTimeHHMMSS = 170000,
@Env = 'DEVL',
@Frequency = 'DAILY';
EXEC [dbo].[usp_CreateSQLAgentJob]
@JobName = 'DEVL_DAILY_DTSBX530',
@StartTimeHHMMSS = 170000,
@Env = 'DEVL',
@Frequency = 'DAILY';
EXEC [dbo].[usp_CreateSQLAgentJob]
@JobName = 'DEVL_DAILY_DTSBXREL',
@StartTimeHHMMSS = 170000,
@Env = 'DEVL',
@Frequency = 'DAILY';
EXEC [dbo].[usp_CreateSQLAgentJob]
@JobName = 'DEVL_DAILY_DTSBX450',
@StartTimeHHMMSS = 171500,
@Env = 'DEVL',
@Frequency = 'DAILY';
EXEC [dbo].[usp_CreateSQLAgentJob]
@JobName = 'DEVL_DAILY_DTSBX451',
@StartTimeHHMMSS = 171500,
@Env = 'DEVL',
@Frequency = 'DAILY';
EXEC [dbo].[usp_CreateSQLAgentJob]
@JobName = 'DEVL_DAILY_DTSPACHD',
@StartTimeHHMMSS = 180000,
@Env = 'DEVL',
@Frequency = 'DAILY';
EXEC [dbo].[usp_CreateSQLAgentJob]
@JobName = 'DEVL_DAILY_DTSPX148',
@StartTimeHHMMSS = 180500,
@Env = 'DEVL',
@Frequency = 'DAILY';
EXEC [dbo].[usp_CreateSQLAgentJob]
@JobName = 'DEVL_DAILY_DTSRQ325',
@StartTimeHHMMSS = 180500,
@Env = 'DEVL',
@Frequency = 'DAILY';
EXEC [dbo].[usp_CreateSQLAgentJob]
@JobName = 'DEVL_DAILY_DTSBX427',
@StartTimeHHMMSS = 180700,
@Env = 'DEVL',
@Frequency = 'DAILY';
EXEC [dbo].[usp_CreateSQLAgentJob]
@JobName = 'DEVL_DAILY_DTSPDAY1',
@StartTimeHHMMSS = 181000,
@Env = 'DEVL',
@Frequency = 'DAILY';
EXEC [dbo].[usp_CreateSQLAgentJob]
@JobName = 'DEVL_DAILY_DTSW4WGE',
@StartTimeHHMMSS = 181500,
@Env = 'DEVL',
@Frequency = 'DAILY';
EXEC [dbo].[usp_CreateSQLAgentJob]
@JobName = 'DEVL_DAILY_DTSGSID2',
@StartTimeHHMMSS = 181500,
@Env = 'DEVL',
@Frequency = 'DAILY';
EXEC [dbo].[usp_CreateSQLAgentJob]
@JobName = 'DEVL_DAILY_DTSGSID9',
@StartTimeHHMMSS = 181500,
@Env = 'DEVL',
@Frequency = 'DAILY';
EXEC [dbo].[usp_CreateSQLAgentJob]
@JobName = 'DEVL_DAILY_DTSMIN01',
@StartTimeHHMMSS = 182000,
@Env = 'DEVL',
@Frequency = 'DAILY';
EXEC [dbo].[usp_CreateSQLAgentJob]
@JobName = 'DEVL_DAILY_DTSMIN02',
@StartTimeHHMMSS = 182000,
@Env = 'DEVL',
@Frequency = 'DAILY';
EXEC [dbo].[usp_CreateSQLAgentJob]
@JobName = 'DEVL_DAILY_DTSRQ459',
@StartTimeHHMMSS = 190000,
@Env = 'DEVL',
@Frequency = 'DAILY';
EXEC [dbo].[usp_CreateSQLAgentJob]
@JobName = 'DEVL_DAILY_DTSBXPFL',
@StartTimeHHMMSS = 190000,
@Env = 'DEVL',
@Frequency = 'DAILY';
EXEC [dbo].[usp_CreateSQLAgentJob]
@JobName = 'DEVL_DAILY_DESBD427',
@StartTimeHHMMSS = 190500,
@Env = 'DEVL',
@Frequency = 'DAILY';
EXEC [dbo].[usp_CreateSQLAgentJob]
@JobName = 'DEVL_DAILY_DTSBX403',
@StartTimeHHMMSS = 200000,
@Env = 'DEVL',
@Frequency = 'DAILY';
EXEC [dbo].[usp_CreateSQLAgentJob]
@JobName = 'DEVL_DAILY_DTSBE405',
@StartTimeHHMMSS = 201500,
@Env = 'DEVL',
@Frequency = 'DAILY';
EXEC [dbo].[usp_CreateSQLAgentJob]
@JobName = 'DEVL_DAILY_DTSBX405',
@StartTimeHHMMSS = 201500,
@Env = 'DEVL',
@Frequency = 'DAILY';
EXEC [dbo].[usp_CreateSQLAgentJob]
@JobName = 'DEVL_DAILY_DTSRQ335',
@StartTimeHHMMSS = 210000,
@Env = 'DEVL',
@Frequency = 'DAILY';
EXEC [dbo].[usp_CreateSQLAgentJob]
@JobName = 'DEVL_DAILY_DTSBX601',
@StartTimeHHMMSS = 212500,
@Env = 'DEVL',
@Frequency = 'DAILY';

View File

@ -0,0 +1,76 @@
USE [msdb];
GO
-- Note: Frequency here is used only for description (used for category): MONTHLY
-- By Default Job will be scheduled Mon to Fri at specified time. Please change the schedules as per the requirement.
-- 1.
EXEC dbo.usp_CreateSQLAgentJob
@JobName = 'DEVL_MONTHLY_DTSRQ414',
@StartTimeHHMMSS = 181500,
@Env = 'DEVL',
@Frequency = 'MONTHLY';
-- 2.
EXEC dbo.usp_CreateSQLAgentJob
@JobName = 'DEVL_MONTHLY_DTSPMON1',
@StartTimeHHMMSS = 191500,
@Env = 'DEVL',
@Frequency = 'MONTHLY';
-- 3.
EXEC dbo.usp_CreateSQLAgentJob
@JobName = 'DEVL_MONTHLY_DTSCHGVB',
@StartTimeHHMMSS = 192600,
@Env = 'DEVL',
@Frequency = 'MONTHLY';
-- 4.
EXEC dbo.usp_CreateSQLAgentJob
@JobName = 'DEVL_MONTHLY_DTSCHGVR',
@StartTimeHHMMSS = 192700,
@Env = 'DEVL',
@Frequency = 'MONTHLY';
-- 5.
EXEC dbo.usp_CreateSQLAgentJob
@JobName = 'DEVL_MONTHLY_DTSVBKUP',
@StartTimeHHMMSS = 192600,
@Env = 'DEVL',
@Frequency = 'MONTHLY';
-- 6.
EXEC dbo.usp_CreateSQLAgentJob
@JobName = 'DEVL_MONTHLY_DTSVRSTR',
@StartTimeHHMMSS = 193000,
@Env = 'DEVL',
@Frequency = 'MONTHLY';
-- 7.
EXEC dbo.usp_CreateSQLAgentJob
@JobName = 'DEVL_MONTHLY_DTSRQ442',
@StartTimeHHMMSS = 193700,
@Env = 'DEVL',
@Frequency = 'MONTHLY';
-- 8.
EXEC dbo.usp_CreateSQLAgentJob
@JobName = 'DEVL_MONTHLY_DTSBX460',
@StartTimeHHMMSS = 193500,
@Env = 'DEVL',
@Frequency = 'MONTHLY';
-- 9.
EXEC dbo.usp_CreateSQLAgentJob
@JobName = 'DEVL_MONTHLY_DTSRQ513',
@StartTimeHHMMSS = 193700,
@Env = 'DEVL',
@Frequency = 'MONTHLY';
-- 10.
EXEC dbo.usp_CreateSQLAgentJob
@JobName = 'DEVL_MONTHLY_DTSCHGDC',
@StartTimeHHMMSS = 130000,
@Env = 'DEVL',
@Frequency = 'MONTHLY';
GO

View File

@ -0,0 +1,9 @@
USE [msdb]
GO
-- Create a job that runs Monday-Friday at 4:00 AM
EXEC dbo.usp_CreateSQLAgentJob
@JobName = 'DEVL_DAILY_DTSBX215',
@StartTimeHHMMSS = 40000, -- For 4:00:00 AM (143000 for 2:30:00 PM)
@Env = 'DEVL',
@Frequency = 'DAILY';

View File

@ -0,0 +1,81 @@
USE [msdb]
GO
-- Note: Frequency here is used only for description (used for category): DAILY, WEEKLY, etc.
-- By Default Job will be scheduled to run on Mon to Fri at specified time. Please change the schedules as per the requirement.
-- 1.
EXEC dbo.usp_CreateSQLAgentJob
@JobName = 'DEVL_WEEKLY_DTSGSID0',
@StartTimeHHMMSS = 60000,
@Env = 'DEVL',
@Frequency = 'WEEKLY';
-- 2.
EXEC dbo.usp_CreateSQLAgentJob
@JobName = 'DEVL_WEEKLY_DTSGSID1',
@StartTimeHHMMSS = 61500,
@Env = 'DEVL',
@Frequency = 'WEEKLY';
-- 3.
EXEC dbo.usp_CreateSQLAgentJob
@JobName = 'DEVL_WEEKLY_DTSBX202',
@StartTimeHHMMSS = 70000,
@Env = 'DEVL',
@Frequency = 'WEEKLY';
-- 4.
EXEC dbo.usp_CreateSQLAgentJob
@JobName = 'DEVL_WEEKLY_DTSFT202',
@StartTimeHHMMSS = 80000,
@Env = 'DEVL',
@Frequency = 'WEEKLY';
-- 5.
EXEC dbo.usp_CreateSQLAgentJob
@JobName = 'DEVL_WEEKLY_DTSBX470',
@StartTimeHHMMSS = 70000,
@Env = 'DEVL',
@Frequency = 'WEEKLY';
-- 6.
EXEC dbo.usp_CreateSQLAgentJob
@JobName = 'DEVL_WEEKLY_DTSBXREJ',
@StartTimeHHMMSS = 170000,
@Env = 'DEVL',
@Frequency = 'WEEKLY';
-- 7.
EXEC dbo.usp_CreateSQLAgentJob
@JobName = 'DEVL_WEEKLY_DTSPDAY7',
@StartTimeHHMMSS = 191000,
@Env = 'DEVL',
@Frequency = 'WEEKLY';
-- 8.
EXEC dbo.usp_CreateSQLAgentJob
@JobName = 'DEVL_WEEKLY_DTSBX122',
@StartTimeHHMMSS = 191400,
@Env = 'DEVL',
@Frequency = 'WEEKLY';
-- 9.
EXEC dbo.usp_CreateSQLAgentJob
@JobName = 'DEVL_WEEKLY_DTSRQ511',
@StartTimeHHMMSS = 191400,
@Env = 'DEVL',
@Frequency = 'WEEKLY';
-- 10.
EXEC dbo.usp_CreateSQLAgentJob
@JobName = 'DEVL_WEEKLY_DTSRQ444',
@StartTimeHHMMSS = 70000,
@Env = 'DEVL',
@Frequency = 'WEEKLY';
-- 11.
EXEC dbo.usp_CreateSQLAgentJob
@JobName = 'DEVL_WEEKLY_DTSRQ126',
@StartTimeHHMMSS = 90000,
@Env = 'DEVL',
@Frequency = 'WEEKLY';

View File

@ -0,0 +1,86 @@
/********************************************************************************************
Section 1: Daily Job Schedule Lookup
--------------------------------------------------------------------------------------------
Description:
Returns all SQL Agent jobs scheduled to run on a given date, along with their control
status (IsActive) and configured runtime from JobControl.
Parameters:
@CheckDate - The date to check job schedules for.
Notes:
<20> Uses MSDB<44>s internal schedule definitions (sysschedules, sysjobschedules).
<20> Supports One-time, Daily, Weekly, and Monthly schedule types.
<20> Can easily be adapted for DEVL / TEST / PROD by changing @DbName.
********************************************************************************************/
USE msdb;
GO
DECLARE @CheckDate DATE = CAST(GETDATE() AS DATE); -- Change if needed
DECLARE @CheckWeekday INT = DATEPART(WEEKDAY, @CheckDate);
DECLARE @Env SYSNAME = 'DEVL'; -- Change for TEST or PROD
DECLARE @DbName SYSNAME;
-- Map environment to the right control DB
SET @DbName = CASE @Env
WHEN 'DEVL' THEN 'DevlDUTASJobSchedule'
WHEN 'TEST' THEN 'TestDUTASJobSchedule'
WHEN 'PROD' THEN 'ProdDUTASJobSchedule'
END;
DECLARE @Sql NVARCHAR(MAX);
SET @Sql = N'
SELECT
j.name AS SQLAgentJobName,
jc.JobName AS ControlJobName,
jc.ScheduledStartTime,
jc.IsActive,
s.name AS ScheduleName,
s.freq_type,
s.freq_interval,
s.freq_subday_type,
s.freq_subday_interval,
s.active_start_date,
CASE s.freq_type
WHEN 1 THEN ''One-time''
WHEN 4 THEN ''Daily''
WHEN 8 THEN ''Weekly''
WHEN 16 THEN ''Monthly''
ELSE ''Other''
END AS FrequencyType,
CASE
WHEN s.freq_type = 1
AND s.active_start_date = CONVERT(INT, CONVERT(CHAR(8), @CheckDateParam, 112))
THEN 1
WHEN s.freq_type = 4
AND s.active_start_date <= CONVERT(INT, CONVERT(CHAR(8), @CheckDateParam, 112))
THEN 1
WHEN s.freq_type = 8 -- Weekly
AND (POWER(2, @CheckWeekdayParam - 1) & s.freq_interval) > 0
THEN 1
WHEN s.freq_type = 16 -- Monthly
AND DAY(@CheckDateParam) = s.freq_interval
THEN 1
ELSE 0
END AS IsScheduledToday
FROM msdb.dbo.sysjobs j
JOIN msdb.dbo.sysjobschedules js ON j.job_id = js.job_id
JOIN msdb.dbo.sysschedules s ON js.schedule_id = s.schedule_id
LEFT JOIN ' + QUOTENAME(@DbName) + '.dbo.JobControl jc ON jc.JobName = j.name
WHERE jc.IsActive = 1
AND (
(s.freq_type = 1 AND s.active_start_date = CONVERT(INT, CONVERT(CHAR(8), @CheckDateParam, 112))) -- One-time
OR (s.freq_type = 4 AND s.active_start_date <= CONVERT(INT, CONVERT(CHAR(8), @CheckDateParam, 112))) -- Daily
OR (s.freq_type = 8 AND (POWER(2, @CheckWeekdayParam - 1) & s.freq_interval) > 0) -- Weekly
OR (s.freq_type = 16 AND DAY(@CheckDateParam) = s.freq_interval) -- Monthly
)
ORDER BY jc.ScheduledStartTime;
';
EXEC sp_executesql
@Sql,
N'@CheckDateParam DATE, @CheckWeekdayParam INT',
@CheckDateParam = @CheckDate,
@CheckWeekdayParam = @CheckWeekday;
GO

View File

@ -0,0 +1,12 @@
USE DevlDUTASJobSchedule;
GO
UPDATE dbo.JobControl
SET IsActive = 0
WHERE Frequency = 'MONTHLY';
GO
-- Optional: Verify changes
SELECT JobName, Frequency, IsActive
FROM dbo.JobControl
WHERE Frequency = 'MONTHLY';

View File

@ -0,0 +1,13 @@
-- If you know both the job name and schedule name
DECLARE @JobName NVARCHAR(100) = 'DEVL_MONTHLY_DTSCHGDC';
DECLARE @ScheduleName NVARCHAR(200) = 'DEVL_MONTHLY_DTSCHGDC_MonthlySchedule';
DECLARE @JobId UNIQUEIDENTIFIER;
-- Get job ID
SELECT @JobId = job_id FROM msdb.dbo.sysjobs WHERE name = @JobName;
-- Detach from specific job
EXEC msdb.dbo.sp_detach_schedule @job_id = @JobId, @schedule_name = @ScheduleName;
-- Then delete
EXEC msdb.dbo.sp_delete_schedule @schedule_name = @ScheduleName;

View File

@ -0,0 +1,16 @@
USE DevlDUTASJobSchedule;
GO
-- 1. Check today's job status
SELECT JobName, Status, ErrorMessage
FROM dbo.JobExecutionHistory
WHERE RunDate = CAST(GETDATE() AS DATE)
AND JobName = 'DEVL_WEEKLY_DTSGSID1';
-- 2. Mark DTSBX305 as manually overridden
EXEC dbo.usp_ForceComplete 'DEVL_WEEKLY_DTSGSID1', 'Neeraj.Kumar';
-- 3. Verify the override
SELECT JobName, Status, OverrideBy, OverrideDate
FROM dbo.JobExecutionHistory
WHERE JobName = 'DEVL_WEEKLY_DTSGSID1' AND RunDate = CAST(GETDATE() AS DATE);

View File

@ -0,0 +1,47 @@
USE msdb;
GO
PRINT '================================================================================';
PRINT 'SECTION 1: JOB CONTROL INFORMATION';
PRINT '================================================================================';
GO
-- View all active jobs
SELECT JobName, ScheduledStartTime, Frequency, IsActive
FROM DevlDUTASJobSchedule.dbo.JobControl
WHERE IsActive = 1
ORDER BY Frequency, ScheduledStartTime;
GO
-- View all inactive jobs
SELECT JobName, Frequency, ScheduledStartTime
FROM DevlDUTASJobSchedule.dbo.JobControl
WHERE IsActive = 0
ORDER BY Frequency;
GO
-- Find weekly/monthly jobs
SELECT JobName, Frequency, ScheduledStartTime
FROM DevlDUTASJobSchedule.dbo.JobControl
WHERE Frequency IN ('WEEKLY', 'MONTHLY')
ORDER BY Frequency, ScheduledStartTime;
GO
PRINT '================================================================================';
PRINT 'SECTION 2: JOB DEPENDENCIES';
PRINT '================================================================================';
GO
-- Check dependencies for a job
DECLARE @Job NVARCHAR(100) = 'DEVL_MONTHLY_DTSCHGVR';
SELECT JobName, PredecessorJobName
FROM DevlDUTASJobSchedule.dbo.JobDependencies
WHERE JobName = @Job;
GO
-- Show dependency chain overview
SELECT d.JobName, d.PredecessorJobName, jc.ScheduledStartTime, jc.Frequency
FROM DevlDUTASJobSchedule.dbo.JobDependencies d
JOIN DevlDUTASJobSchedule.dbo.JobControl jc ON d.JobName = jc.JobName
ORDER BY jc.Frequency, jc.ScheduledStartTime;
GO

View File

@ -0,0 +1,42 @@
USE msdb;
GO
PRINT '================================================================================';
PRINT 'SECTION 1: SQL AGENT JOB STATUS';
PRINT '================================================================================';
GO
-- List all jobs in SQL Agent
SELECT name AS JobName, enabled, date_created, date_modified
FROM msdb.dbo.sysjobs
ORDER BY name;
GO
-- Job schedule summary
SELECT j.name AS JobName, s.name AS ScheduleName,
s.enabled, s.freq_type, s.active_start_date, s.active_start_time
FROM msdb.dbo.sysjobs j
JOIN msdb.dbo.sysjobschedules js ON j.job_id = js.job_id
JOIN msdb.dbo.sysschedules s ON js.schedule_id = s.schedule_id
ORDER BY j.name;
GO
-- Last job run details
SELECT j.name AS JobName,
h.run_status,
CASE h.run_status
WHEN 0 THEN 'Failed'
WHEN 1 THEN 'Succeeded'
WHEN 2 THEN 'Retry'
WHEN 3 THEN 'Canceled'
WHEN 4 THEN 'In Progress'
END AS StatusDescription,
msdb.dbo.agent_datetime(h.run_date, h.run_time) AS RunDateTime,
h.run_duration
FROM dbo.sysjobs j
LEFT JOIN dbo.sysjobhistory h ON j.job_id = h.job_id
WHERE h.instance_id IN (
SELECT MAX(instance_id) FROM dbo.sysjobhistory GROUP BY job_id
)
ORDER BY RunDateTime DESC;
GO

View File

@ -0,0 +1,21 @@
USE DevlDUTASJobSchedule;
GO
DECLARE @Runday DATE = DATEADD(day, +0, CAST(GETDATE() AS DATE)); -- -1 for Yesterday
SELECT
jeh.ExecutionID,
jeh.JobName,
jeh.RunDate,
jc.ScheduledStartTime,
jeh.ActualStartTime,
jeh.ActualEndTime,
jeh.Status,
jeh.ErrorMessage,
jeh.OverrideFlag,
jeh.OverrideBy
FROM dbo.JobExecutionHistory jeh
INNER JOIN dbo.JobControl jc
ON jeh.JobName = jc.JobName
WHERE jeh.RunDate = @Runday
ORDER BY jc.ScheduledStartTime, jeh.ActualStartTime;

View File

@ -0,0 +1,9 @@
USE [DevlDUTASJobSchedule]
GO
-- 1. Preview missed jobs (safe, no run):
EXEC dbo.usp_TriggerMissedJobs @DryRun = 1;
-- 2. Actually trigger missed jobs:
EXEC dbo.usp_TriggerMissedJobs @DryRun = 0;

View File

@ -0,0 +1,16 @@
# Example PowerShell snippet
$Server = "DOES-DUTAS-SQL1"
$BackupPath = "\\DOES-RAINVM-DEV\E$\Neeraj\SqlAgent\Backup\"
$Timestamp = Get-Date -Format "yyyyMMdd_HHmmss"
$ZipFile = "$BackupPath\SQLAgentJobs_$Timestamp.zip"
# Make backup folder if not exist
if (-not (Test-Path $BackupPath)) { New-Item -ItemType Directory -Path $BackupPath }
# Export all jobs as SQL files
sqlcmd -S $Server -Q "EXEC msdb.dbo.sp_help_job" -o "$BackupPath\SQLAgentJobs_$Timestamp.txt"
# Compress to zip
Compress-Archive -Path "$BackupPath\*" -DestinationPath $ZipFile -Force
Write-Host "✅ Backup complete: $ZipFile"

View File

@ -0,0 +1,102 @@
param(
[Parameter(Mandatory = $true)]
[string]$JobName,
[Parameter(Mandatory = $true)]
[ValidateSet('DEVL', 'TEST', 'PROD')]
[string]$Env
)
try {
Write-Host "Starting job $JobName in environment $Env at $(Get-Date)"
# ------------------------------------------------------------
# Extract JCL from JobName (ENV_FREQUENCY_JOB pattern)
# ------------------------------------------------------------
$JCL = $JobName -replace '^[A-Z]+_[A-Z]+_', ''
Write-Host "Extracted JCL: $JCL from JobName: $JobName" -ForegroundColor Yellow
# ------------------------------------------------------------
# Environment-specific configuration
# ------------------------------------------------------------
switch ($Env.ToUpper()) {
'DEVL' {
$ComputerName = '10.57.110.120'
$DatabaseName = 'DevlDUTASJobSchedule'
}
'TEST' {
$ComputerName = '10.57.110.141'
$DatabaseName = 'TestDUTASJobSchedule'
}
'PROD' {
$ComputerName = '10.57.111.120'
$DatabaseName = 'ProdDUTASJobSchedule'
}
default {
throw "Invalid environment specified: $Env"
}
}
# ------------------------------------------------------------
# Remote credentials
# (recommend moving credentials to secure vault for production)
# ------------------------------------------------------------
$username = "DUTASSQLAdminP@does.dcgov.priv"
$password = "4ho@3Pr&Xof8" | ConvertTo-SecureString -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential($username, $password)
# ------------------------------------------------------------
# Execute job remotely using the extracted JCL
# ------------------------------------------------------------
Write-Host "Connecting to remote server $ComputerName ..."
$exitCode = Invoke-Command -ComputerName $ComputerName `
-Credential $credential `
-Authentication CredSSP `
-SessionOption (New-PSSessionOption -SkipCACheck -SkipCNCheck -SkipRevocationCheck) `
-ArgumentList $JobName, $JCL, $Env `
-ScriptBlock {
param($JobName, $JCL, $Env)
Write-Host "Remote execution - JobName: $JobName, JCL: $JCL, Env: $Env"
$process = Start-Process -FilePath "powershell.exe" `
-ArgumentList "-ExecutionPolicy Bypass -File `"E:\PSScript\RCSubmit-Job.ps1`" -JobName `"$JCL`" -Env `"$Env`"" `
-NoNewWindow -Wait -PassThru
return $process.ExitCode
}
if ($exitCode -eq 0) {
Write-Host "Job $JobName (JCL: $JCL) completed successfully at $(Get-Date)" -ForegroundColor Green
} else {
Write-Error "Job $JobName (JCL: $JCL) failed with exit code: $exitCode"
}
}
catch {
Write-Error "Job $JobName failed with error: $($_.Exception.Message)"
$exitCode = 1
}
finally {
# ------------------------------------------------------------
# Log exit code to the appropriate database
# ------------------------------------------------------------
try {
$connectionString = "Server=localhost;Database=$DatabaseName;Trusted_Connection=true;"
$connection = New-Object System.Data.SqlClient.SqlConnection($connectionString)
$connection.Open()
$command = $connection.CreateCommand()
$command.CommandText = @"
INSERT INTO dbo.JobExitCodes (JobName, RunDate, ExitCode, RecordedTime)
VALUES ('$JobName', CAST(GETDATE() AS DATE), $exitCode, GETDATE());
"@
$command.ExecuteNonQuery()
$connection.Close()
Write-Host "Exit code $exitCode logged to database $DatabaseName for job $JobName"
}
catch {
$errorMsg = $_.Exception.Message
Write-Host "Failed to log exit code to database $DatabaseName`: $errorMsg"
}
}
exit $exitCode

View File

@ -0,0 +1,108 @@
param(
[string]$JobName,
[string]$Env
)
# --- Parameter Validation ---
if (-not $JobName) {
Write-Host "JobName parameter is required" -ForegroundColor Red
exit 1
}
if (-not $Env) {
Write-Host "Environment (Env) parameter is required" -ForegroundColor Red
exit 1
}
# --- Execute Job ---
Write-Host "Submitting job: $JobName in environment: $Env" -ForegroundColor Cyan
$output = & "$env:rcbin\submit.exe" -DSN="DOESTAX.$Env.JOBS.BATCH.LIB($JobName)"
$exitCode = [int]$LASTEXITCODE
$isSuccess = 0
# --- Parse SYSLOG Path ---
$syslogPath = $null
$syslogFolder = "Not found"
$content = @()
$summary = @()
try {
$syslogPath = $output | Select-String -Pattern "SYSLOG=\[(.*)\]" | ForEach-Object { $_.Matches.Groups[1].Value }
if ($syslogPath -and (Test-Path $syslogPath)) {
$syslogFolder = Split-Path $syslogPath -Parent
$content = Get-Content $syslogPath -ErrorAction Stop
$summary = $content | Select-String -Pattern "%Job Overall Stats:" -Context 0,7 | ForEach-Object {
$_.Context.PostContext | Select-Object -Skip 1 -First 5
}
} else {
Write-Host "SYSLOG path not found or inaccessible: $syslogPath" -ForegroundColor Yellow
$summary = @("SYSLOG file not found in output", "Raw output:", $output -join "`n")
}
}
catch {
Write-Host "Error processing SYSLOG: $($_.Exception.Message)" -ForegroundColor Yellow
$summary = @("Error reading SYSLOG: $($_.Exception.Message)", "Raw output:", $output -join "`n")
}
# --- Evaluate Return Codes ---
$successConditions = @(
{ $JobName -eq "GSIRQ300" -and $exitCode -eq 50 },
{ $JobName -eq "DTSGWAGE" -and $exitCode -eq 8 },
{ $JobName -eq "DTSGCHKS" -and $exitCode -eq 8 },
{ $JobName -eq "DTSGPAYT" -and $exitCode -eq 8 },
{ $JobName -eq "DTSBXACH" -and $exitCode -eq 2 },
{ $JobName -eq "DTSBXREL" -and $exitCode -eq 2 },
{ $JobName -eq "DTSMIN02" -and $exitCode -eq 4 },
{ $JobName -eq "DTSBE405" -and $exitCode -eq 910 },
{ $JobName -eq "DTSBXREJ" -and $exitCode -eq 4 },
{ $JobName -eq "DTSRQ444" -and $exitCode -eq 4 },
{ $exitCode -eq 0 }
)
if ($successConditions | Where-Object { & $_ }) {
Write-Host "Job $JobName succeeded with code $exitCode" -ForegroundColor Green
$isSuccess = 0
} else {
Write-Host "Job $JobName failed with code $exitCode" -ForegroundColor Red
$isSuccess = 1
# Only use error if we don't have a proper summary
if ($summary.Count -eq 0) {
$summary = @($Error[0])
}
}
# --- Email Notification ---
$smtpServer = "smtp4.dc.gov"
$fromEmail = "Dutas@dc.gov"
$toEmail = "neerajk@innovaconsulting.com"
$ccEmail = @("neerajk@innovaconsulting.com")
$emailBody = @"
<pre style='font-family: Courier, monospace;'>
DUTAS Batch Job: $JobName Execution Report
==========================================
$($summary -join "`n")
==========================================
Return Code: $exitCode
Status: $(if ($isSuccess -eq 0) { "SUCCESS" } else { "FAILED" })
JOBLOG Path: $syslogFolder
</pre>
"@
try {
Send-MailMessage -SmtpServer $smtpServer -Port 25 `
-From $fromEmail -To $toEmail -Cc $ccEmail `
-Subject "DUTAS-[$Env] Job Status: $JobName - $(if ($isSuccess -eq 0) { 'SUCCESS' } else { 'FAILED' })" `
-Body $emailBody -BodyAsHtml
Write-Host "Email sent successfully to $toEmail" -ForegroundColor Cyan
}
catch {
Write-Host "Failed to send email: $($_.Exception.Message)" -ForegroundColor Yellow
}
Write-Host "`n---------------------------------------------"
Write-Host "Job: $JobName | ExitCode: $exitCode | Status: $(if ($isSuccess -eq 0) { 'SUCCESS' } else { 'FAILED' })"
Write-Host "---------------------------------------------`n"
exit $isSuccess

View File

@ -0,0 +1,15 @@
DECLARE @SrcDB NVARCHAR(128) = 'DevlDUTASJobSchedule';
DECLARE @NewDB NVARCHAR(128) = 'TestDUTASJobSchedule';
DECLARE @Backup NVARCHAR(260) = '\\DOES-RAINVM-DEV\E$\Neeraj\SqlAgent\Backup\' + @SrcDB + '.bak';
-- Backup Source
BACKUP DATABASE @SrcDB TO DISK = @Backup WITH INIT, COMPRESSION;
-- Restore as Target
DECLARE @SQL NVARCHAR(MAX) = '
RESTORE DATABASE [' + @NewDB + ']
FROM DISK = N''' + @Backup + '''
WITH MOVE N''' + @SrcDB + ''' TO N''\\DOES-RAINVM-DEV\E$\SQLData\' + @NewDB + '.mdf'',
MOVE N''' + @SrcDB + '_log'' TO N''\\DOES-RAINVM-DEV\E$\SQLLogs\' + @NewDB + '_log.ldf'',
REPLACE;';
EXEC(@SQL);

View File

@ -0,0 +1,15 @@
DECLARE @SrcDB NVARCHAR(128) = 'TestDUTASJobSchedule';
DECLARE @NewDB NVARCHAR(128) = 'ProdDUTASJobSchedule';
DECLARE @Backup NVARCHAR(260) = '\\DOES-RAINVM-DEV\E$\Neeraj\SqlAgent\Backup\' + @SrcDB + '.bak';
-- Backup Source
BACKUP DATABASE @SrcDB TO DISK = @Backup WITH INIT, COMPRESSION;
-- Restore as Target
DECLARE @SQL NVARCHAR(MAX) = '
RESTORE DATABASE [' + @NewDB + ']
FROM DISK = N''' + @Backup + '''
WITH MOVE N''' + @SrcDB + ''' TO N''\\DOES-RAINVM-DEV\E$\SQLData\' + @NewDB + '.mdf'',
MOVE N''' + @SrcDB + '_log'' TO N''\\DOES-RAINVM-DEV\E$\SQLLogs\' + @NewDB + '_log.ldf'',
REPLACE;';
EXEC(@SQL);