Проверьте состояние связанных баз данных сервера - PullRequest
0 голосов
/ 25 октября 2019

Я хочу написать скрипт для запроса всех баз данных на связанных серверах и их статуса .. «онлайн» или «автономно». Здесь вам необходимо запрограммировать переменные и курсоры, а также установить соединение со связанными серверами, чтобы прочитать представление там.

Результаты должны выглядеть следующим образом.

Server        DBName          Status
XYZ           ABC             Online
XFD           NDH             Offline 
etc...

1 Ответ

1 голос
/ 25 октября 2019

Как я уже говорил, было бы гораздо проще использовать объект sys.servers рядом с объектом sys.databases. Вы можете использовать Динамический SQL для создания большого UNION ALL запроса, чтобы сделать это:

USE master;
GO

DECLARE @SQL nvarchar(MAX),
        @CRLF nchar(2) = NCHAR(13) + NCHAR(10);

SET @SQL = STUFF((SELECT  @CRLF +
                          N'UNION ALL' +  @CRLF + 
                          N'SELECT N' + QUOTENAME(s.[name],'''') + N' AS ServerName,' + @CRLF +
                          N'       d.[name] AS DatabaseName,' + @CRLF +
                          N'       d.[state] AS DatabaseState' + @CRLF +
                          N'FROM ' + CASE s.is_linked WHEN 1 THEN QUOTENAME(s.[name]) + N'.' ELSE '' END + N'master.sys.databases d'
                  FROM sys.servers s
                  FOR XML PATH(N''),TYPE).value('.','nvarchar(MAX)'),1,13,'') + N';'

--PRINT @SQL; --Your Best Friend

EXEC sys.sp_executesql @SQL;

Это предполагает , что все связанные серверы доступны (если это не так, это другоепроблема, которую нужно исправить).

Я возвращаю значение state, в котором используются следующие статусы ( sys.databases (Transact-SQL) ):

0 = ОНЛАЙН1 = ВОССТАНОВЛЕНИЕ2 = ВОССТАНОВЛЕНИЕ |SQL Server 2008 до SQL Server 20173 = RECOVERY_PENDING |SQL Server 2008 до SQL Server 20174 = ПОДДЕРЖКА5 = АВАРИЙНАЯ СИТУАЦИЯ |SQL Server 2008 до SQL Server 20176 = ОФФЛАЙН |SQL Server 2008 до SQL Server 20177 = КОПИРОВАНИЕ |Активная гео-репликация базы данных SQL Azure10 = OFFLINE_SECONDARY |Активная гео-репликация базы данных SQL Azure

Если вы хотите слово, используйте state_desc.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...