如何一次在我的所有数据库中运行此 SQL 查询?

BSa*_*ers 1 sql-server-2005

我有一个查询,让我知道有关备份的基本信息。我有几个 SQL 服务器,我希望能够一次查询。是否可以同时在多台服务器上运行以下查询?

SELECT 
   A.[Server],
   A.database_name, 
   A.last_db_backup_date,
   B.backup_type, 
   B.backup_start_date, 
   B.expiration_date,
   B.backup_size, 
   B.logical_device_name, 
   B.physical_device_name,  
   B.backupset_name,
   B.description
FROM
   (
   SELECT  
       CONVERT(CHAR(100), SERVERPROPERTY('Servername')) AS Server,
       msdb.dbo.backupset.database_name, 
       MAX(msdb.dbo.backupset.backup_finish_date) AS last_db_backup_date
   FROM    msdb.dbo.backupmediafamily 
       INNER JOIN msdb.dbo.backupset ON msdb.dbo.backupmediafamily.media_set_id = msdb.dbo.backupset.media_set_id 
   GROUP BY
       msdb.dbo.backupset.database_name 
   ) AS A

   LEFT JOIN 

   (
   SELECT  
   CONVERT(CHAR(100), SERVERPROPERTY('Servername')) AS Server,
   msdb.dbo.backupset.database_name, 
   msdb.dbo.backupset.backup_start_date, 
   msdb.dbo.backupset.backup_finish_date,
   msdb.dbo.backupset.expiration_date,
   msdb.dbo.backupset.backup_size, 
   msdb.dbo.backupmediafamily.logical_device_name, 
   msdb.dbo.backupmediafamily.physical_device_name,  
   msdb.dbo.backupset.name AS backupset_name,
   msdb.dbo.backupset.description,
   CASE msdb..backupset.type  
       WHEN 'D' THEN 'Full Database'  
       WHEN 'L' THEN 'Log'  
       WHEN 'I' THEN 'Differential'  
       WHEN 'F' THEN 'File Level'  
       WHEN 'G' THEN 'File Level Differential'  
       WHEN 'P' THEN 'Partial'  
       WHEN 'Q' THEN 'Differential partial'        
   END AS backup_type
FROM   msdb.dbo.backupmediafamily 
   INNER JOIN msdb.dbo.backupset ON msdb.dbo.backupmediafamily.media_set_id = msdb.dbo.backupset.media_set_id 
   ) AS B
   ON A.[server] = B.[server] AND A.[database_name] = B.[database_name] AND A.[last_db_backup_date] = B.[backup_finish_date]
ORDER BY 
   A.database_name
Run Code Online (Sandbox Code Playgroud)

Aar*_*and 6

最简单的方法是在 Management Studio 中创建一个已注册的服务器组,添加您想要的服务器注册,然后右键单击该组并选择“新建查询”。您运行的查询将针对所有服务器运行(带有一个额外的前导列,指示它来自哪个注册):

在此处输入图片说明

当然,这依赖于组中的所有服务器都处于活动状态且可访问。

其他一些方法包括中央管理服务器(这里是官方文档)和 PowerShell(这里是 Jonathan Kehayias 的博客文章,展示了如何对文本文件中列出的所有服务器运行查询)。