Мониторинг
зеркалирования(Mirroring)
и оповещения о проблемах с ним возможно реализовать несколькими способами.
1-ый способ, самый простой, это создать оповещение на события зеркалирования.
Для начало надо активировать предупреждения и выставить пороги срабатывания их:
Выбрать базу данных, на которой
настроено зеркалирование, затем в меню БД выбрать Tasks-Launche Database Mirroring Monitor, вкладка Warnings
Выше на изображение выставлены следующие предупреждения:
Предупреждать, если размер
неотправленного журнала превышает пороговое значение
Предупреждать, если время
хранения самой старой неотправленной транзакции превышает пороговое значение.
Данная активация только будет
отслеживать состояние зеркалирования и протоколировать состояние в журнале MS SQL Server.
Чтобы срабатывали оповещения в
том числе на почту, необходимо создать алерты на данные события:
USE [msdb]
GOEXEC 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
|
Рекомендуется настроить данные алерты на обоих серверах зеркалирования.
2-й способ мониторинга зеркалирования, это процедура мониторинга,
которая запускается по расписанию через задание ms sql агента.
Не буду описывать принцип
действия, он прост, просто представлю
его код:
SET ANSI_NULLS ON
GOSET 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_descwhile @@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, то при отсутствие данных
для передачи на зеркальную базу данных, сообщений об ошибках не будет, так же и
со вторым способом, БД будут находиться в доступности друг для друга, но на по
каким-то причинам транзакции не будут применять на зеркальной БД, т.е будет
задержка передачи данных.
Вот вроде и все.
Комментариев нет :
Отправить комментарий