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

SQLDBA - Get Space Used by Tables and Indexes in SQL Server

 Get Space Used by Tables and Indexes in SQL Server Databases can consume significant amounts of storage, so it’s important to understand ho...