SQL Server Always On Availability Group (AG) mimarilerinde, sunucuların PRIMARY mi yoksa SECONDARY mi olduğunu anlık izlemek ve bu veriyi zaman damgasıyla saklamak, failover (rol değişimi) durumlarının analizi ve sorun tespiti için kritik önem taşır.
İlk olarak sunucuların primary secondary durumların kayıt edilebilmesi için bir tablo oluşturuyoruz.
USE [DBAMON]
GO
CREATE TABLE [dbo].[ServerRoleHistory](
[Id] [int] IDENTITY(1,1) NOT NULL,
[AGName] [nvarchar](128) NOT NULL,
[ServerName] [nvarchar](128) NOT NULL,
[Role] [nvarchar](20) NOT NULL,
[RecordDate] [datetime2](3) NOT NULL,
PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[ServerRoleHistory] ADD DEFAULT (sysdatetime()) FOR [RecordDate]
GO
SQL agent altında bir job oluşturarak belirli aralıklarla AG role’ünü kaydedeceğimiz kodumuz bulunmaktadır. Bu kod bloğunu bir procedure yapısında da oluşturulabilir.
INSERT INTO [dbo].[ServerRoleHistory] ([AGName], [ServerName], [Role], [RecordDate])
SELECT
ag.[name] AS [AGName],
ar.[replica_server_name] AS [ServerName],
ISNULL(
CASE
WHEN rs.[role_desc] = 'PRIMARY' THEN 'PRIMARY'
WHEN rs.[role_desc] = 'SECONDARY' THEN 'SECONDARY'
ELSE 'SECONDARY'
END,
'UNKNOWN'
) AS [Role],
SYSDATETIME() AS [RecordDate]
FROM [sys].[availability_groups] AS ag
INNER JOIN [sys].[availability_replicas] AS ar
ON ag.[group_id] = ar.[group_id]
LEFT JOIN [sys].[dm_hadr_availability_replica_states] AS rs
ON ar.[replica_id] = rs.[replica_id]
ORDER BY ag.[name], ar.[replica_server_name];

Step kısmına kodumuza ekledikten sonra oluşturulan job için schedule yapısı oluşturulmaktadır. Artık belirli aralıklarla AG rolümüz kaydedilmektedir. Failover modun otomatik olduğu durumlarda oldukça işe yarayan bir kodumuzdur.
Başka makalede görüşmek dileğiyle..
“O (takva sahibi olanlar) bollukta da darlıkta da Allah için harcarlar, öfkelerini yutarlar ve insanları affederler. Allah da iyilik yapanları sever.”Ali İmran Suresi, 134. Ayet