跨多台服务器运行SQL脚本

3

背景:

我有一台测试服务器(SQL Server 2008 R2),其中包含一个数据库,该数据库存储了来自我的生产服务器的其他数据库的信息(混合使用 SQL Server 2008 R2 和 2012)。 我有多个脚本,每月运行一次,从服务器上的每个数据库中收集信息,例如 VLF 的数量。 我一直在做的是在我的每台生产服务器上运行脚本,将结果复制到 .txt 文件中,并将 .txt 文件导入我的测试服务器上的数据库。

问题:

  1. 如何使我能够在不登录到每个生产服务器并运行每个脚本的情况下自动运行我的脚本?

  2. 如何将收集到的信息插入到我的测试服务器数据库中而不必复制/粘贴?

样本脚本:

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是访问SQL Server的命令行工具。您可以使用“-i”标志运行它来调用脚本名称。 - Mike Gardner
1个回答

3
  1. 在您的生产SQL服务器上创建一个链接服务器,连接到测试数据库

    此链接提供了更多关于链接服务器的信息 http://msdn.microsoft.com/en-us/library/ff772782.aspx

  2. 创建一个SQL Server作业,运行一个SQL脚本,将数据插入到测试服务器上的表中(通过链接服务器)


谢谢你的回复。当我创建作业脚本时,我需要在作业属性中使用“目标多个服务器”选项吗?我不知道如何将测试服务器的作业脚本与生产服务器相关联。 - Aaron Hurst

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接