controllo del nodo in caso di fail over su un cluster SQL

come controllare quando uno dei nodi del cluster cade?

prendendo (molto) spunto da un articolo apparso su SQLSERVER Central (sempre sia lodato) ho creato un pò di codice che verifica il nodo su cui l’istanza attuale sta girando.

in questa maniera è possibile confrontarla con una precedentemente salvata e poi decidere se inviare alert o quant’altro..

tutto si basa su questa riga di codice

exec master..xp_regread 'HKEY_LOCAL_Machine',
	'SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName\',
	'ComputerName'

che permette di capire il nome macchina sulla quale sta girando attualmente il codice lanciato.

giocando un pò è venuto fuori il codice qui sotto:

se non la trova, crea una tabella nel MSDB chiamata UT_DBParameter

esegue poi il codice di cui sopra andando ad estrapolare il nome del nodo sulla quale sta girando l’istanza.

se questo è diverso da quello memorizzato allora invio una mail di allerta e memorizzo il nome del nodo attuale nella riga della mia istanza nella tabella UT_DBParameter

DECLARE @previous Nvarchar(50)
DECLARE @Actual Nvarchar(50)

DECLARE @Sbj NVarChar(200)
Set @Sbj ='IStanza ' + @@SERVERNAME
DECLARE @Bdy NVarChar(4000)
DECLARE @OperatorEmail nvarchar(100)
Set @OperatorEmail = (select email_address from msdb.dbo.sysoperators where name = 'operatore')   --** 

IF OBJECT_ID('MSDB..UT_DBParameters') is null
	BEGIN
		CREATE TABLE UT_DBParameters
		(
		Parametro NVARCHAR(50),
		Valore NVARCHAR(50)
		)
	END	

SELECT @previous = isnull(Valore,'') FROM UT_DBParameters
WHERE Parametro = @@ServerName

IF OBJECT_ID('tempdb..#PHYSICALHOSTNAME') is not null
	BEGIN
		drop table #PHYSICALHOSTNAME
	END	

CREATE TABLE #PHYSICALHOSTNAME
(
VALUE VARCHAR(30),
CURRENT_ACTIVE_NODE VARCHAR(30)
)

INSERT #PHYSICALHOSTNAME
exec master..xp_regread 'HKEY_LOCAL_Machine',
'SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName\',
'ComputerName'

SELECT @Actual=CURRENT_ACTIVE_NODE FROM #PHYSICALHOSTNAME

IF  @previous <> @Actual
	BEGIN

		SET @Bdy = CHAR(13) + 'Istanza ' + @@SERVERNAME + ' passata dal nodo ' + @previous + ' al nodo ' + @Actual

		IF @Previous <> ''
			EXEC msdb.dbo.sp_send_dbmail  -- ***
					@profile_name = '4tsmailrobot'
					,@recipients = @OperatorEmail
					,@body = @Bdy
					,@subject = @Sbj

		Update Msdb..UT_DBParameters
		Set Valore = @Actual
		WHERE Parametro = @@ServerName

	END

NOTA

**operatore va sostituito con un operator valido per il server

*** si presuppone che il servizio di invio mail sia configurato..

Annunci
Questa voce è stata pubblicata in Server che passione, sql, Utilità. Contrassegna il permalink.

Una risposta a controllo del nodo in caso di fail over su un cluster SQL

  1. Cop ha detto:

    Ti ho lascato la mia mail in questa maniera così potrai contattarmi

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...