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