2

バックグラウンド:

本番サーバー (SQL Server 2008 R2 と 2012 の混合) からの他の DB に関する情報を格納する DB を含むテスト サーバー (SQL Server 2008 R2) があります。サーバー上の各 DB から VLF の数などの情報を収集する、毎月実行する複数のスクリプトがあります。私が行っていることは、各運用サーバーでスクリプトを実行し、結果を .txt ファイルにコピーし、.txt ファイルをテスト サーバーの DB にインポートすることです。

問題:

  1. 各運用サーバーにログオンして各スクリプトを実行せずに、スクリプトを自動化してすべての運用サーバーで実行するにはどうすればよいですか?

  2. コピー/貼り付けせずに、収集した情報をテスト サーバー 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;

どんな助けでも大歓迎です。

4

1 に答える 1