Mssql Server AG Failover Sonrasında Veritabanı Reverting Modun Takip Edilmesi

Bu makalede Alwayson yapısında Failover işlemi sonrasında Reverting modun da olan veritabanının belirli bir süreden sonra veritabanının Reverting modunda çıktığını mail ile bildiren bir job oluşturacağız.

İlk olarak veritabanı neden Reverting moduna girer buna değinelim. Alwayson yapılarında herhangi bir Failover işleminde veritabanımız Çok büyük ve aşırı derece transaction alan bir veritabanı ise failover işleminden sonra secondary sunucusuna failover olduktan sonra yeni primary sunucusunda ilgili veritabanındaki tüm ldf dosyasındaki log kayıtları data file’a(mdf/ndf) yazılma işlemi gerçekleşmektedir. Bu süre boyunca veritabanı reverting modunda kalmaktadır. İki sunucuda veritabanı data file’da bulunan veriler eşit boyuta geldikten sonra veritabanı Reverting modundan çıkmaktadır.

Basitleştirilmiş REDO işlemi akışı:

  1. Önceki PRIMARY’deki son LSN (Log Sequence Number) tespit edilir.
  2. Yeni PRIMARY’deki REDO thread’i başlatılır:
  • LDF’den log kayıtları okunur.
  • Page’lere fiziksel yazım yapılır.
  • REDO queue boyutu azaltılır.

Tüm kayıtlar yazılınca database “SYNCHRONIZED” olur.

Aşağıdaki komut sayesinde yeni primary ortamda oluşturulacak sql agent job’ımız. Job’ın schedule bilgisi ayarlanarak belirli aralıklarla veritabanının reverting modundan çıkıp çıkmadığı yazılmaktadır.

declare @durum varchar(50)
set @durum = (
select 
--DB_NAME(database_id) as DatabaseName
--,
synchronization_state_desc
--,database_state_desc
from sys.dm_hadr_database_replica_states
where is_local=1 and is_primary_replica=0
and DB_NAME(database_id)='X_DB_NAME')

If @durum <> 'INITIALIZING'

exec msdb.dbo.sp_send_dbmail  
@profile_name = 'AlwaysOnLagProfile',
@recipients = 'xxxx@gmail.gov.tr',
@Subject = 'Revrting State', 
@body = 'Database Açıldı..' , 
@body_format = 'HTML' 

else if @durum = 'INITIALIZING'

exec msdb.dbo.sp_send_dbmail  
@profile_name = 'AlwaysOnLagProfile',
@recipients = 'xxxx@gmail.gov.tr',
@Subject = 'Reverting State', 
@body = 'Database Henüz Açılmadı' , 
@body_format = 'HTML'

Yukarıdaki scriptte yapılması gereken veritabanı ve mail hesabının eklenmesi gerekmektedir.

Başka makalede görüşmek dileğiyle..

“Ey insan! Seni yaratan, şekillendirip ölçülü yapan, dilediği bir biçimde seni oluşturan cömert Rabbine karşı seni ne aldattı?” (İnfitar-6-8)

Author: Yunus YÜCEL

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir