MSSQL Server AlwaysOn Failover Öncesinde Database Senkronizasyon Durumları

Bu makalede AlwaysOn yapısısında failover veya Switch Over durumlarında  Availability Group altındaki databaselerin senkronizyon durumlarını aşağıdaki komut yardımıyla gözlemleyebiliriz.

Bu kod bloğunu kullanmayıp AG üzerine gelip sağ tıklayarak Show Dashboard ekranından senkronizasyon durumlarını gözlemleyebiliriz. Show Dashboard ekranından aşağıdaki komutu çalıştırdığımızda senkron gözükmesine rağmen senkron olmayabilir. Bunun için Show Dashboard ekranından Last Hardened Time, Last Redone Time, Last Commit time, Log Send Queue Size, Redo Queue Size  gibi parametrelere bakılması lazım.

Aşağıdaki komut ile AG altında bulunan veritabanını ve diğer Nodelarda durumunu gösteren komut verilmiştir.

SELECT 
    ag.name AS [AvailabilityGroup], 
    d.name AS [DatabaseName], 
    ar.replica_server_name AS [Node Name], 
    drs.synchronization_state_desc AS [Sync State], 
    drs.is_commit_participant AS [Is Commit Participant], 
    ar.failover_mode_desc AS [Failover Mode]
FROM sys.dm_hadr_database_replica_states drs
JOIN sys.availability_groups ag ON drs.group_id = ag.group_id
JOIN sys.availability_replicas ar ON drs.replica_id = ar.replica_id
JOIN sys.databases d ON drs.database_id = d.database_id
ORDER BY d.name, ag.name, ar.replica_server_name;

Bu sorguda synchronization state desc = SYNCHRONIZED olmalıdır. Eğer “SYNCHRONIZING” veya farklı bir durumda ise failover öncesinde bu problemi çözmelisiniz.

Aşağıdaki komut secondary sunucularında log send queue_size ve redo queue size değerini görebiliriz.

SELECT 
    ag.name AS [AvailabilityGroup], 
    d.name AS [DatabaseName], 
    ar.replica_server_name AS [Node Name], 
    drs.synchronization_state_desc AS [Sync State], 
    drs.is_commit_participant AS [Is Commit Participant], 
    ar.failover_mode_desc AS [Failover Mode], 
    drs.log_send_queue_size AS [Log Send Queue Size], 
    drs.redo_queue_size AS [Redo Queue Size], 
    drs.synchronization_health_desc AS [Health State]
FROM sys.dm_hadr_database_replica_states drs
JOIN sys.availability_groups ag ON drs.group_id = ag.group_id
JOIN sys.availability_replicas ar ON drs.replica_id = ar.replica_id
JOIN sys.databases d ON drs.database_id = d.database_id
ORDER BY d.name, ag.name, ar.replica_server_name;

Not: Failover sırasında veri kaybını kesinlikle önlemek için full backup ve transaction log backup almalısın.

Planlı bir failover işlemi öncesinde failover modunu manuel moda almak için aşağıdaki komut kullanılmaktadır.

ALTER AVAILABILITY GROUP [AG_NAME] SET (FAILOVER_MODE = MANUAL);

Failover öncesi:
– Veritabanı senkronizasyon durumunu kontrol edilmeli (SYNCHRONIZED olmalı).
Log Send ve Redo Queue değerlerini kontrol edilmeli (Düşük olmalı).
– Backup alınması ve AlwaysOn Failover modunu manuel yapılması gerekmektedir.

Aşağıdaki script yardımıyla Secondary sunucunun primary sunucuya göre ne kadar geriden geldiğini bulabilirsiniz. 1 saat üzerinden fazla olan veritabanlarıyla ilgili kayıt dönmektedir. Aşağıdaki dönen ilgili veritabanları yukarıdaki komut ile kordineli çalıştırdığımızda mantık anlaşılıyor.

SELECT DB_NAME(drs.database_id) AS Database_Name
      ,drs.last_commit_time AS Primary_Commit
         ,drs2.last_commit_time AS Secondary_Commit
         ,CONCAT(DATEDIFF(second,drs2.last_commit_time,drs.last_commit_time)/3600 ,' Saat'
         ,(DATEDIFF(second,drs2.last_commit_time,drs.last_commit_time)%3600)/60 ,' Dakika'
         ,DATEDIFF(second,drs2.last_commit_time,drs.last_commit_time)%60 ,' Saniye') AS Senkronizasyon_Farki
FROM sys.dm_hadr_database_replica_states drs
JOIN sys.dm_hadr_database_replica_states drs2 ON drs.database_id=drs2.database_id
WHERE drs.is_local=1 AND drs2.is_local=0 AND DATEDIFF(second,drs2.last_commit_time,drs.last_commit_time)>3600
ORDER BY DATEDIFF(second,drs2.last_commit_time,drs.last_commit_time) DESC

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

“Bakalım, kendilerini o geleceğinde hiç şüphe olmayan gün için bir araya topladığımız ve hiç kimseye haksızlık edilmeden herkese kazandığı tamamen ödendiği vakit, halleri nice olacaktır.” Âl-i İmrân-25

Author: Yunus YÜCEL

Bir yanıt yazın

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