Mientras ordenaba los distintos documentos y proyectos me encontré con este pequeña consulta que me permitía ver el estado de los distintos servidores vinculados (Linked Server en inglés) para posteriormente tomar algún tipo de acción al respecto. Recuerdo que en mi casó tenía un pequeño script que cada vez que un servidor vinculado no estaba disponible al momento de realizar alguna operación, me enviaba un correo cada 1 minuto hasta que lo revisara.
Muchos pensarán ¿y por que lo hace por query y no utiliza las herramientas?. Pues bueno, en mi caso soy un poco Old School así que prefiero tirar un par de líneas ;)
Sin ir más lejos, he aquí la consulta:
DECLARE @SRV_NAME NVARCHAR(50);
DECLARE @Msg NVARCHAR(4000);
DECLARE @retval INT;
DECLARE @LinkedServers
TABLE(SRV_NAME NVARCHAR(50)
, SRV_PROVIDERNAME VARCHAR(50)
, SRV_PRODUCT VARCHAR(50)
, SRV_DATASOURCE VARCHAR(50)
, SRV_PROVIDERSTRING VARCHAR(50)
, SRV_LOCATION VARCHAR(50)
, SRV_CAT VARCHAR(50));
DECLARE @ErrorLog
TABLE(LogDate SMALLDATETIME
, SRV_NAME NVARCHAR(50)
, ErrorMsg NVARCHAR(4000));
INSERT INTO @LinkedServers
EXEC sp_linkedservers
DECLARE Cur CURSOR FOR
SELECT SRV_NAME FROM @LinkedServers WHERE SRV_NAME != 'LOCAL_SERVER_NAME'
OPEN Cur
FETCH FROM Cur
INTO @SRV_NAME
WHILE @@FETCH_STATUS = 0
BEGIN
BEGIN TRY
PRINT @SRV_NAME;
EXEC @retval = sys.sp_testlinkedserver @SRV_NAME;
END TRY
BEGIN CATCH
SET @Msg = ERROR_MESSAGE();
INSERT INTO @ErrorLog(LogDate, SRV_NAME, ErrorMsg)
VALUES(GETDATE(), @SRV_NAME, @Msg);
END CATCH
FETCH FROM Cur
INTO @SRV_NAME
END
CLOSE Cur
DEALLOCATE Cur
SELECT * FROM @ErrorLog;
Ojalá les sirva!
No hay comentarios:
Publicar un comentario