Tuesday, 17 June 2025

SQLDBA - To send an email when service is stopped

-- To send an email when service is stopped 


USE [msdb]

GO


BEGIN TRANSACTION

DECLARE @ReturnCode INT

SELECT @ReturnCode = 0


IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N'[Batch - L]' AND category_class=1)

BEGIN

EXEC @ReturnCode = msdb.dbo.sp_add_category @class=N'JOB', @type=N'LOCAL', @name=N'[Batch - L]'

IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback


END


DECLARE @jobId BINARY(16)

EXEC @ReturnCode =  msdb.dbo.sp_add_job @job_name=N'Job - XXXX Status Notification', 

@enabled=1, 

@notify_level_eventlog=0, 

@notify_level_email=0, 

@notify_level_netsend=0, 

@notify_level_page=0, 

@delete_level=0, 

@description=N'This job runs for every 12 hours and checks the XXXXX service and triggers emails', 

@category_name=N'[Batch - L]', 

@owner_login_name=N'sa', @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'XXXX Service Status Verification', 

@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'PowerShell', 

@command=N'# Define the service name and email parameters

$serviceName = "XXXXX"   -- Keep the service name 

$smtpServer = "smtp.gmail.com"

$smtpFrom = "ksubbareddy.sap@gmail.com"

$smtpTo = "ksubbareddy.sap@gmail.com"

$smtpSubject = "$serviceName service status on SQL1 Server"

$smtpBody = ""


# Function to send email

function Send-Email {

    param (

        [string]$smtpServer,

        [string]$smtpFrom,

        [string]$smtpTo,

        [string]$smtpSubject,

        [string]$smtpBody

    )

    Send-MailMessage -SmtpServer $smtpServer -From $smtpFrom -To $smtpTo -Subject $smtpSubject -Body $smtpBody

}


# Check the service status

$service = Get-Service -Name $serviceName

if ($service.Status -eq ''Stopped'') {

    $smtpBody = "The $serviceName service is currently stopped on the server."

} else {

    $smtpBody = "The $serviceName service is currently running on the server."

}


# Send the email notification

Send-Email -smtpServer $smtpServer -smtpFrom $smtpFrom -smtpTo $smtpTo -smtpSubject $smtpSubject -smtpBody $smtpBody

Write-Host "Email notification sent with the current status of $serviceName service."


', 

@database_name=N'master', 

@flags=0

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'Recurring', 

@enabled=1, 

@freq_type=4, 

@freq_interval=1, 

@freq_subday_type=8, 

@freq_subday_interval=12, 

@freq_relative_interval=0, 

@freq_recurrence_factor=0, 

@active_start_date=20250616, 

@active_end_date=99991231, 

@active_start_time=0, 

@active_end_time=235959, 

@schedule_uid=NULL;

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



No comments:

Post a Comment

SQL_DBA- Ip Address Ping

Start-Transcript - path C:/Script/PingLog.txt -Append   Ping.exe -t spiceworks.com | ForEach { "{0} - {1}" -f (Get-Date), $_ } ...