sql - 跨多个服务器运行 SQL 脚本

标签 sql sql-server-2008-r2

背景:

我有一个测试服务器 (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;

如有任何帮助,我们将不胜感激。

最佳答案

  1. 在每个生产 SQL Server 上创建一个链接服务器到测试数据库

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

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

关于sql - 跨多个服务器运行 SQL 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16320828/

相关文章:

python - 如何使用 SQLite3 格式化 .schema 输出?

SQL统计状态连续出现多少次

sql-server - 为什么 SQL Server 有时会选择索引扫描而不是书签查找?

sql-server - 从 SQL Server 表中选择所有记录都具有指定范围的列值

mysql - case,if/else 语句计算超出规范值直到在值范围内

sql - 非常简单的 sybase sql 函数将无法工作

mysql - 更新 MySQL 中 2 个表之间的电子邮件匹配 - 黑名单

sql-server-2005 - 为什么我的 CASTS 在 SSIS 中似乎被忽略了?

SQL SELECT ... IN(xQuery)

php - 使用 PHP 或 XML 将 MySQL 数据导出到 PDF 表单