Published on

January 30, 2011

Автоматизация уведомлений об ошибках SQL Server

Как администратор баз данных, одной из самых важных задач является обеспечение стабильности и надежности среды 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.

Не забудьте настроить хранимые процедуры в соответствии с вашими конкретными требованиями и добавить больше критических ошибок при необходимости.

Счастливой автоматизации!

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.