фона:Запуск сценариев SQL на нескольких серверах
У меня есть тестовый сервер (SQL Server 2008 R2), который содержит БД, в которой я хранить информацию о других БД из моих производственных серверов (Смешение SQL Server 2008 R2 и 2012). У меня есть несколько сценариев, которые я запускаю ежемесячно, который собирает информацию, такую как количество VLF, из каждой БД на сервере. То, что я делал, - это запуск сценариев на каждом из моих производственных серверов, копирование результатов в .txt-файл и импорт .txt-файла в БД на моем тестовом сервере.
Проблема:
Как можно автоматизировать мои сценарии для запуска на каждом сервере производства без меня регистрации на каждом производственном сервере и работает каждый сценарий?
Как я могу вставить собранную информацию в свой тестовый сервер DB без необходимости копировать/вставлять?
Пример сценария:
SET NOCOUNT ON;
CREATE TABLE #to
(
ServerName varchar(20),
CaptureDate DATETIME,
DBName SYSNAME,
FileCount INT
);
DECLARE @v INT;
SELECT @v = CONVERT(INT, PARSENAME(CONVERT(VARCHAR(32),
SERVERPROPERTY('ProductVersion')), 4));
DECLARE @sql NVARCHAR(MAX);
SET @sql = N'CREATE TABLE #ti
(
' + CASE WHEN @v >= 11 THEN 'RecoveryUnitId INT,' ELSE '' END + '
FileId int
, FileSize nvarchar(255)
, StartOffset nvarchar(255)
, FSeqNo nvarchar(255)
, Status int
, Parity int
, CreateLSN nvarchar(255)
);';
SELECT @sql = @sql + '
INSERT #ti EXEC ' + QUOTENAME(name)
+ '.sys.sp_executesql N''DBCC LOGINFO WITH NO_INFOMSGS'';
INSERT INTO
#to(DBName, FileCount) SELECT ''' + name + ''', COUNT(*) FROM #ti;
TRUNCATE TABLE #ti;'
FROM sys.databases;
EXEC sp_executesql @sql;
SELECT @@ServerName,GETDATE(),DBName,FileCount
FROM #to
ORDER BY DBName
DROP TABLE #to;
Любая помощь будет принята с благодарностью.
dbsql также является командной строкой l для доступа к SQL Server. Вы можете запустить его с помощью флага '-i' для вызова имени сценария. –