背景:
我有一个测试服务器 (SQL Server 2008 R2),其中包含一个数据库,我在其中存储有关生产服务器(SQL Server 2008 R2 和 2012 的混合)中其他数据库的信息。我每月运行多个脚本,这些脚本从服务器上的每个数据库收集信息,例如 VLF 的数量。我一直在做的是在我的每个生产服务器上运行脚本,将结果复制到一个 .txt 文件中,然后将 .txt 文件导入到我的测试服务器上的数据库中。
问题:
如何使我的脚本在每台生产服务器上运行自动化 没有我登录到每个生产服务器并运行每个脚本?
如何将收集到的信息插入到我的测试服务器数据库中 无需复制/粘贴?
示例脚本:
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;
如有任何帮助,我们将不胜感激。
最佳答案
在每个生产 SQL Server 上创建一个链接服务器到测试数据库
此链接提供有关链接服务器的更多信息 http://msdn.microsoft.com/en-us/library/ff772782.aspx
创建一个运行 SQL 脚本的 SQL Server 作业,该脚本将数据插入到测试服务器上的表中(通过链接服务器)
关于sql - 跨多个服务器运行 SQL 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16320828/