当备份文件的数据库名称与数据库不匹配时,获取 SQL Server 数据库的上次备份日期



由于疏忽,我的数据库备份没有事务日志,但我每隔五天进行一次完整备份。 为了对数据库的当前版本进行一些修订,我已将这些备份中的每一个还原到单独的数据库中,每个数据库都以<dbname><backupdate>格式命名,其中<dbname>是我的数据库的名称。

我需要以编程方式查找与每个数据库关联的备份日期,其中我无法假定数据库名称的格式。 由于<dbname><backupdate>(我的数据库名称(与<dbname>(备份文件中的数据库名称(不匹配,因此我无法使用在其他几个页面上找到的查询:

SELECT d.name, b.backup_start_date
FROM sys.databases d
LEFT OUTER JOIN msdb..backupset b ON d.name = b.database_name

我发现,解决方案在于msdb..restorehistory表。

SELECT d.name, MAX(b.backup_start_date) backup_date
FROM sys.databases d
JOIN msdb..restorehistory r ON r.destination_database_name = d.name
JOIN msdb..backupset b ON r.backup_set_id = b.backup_set_id
WHERE d.database_id > 4 -- for excluding system databases
GROUP BY d.name
ORDER BY backup_date, d.name

这将仅返回从备份还原的数据库。 如果要包括所有非系统数据库,请将JOIN语句更改为LEFT OUTER JOIN

最新更新