USE msdb
GO 

DECLARE @servername NVARCHAR(150)
DECLARE @mysubject NVARCHAR(200)
DECLARE @msg NVARCHAR(500)
DECLARE @emailrecipients VARCHAR (350)
DECLARE @profile SYSNAME

SET @profile = (SELECT P.name FROM sysmail_principalprofile (NOLOCK) as PP
INNER JOIN sysmail_profile (NOLOCK) as P ON PP.profile_id = P.profile_id)

SET @servername = @@SERVERNAME
SET @emailrecipients = 'me@test.com' 
SET @mysubject = 'URGENT: SQL Server Agent Restarted on ' + @servername + '!!!'
SET @msg = '<H2>SQL Server Agent just started on ' + @servername + '. Please verify database server and check if SQL Server was restarted as well.</H2>'

			EXEC msdb.dbo.sp_send_dbmail @recipients = @emailrecipients,
				@profile_name = @profile, @subject = @mysubject,
				@body = @msg, @body_format = 'HTML',@query_no_truncate = 1

--SELECT * from sysmail_allitems order by send_request_date desc

Job

USE [msdb]
GO

BEGIN TRANSACTION
DECLARE @ReturnCode INT
SELECT @ReturnCode = 0

IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N'Database Maintenance' AND category_class=1)
BEGIN
EXEC @ReturnCode = msdb.dbo.sp_add_category @class=N'JOB', @type=N'LOCAL', @name=N'Database Maintenance'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback

END

DECLARE @jobId BINARY(16)
EXEC @ReturnCode =  msdb.dbo.sp_add_job @job_name=N'DBA - SQL Agent Restart Check', 
		@enabled=1, 
		@notify_level_eventlog=0, 
		@notify_level_email=2, 
		@notify_level_netsend=0, 
		@notify_level_page=0, 
		@delete_level=0, 
		@description=N'Checks for a SQL Server Agent restart and emails DBAs to investigate further.', 
		@category_name=N'Database Maintenance', 
		@owner_login_name=N'sa', 
		@notify_email_operator_name=N'DBA', @job_id = @jobId OUTPUT
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Send email when SQL Server Agent starts', 
		@step_id=1, 
		@cmdexec_success_code=0, 
		@on_success_action=1, 
		@on_success_step_id=0, 
		@on_fail_action=2, 
		@on_fail_step_id=0, 
		@retry_attempts=0, 
		@retry_interval=0, 
		@os_run_priority=0, @subsystem=N'TSQL', 
		@command=N'USE msdb
GO 
DECLARE @servername NVARCHAR(150)
DECLARE @mysubject NVARCHAR(200)
DECLARE @msg NVARCHAR(500)
DECLARE @emailrecipients VARCHAR (350)
DECLARE @profile SYSNAME

SET @profile = (SELECT TOP 1  P.name FROM sysmail_principalprofile (NOLOCK) as PP
INNER JOIN sysmail_profile (NOLOCK) as P ON PP.profile_id = P.profile_id)

SET @servername = @@SERVERNAME
SET @emailrecipients = ''me@test.com'' 
SET @mysubject = ''URGENT: SQL Server Agent Restarted on '' + @servername + ''!!!''
SET @msg = ''<H2>SQL Server Agent just started on '' + @servername + ''. Please verify database server and check if SQL Server was restarted as well.</H2>''

			EXEC msdb.dbo.sp_send_dbmail @recipients = @emailrecipients,
				@profile_name = @profile, @subject = @mysubject,
				@body = @msg, @body_format = ''HTML'',@query_no_truncate = 1

--SELECT * from sysmail_allitems order by send_request_date desc', 
		@database_name=N'master', 
		@flags=12
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = 1
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_add_jobschedule @job_id=@jobId, @name=N'At startup', 
		@enabled=1, 
		@freq_type=64, 
		@freq_interval=0, 
		@freq_subday_type=0, 
		@freq_subday_interval=0, 
		@freq_relative_interval=0, 
		@freq_recurrence_factor=0, 
		@active_start_date=20180109, 
		@active_end_date=99991231, 
		@active_start_time=0, 
		@active_end_time=235959, 
		@schedule_uid=N'114fce8b-c5c3-4301-b18b-2aa9f4a47850'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N'(local)'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
COMMIT TRANSACTION
GOTO EndSave
QuitWithRollback:
    IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
EndSave:
GO


Last modified: March 25, 2021

Author

Comments

Write a Reply or Comment