среда, 18 июля 2012 г.

Мониторинг зеркалирования (Mirroring)


Мониторинг зеркалирования(Mirroring) и оповещения о проблемах с ним возможно реализовать несколькими способами.


1-ый способ, самый простой, это создать оповещение на события зеркалирования.
Для начало надо активировать предупреждения и выставить пороги срабатывания их:

Выбрать базу данных, на которой настроено зеркалирование, затем в меню БД выбрать Tasks-Launche Database Mirroring Monitor, вкладка Warnings
Выше на изображение выставлены следующие предупреждения:

Предупреждать, если размер неотправленного журнала превышает пороговое значение

Предупреждать, если время хранения самой старой неотправленной транзакции превышает пороговое значение.

Данная активация только будет отслеживать состояние зеркалирования и протоколировать состояние в журнале MS SQL Server.
Чтобы срабатывали оповещения в том числе на почту, необходимо создать алерты на данные события:

USE [msdb]
GO
EXEC msdb.dbo.sp_add_alert @name=N'Warn if the unsent log exceeds the threshold',
            @message_id=32042,
            @severity=0,
            @enabled=1,
            @delay_between_responses=120,
            @include_event_description_in=1,
             @notification_message=N'ACTHTUNGGG! Problems with mirroring!',
            @category_name=N'[Uncategorized]',
            @job_id=N'00000000-0000-0000-0000-000000000000'

GO

Создается алерт на сообщение об ошибки № 32042

В следующей таблице указаны идентификаторы событий, связанные с каждым предупреждением.

Предупреждение монитора зеркального отображения баз данных
Имя события
Идентификатор события
Предупреждать, если размер неотправленного журнала превышает пороговое значение
Неотправленный журнал
32042
Предупреждать, если размер невосстановленного журнала превышает пороговое значение
Невосстановленный журнал
32043
Предупреждать, если время хранения самой старой неотправленной транзакции превышает пороговое значение
Самая старая неотправленная транзакция
32044
Предупреждать, если затраты на фиксирование изменений на зеркальном сервере превышают пороговое значение
Затраты на фиксацию транзакции на зеркальном сервере
32045

 Затем необходимо данный алерт активировать в оповещениях оператора оповещений  MS SQL агента., если оператора нет , то создать.
После этого будут приходить сообщения на почтовый адрес, указанный у оператора.
Рекомендуется настроить данные алерты на обоих серверах зеркалирования.

2-й способ мониторинга зеркалирования, это процедура мониторинга, которая запускается по расписанию через  задание ms sql агента.
Не буду описывать принцип действия, он  прост, просто представлю его код:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
create  procedure [dbo].[mirroring_mail_alert]

   @mail_profile varchar(50),
   @recipients varchar(max)
as
begin

set nocount off;
declare @db_name varchar(150)
declare @mirroring_state int
declare @mirroring_state_desc varchar(45)
declare @message varchar(200)
declare cur cursor for
      select mirroring_state,DB_NAME(database_id) as dbname ,mirroring_state_desc

      from sys.database_mirroring where mirroring_state_desc not in  ('SYNCHRONIZED','SYNCHRONIZING')

open cur
FETCH NEXT FROM  cur into @mirroring_state,@db_name,@mirroring_state_desc
      while @@fetch_status=0
      begin

              set @message='На сервере' +@@SERVERNAME+ ' проблема с зерклированием БД '''+@db_name+''', база данных в '

             + ' состояние "'+@mirroring_state_desc+'". Дата сообщения :'+convert(varchar(40),GETDATE())

              exec msdb..sp_send_dbmail

                             @profile_name= @mail_profile ,
                             @recipients=@recipients,
                             @body=@message

      FETCH NEXT FROM  cur into @mirroring_state,@db_name,@mirroring_state_desc 
      end

close cur
deallocate cur;
end


Входящих два параметра – имя почтового профайлера для отсылки письма и список получателей письма.
Данная  процедура запускается в задание sql агента через приемлемое время мониторинга.

Рекомендуется использовать оба способа мониторинга вместе, т.к если будет работать только 1 способ, то ,к примеру, когда база данных будет находиться в состояние DISCONECTED, то при отсутствие данных для передачи на зеркальную базу данных, сообщений об ошибках не будет, так же и со вторым способом, БД будут находиться в доступности друг для друга, но на по каким-то причинам транзакции не будут применять на зеркальной БД, т.е будет задержка передачи данных.
Вот вроде и все.

Комментариев нет :

Отправить комментарий