SQL Server Availability Group yapısında Job oluşturma

AlwaysOn sistemlerinde SQL Server Job oluşturmak ve diğer Node lara da Failover yaptığında sistem Job ların diğer NODE lardada çalışmasını nasıl sağlarız ?

Job larımızın içerisine şart uygularız ve Primary NODE üzeirnde ise o anda EXEC etmesini sağlarız. Eğer Secondary NODE da ise return olarak Message döndürüz. Bu şekilde herhangi failover durumunda Job larımızın her iki node da da çalışmaısnı automatic hale getirmiş oluruz.

Örneğimiz de 2 adet Sync Modda olan AlwaysOn yapımız  var.   sqltrSp_findPerson adında bir sp miz var ve bu sp her 10 dakika da bir çalışacak şekilde Job haline getirilmesi gerekmekte.

Şimdi JOb ‘ımızın içerisini hazırlıyoruz;

İlk etapta bulunduğumuz sunucunun Primary olup olmadığını döndüren bir Function yazıyoruz.

SET QUOTED_IDENTIFIER ON;
SET ANSI_NULLS ON;
GO

CREATE FUNCTION dbo.sqltrfn_ag_group_is_primary (@AGName SYSNAME)
RETURNS BIT
AS
BEGIN

	DECLARE @PrimaryReplica SYSNAME;

	SELECT
		@PrimaryReplica = hags.primary_replica
	FROM sys.dm_hadr_availability_group_states hags
	INNER JOIN sys.availability_groups ag
		ON ag.group_id = hags.group_id
	WHERE ag.name = @AGName;

	IF UPPER(@PrimaryReplica) = UPPER(@@SERVERNAME)
		RETURN 1; 

	RETURN 0; 

END;
GO

Şimdi ise sp mizi EXEC edecek kodumuzu yazıyoruz.

IF SQLTURKIYE.dbo.sqltrfn_ag_group_is_primary('AG') = 1
BEGIN
	EXEC [dbo].[sqltrSp_findPerson]
END
ELSE
BEGIN
	PRINT 'Primary NOde değil !!!';
END

Query mize baktığımız da function ımızdan dönen sonuç 1 ise yani 1 Primary demek oluyor query mizi Run edecek. Fakat değil ise Primary NOde değil !!! olarak dönmektedir. Bu Job ı aynı şekilde diğer NODE umuz da da oluşturuyoruz ve aktif halde bırakıyoruz. Herhangi gece farkında olmadan olan bir Failover durumunda Joblarımıza bu kontrolü koyduğumuzda yeni Primary de de job larımız çalışmaya devam edecektir.

Kolay Gelsin…

Leave a Reply

Your email address will not be published. Required fields are marked *