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

时间:2018-08-21 21:32:03

标签: sql-server tsql

由于疏忽,我的数据库备份没有事务日志,但是我每隔五天进行一次完整备份。为了对数据库的当前版本进行某种修订,我将所有这些备份还原到了单独的数据库中,每个数据库的格式为<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

1 个答案:

答案 0 :(得分:0)

我发现解决方案位于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