SQL Server Availability Group Veritabanları Senkronizasyon Durumları

Bazen Always ON kullandığınız sunuculardan birini restart etmeniz gerekebilir.

2 sunucunuz olduğunu ve sunucunuzun birinde 10 tane availability group’unuz olduğunu düşünelim. Restart etmeden önce bütün AG’leri diğer sunucuya failover etmeniz gerekir.  “SQL Server Availability Group Failover İşlemi” isimli makalemde failover işlemini nasıl gerçekleştireceğinizi bulabilirsiniz. Ama veritabanlarının senkronizasyon durumlarını kontrol etmeden failover işlemini gerçekleştirmemelisiniz.

SQL Server üzerinde aşağıdaki gibi herhangi bir Availability Group’un senkronizasyon durumunu görebilirsiniz.

 

Dolayısıyla normal şartlar altında yukardaki gibi sunucu üzerindeki tüm Availability Group’ların sağlık durumlarına tek tek bakmanız gerekir. Bu işlem bir süre sonra sıkıcı hale gelebilir. Ve bu durumu kontrol etmek için bir script işinizi bir hayli kolaylaştıracaktır.

 

Aşağıdaki script yardımıyla SQL Server üzerinde bulunan AG’lerdeki veritabanlarını ve bu veritabanlarının senkronizasyon durumlarını bulabilirsiniz. Fakat bu script sadece mevcut sunucudaki primary ve secondary availability group’lara bakar. Kesin sonuç almak için bu script’i hem primary node’da hem de secondary node’da çalıştırmalısınız.

 

Eğer her ikisinde de bir problem yoksa failover’ı gerçekleştirebilirsiniz.

SELECT
AG.name AS [AvailabilityGroupName],
dbcs.database_name AS [DatabaseName],
  CASE
	WHEN dbrs.synchronization_state =0 THEN 'Not synchronizing'
	WHEN dbrs.synchronization_state =1 THEN 'Synchronizing'
	WHEN dbrs.synchronization_state =2 THEN 'Synchronized'
	WHEN dbrs.synchronization_state =3 THEN 'Reverting'
	WHEN dbrs.synchronization_state =4 THEN 'Initializing'
  END AS AGState,
  ar.failover_mode_desc,
  ar.availability_mode_desc,
ISNULL(dbrs.is_suspended, 0) AS [IsSuspended]
FROM master.sys.availability_groups AS AG
LEFT OUTER JOIN master.sys.dm_hadr_availability_group_states as agstates
	ON AG.group_id = agstates.group_id
INNER JOIN master.sys.availability_replicas AS AR
	ON AG.group_id = AR.group_id
INNER JOIN master.sys.dm_hadr_availability_replica_states AS arstates
	ON AR.replica_id = arstates.replica_id AND arstates.is_local = 1
INNER JOIN master.sys.dm_hadr_database_replica_cluster_states AS dbcs
	ON arstates.replica_id = dbcs.replica_id
LEFT OUTER JOIN master.sys.dm_hadr_database_replica_states AS dbrs
	ON dbcs.replica_id = dbrs.replica_id AND dbcs.group_database_id = dbrs.group_database_id
	where dbcs.is_database_joined=1
ORDER BY AG.name ASC, dbcs.database_name

 

Loading

Leave Your Comment