我将数据库恢复到不同的 SQL 服务器,但有趣的是,该服务器上的 msdb 备份集表显示了源服务器的数据库备份历史记录。
这是预期的吗?
注意:我没有恢复msdb。
重现步骤:
- 在源服务器上执行完整备份,然后进行几个日志备份。
- 在目标服务器上,使用数据库恢复 UI 执行完整备份和日志备份的恢复。
- 在目标服务器上触发以下查询,您将看到该数据库的完整备份历史记录(来自源服务器)出现在此处。
询问:
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,
CASE msdb..backupset.type
WHEN 'D' THEN 'Database'
WHEN 'L' THEN 'Log'
END AS backup_type,
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
FROM
msdb.dbo.backupmediafamily
INNER JOIN msdb.dbo.backupset ON msdb.dbo.backupmediafamily.media_set_id = msdb.dbo.backupset.media_set_id
WHERE
(CONVERT(datetime, msdb.dbo.backupset.backup_start_date, 102) >= GETDATE() - 7)
ORDER BY
msdb.dbo.backupset.backup_finish_date desc
这些文章对此进行了记录: RESTORE 语句 (Transact-SQL)和 备份历史记录和标头信息 (SQL Server)
这没有给出任何解释,但我发现它很有用,因为
restorehistory
您只能提取恢复日期,而不是备份日期,我在辅助服务器上的日志传送监控中使用它。恢复数据库不会保留任何以前的备份历史记录。恢复将更新一些 msdb 表,但只会更新恢复并从用于创建恢复的备份添加备份集。
进行提供的重现仅显示我上面提到的单个项目。如果我备份数据库 100 次,然后进行第 100 次备份并将其还原到另一个实例,则我在 msdb 中看不到 100 个备份。您要么访问了错误的实例,要么也恢复了 msdb,即使您已注意到尚未恢复 msdb。