1

我正在使用以下代码来确定上次备份数据库的时间:

SELECT
   bus.server_name AS servername
   ,sdb.Name AS DatabaseName
   ,COALESCE(CONVERT(VARCHAR(12), MAX(bus.backup_finish_date), 101), '-') AS LastBackUpTime
FROM sys.sysdatabases sdb
LEFT OUTER JOIN msdb.dbo.backupset bus
ON bus.database_name = sdb.name
WHERE 
   bus.backup_start_date >= DATEADD(DAY, DATEDIFF(DAY, 1, GETDATE()), 0) -- Previous day at midnight.
   AND bus.backup_start_date < DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), 0) -- Today at midnight.
GROUP BY 
   sdb.Name
   ,bus.server_name

似乎显示了我正在寻找的数据,但是如果我在开发服务器上运行此代码,例如,它会将其相应的生产服务器显示为bus.server_name值。我试图理解为什么它显示的是生产服务器的名称而不是它本身。我可能不明白备份集表是如何获得它的价值的。
我知道我可以使用@@ServerName该值,但我不确定这是否是获得该值的正确方法。

4

1 回答 1

0

这得到了证实。

如果您将数据库从一台服务器恢复到另一台服务器,但从不备份它,并运行我上面的代码,它将显示备份它的原始服务器的服务器名称。

但是,如果您随后对同一个数据库进行备份,它将显示备份它的当前服务器,这是我所期望的。

于 2018-06-20T11:55:27.397 回答