Как администратор баз данных, одной из самых важных задач является обеспечение стабильности и надежности среды SQL Server. Это включает мониторинг и устранение критических ошибок, которые могут возникнуть. В этой статье мы рассмотрим, как автоматизировать процесс получения уведомлений о критических ошибках SQL Server по электронной почте с использованием собственного T-SQL.
Сначала создадим таблицу для хранения подробностей критического журнала ошибок:
USE [DBA_test]
GO
CREATE TABLE [dbo].[dba_all_errorlog_details](
[id] [INT] IDENTITY(1,1) NOT NULL,
[date] [DATETIME] NULL,
[processinfo] [SYSNAME] NOT NULL,
[text] [SYSNAME] NOT NULL
) ON [PRIMARY]
Затем создадим хранимую процедуру для заполнения таблицы критическими ошибками:
USE [DBA_test]
GO
CREATE PROC [dbo].[usp_dba_critical_error]
AS
BEGIN
INSERT INTO DBA_test.DBO.dba_all_errorlog_details
EXEC DBA_test.DBO.SP_READERRORLOG 0,1,'Setting database option OFFLINE'
-- Вставьте другие критические ошибки при необходимости
END
Теперь создадим еще одну хранимую процедуру для отправки электронной почты команде администраторов баз данных с критическими ошибками:
USE [DBA_test]
GO
CREATE PROC [dbo].[usp_dba_critical_error_DBmail]
AS
BEGIN
EXEC [DBA_test].[DBO].[usp_dba_critical_error]
IF EXISTS(SELECT 1 FROM DBA_test.DBO.dba_all_errorlog_details)
BEGIN
DECLARE @processinfo VARCHAR(500)
DECLARE @text VARCHAR(5000)
DECLARE @date VARCHAR(200)
DECLARE @dateadd VARCHAR(200)
DECLARE @maxid int
DECLARE @minid int
SET @dateadd = REPLACE(CONVERT(CHAR(8),DATEADD(HH,-2,GETDATE()),108),':','')
SELECT @minid=MIN(id) FROM DBA_test.DBO.dba_all_errorlog_details
SELECT @maxid=MAX(id) FROM DBA_test.DBO.dba_all_errorlog_details
WHILE (@minid<=@maxid)
BEGIN
SELECT @date=[date],@processinfo=[processinfo],@text=[text] FROM DBA_test.DBO.dba_all_errorlog_details
WHERE id=@minid and REPLACE(CONVERT(CHAR(8),DATEADD(hh,-2,date),108),':','') < @dateadd
SET @minid=@minid+1
END
DECLARE @body1 VARCHAR(2000)
SET @body1= 'Сервер: Следующие сообщения являются критическими ошибками'+ CHAR(13)+CHAR(13)
SET @body1= @body1 +
'Дата: '+@date+CHAR(9)+
'Информация о процессе: '+@processinfo+ CHAR(13)+
'Текст:'+@text+ CHAR(13)+CHAR(13)
EXEC MSDB.DBO.SP_SEND_DBMAIL @recipients='your-email@example.com',
@subject = 'Сервер: Следующие сообщения являются критическими ошибками',
@body = @body1,
@body_format = 'text',
@profile_name='test';
END
END
Теперь вы можете запланировать выполнение хранимой процедуры “usp_dba_critical_error_DBmail” каждые два часа с помощью SQL Server Agent или любого другого инструмента планирования. Это гарантирует, что команда администраторов баз данных получит уведомление по электронной почте при возникновении критической ошибки в среде SQL Server.
Автоматизируя процесс получения уведомлений о критических ошибках SQL Server по электронной почте, вы можете оперативно реагировать на любые проблемы и обеспечить стабильность и надежность вашей среды SQL Server.
Не забудьте настроить хранимые процедуры в соответствии с вашими конкретными требованиями и добавить больше критических ошибок при необходимости.
Счастливой автоматизации!