SQL Server Always On Availability Group Rol Geçmişinin Otomatik İzlenmesi

MSSQL Server

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

Author: Yunus YÜCEL

Bir yanıt yazın

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