知道数据库何时恢复

6 sql-server-2008 sql-server restore

我正在使用 SQL Server 2008。我想知道是否已从设备恢复了特定的数据库以及它何时发生。是否可以?

Kev*_*sel 7

在msdb数据库中,有一个名为restorehistory的表:

declare @DB sysname = 'MyDB';
select * from msdb.dbo.restorehistory where destination_database_name = @DB;
Run Code Online (Sandbox Code Playgroud)

这是一个具有足够权限的人可以清除的表,但是如果恢复是最近的并且您没有清除该表的工作(或者如果它在那时和现在之间没有运行),您应该能够查看执行恢复的登录名。

编辑

您还可以将其加入其他几个表(如果它们有相关数据):backupset 和 backupmediafamily。如果那里有记录——与以前相同的保留警告——他们会告诉你更多关于用于恢复的备份文件的信息:

declare @DB sysname = 'MyDB';
select
    rh.destination_database_name,
    rh.user_name,
    bs.name as backup_set_name,
    bs.user_name as backup_set_username,
    bs.backup_start_date,
    bs.backup_finish_date,
    bs.database_name as backup_set_database_name,
    bs.server_name,
    bs.machine_name,
    bmf.physical_device_name,
    bmf.device_type,
    case bmf.device_type
        when 2 then 'Disk'
        when 5 then 'Tape'
        when 7 then 'Virtual Device'
        when 105 then 'Permanent backup device'
        else 'UNKNOWN'
    end as device_type_desc
from 
    msdb.dbo.restorehistory rh
    left outer join msdb.dbo.backupset bs on rh.backup_set_id = bs.backup_set_id
    left outer join msdb.dbo.backupmediafamily bmf on bs.media_set_id = bmf.media_set_id
where
    rh.destination_database_name = @DB;
Run Code Online (Sandbox Code Playgroud)

这样,您还可以过滤设备类型或文件位置。