Especialmente cuando trabajamos con Clusters con múltiples Nodos y/o múltiples Instancias SQL, es muy recomendable poder tener control de que Nodo ejecutaba qué Instancia SQL en cada momento del tiempo, y así, en caso de sufrir alguna incidencia (sobre todo cuando se produce balanceos del Cluster), poder saber en qué Nodo estaba la Instancia para localizar más fácilmente los mensajes de error, Logs, etc.
Esta información la podemos sacar del Visor de Sucesos de Windows (Event Viewver), pero esto no siempre nos servirá, ya que el Visor de Sucesos de Windows funciona como un Buffer, en el cual sólo se mantienen los mensajes más recientes, y en servidores en los que se registre grandes cantidades de información en el Visor de Sucesos puede resultar un problema (ej: revisar el Lunes por la mañana una incidencia del fin de semana, y no tener toda la información disponible en el Event Viewer).
Almacenar esta información en tablas, además nos facilitará su posterior consulta, y podremos tener un histórico, que nos puede sacar de algún que otro apuro. Para ello, podemos crear una Tabla para almacenar dicha información, así como un Procedimiento Almacenado para añadir una fila con la información actual de qué Nodo está ejecutando la Instancia SQL, algo que podemos utilizar consultando @@SERVERNAME para conocer la Instancia y consultando la propiedad ComputerNamePhysicalNetBIOS de SERVERPROPERTY para conocer el nombre NetBIOS del Nodo sobre el cuál se está ejecutando (ojo, la propiedad MachineName no vale, devolvería el nombre virtual de la Instancia).
CREATE TABLE dbo.ClusterActiveNodeHistory ( [CurrentDateTime] DATETIME ,[SQLInstance] VARCHAR(256) ,[HostName] VARCHAR(256) ) GO
CREATE PROCEDURE dbo.logClusterActiveNode AS BEGIN SET NOCOUNT ON;
INSERT INTO dbo.ClusterActiveNodeHistory ([CurrentDateTime], [SQLInstance], [HostName]) VALUES (getdate(), CAST(@@SERVERNAME AS VARCHAR(256)), CAST(SERVERPROPERTY('ComputerNamePhysicalNetBIOS') AS VARCHAR
(256))); END; GO |
Téngase en cuenta que la propiedad ComputerNamePhysicalNetBIOS sólo funciona en SQL Server 2005 y versiones posteriores, por lo que para SQL Server 2000 deberemos ejecutar un HOSTNAME desde xp_cmdshell, o buscar alguna otra alternativa.
Seguidamente, deberemos crear un Job y planificarlo, por ejemplo, para que se ejecute todos los días por la mañana (así mantendremos un registro diario), y también para que se ejecute con el arranque del Agente de SQL Server (así tendremos registros adicionales para, por ejemplo, cuando se producen varios reinicios en el mismo día, cada uno de los cuales podría implicar que la Instancia de SQL se arrancase en un Nodo diferente).
Y con esto, objetivo cumplido.
Poco más por hoy. Como siempre, confío que la lectura resulte de interés.