找出何时进行数据库备份

时间:2009-01-28 06:42:52

标签: sql sql-server database restore

民间,

假设您收到SQL Server数据库(2005或2008)的断开连接备份,并将其还原到SQL Server实例。

有没有办法,是否有系统目录或其他东西,以找出该特定数据库上最后一次写入操作的时间?我希望能够找出特定数据库备份的日期 - 遗憾的是,这并没有真正在任何地方明确记录,并且检查所有数十个数据表以获取最高日期/时间戳也不是真正的选择....

有什么想法吗?当然 - 我可以查看* .bak文件的日期/时间戳 - 但是我可以从SQL Server(Management Studio)中更准确地找到它吗?

谢谢! 马克

4 个答案:

答案 0 :(得分:2)

如果您有权访问最初运行备份的SQL Server实例,则应该能够查询msdb

SELECT backup_set_id, backup_start_date, backup_finish_date
FROM  msdb.dbo.backupset  
WHERE database_name = 'MyDBname' AND type = 'D' 

有几个与备份集相关的表:

  • backupfile - 为每个备份的数据文件或日志文件包含一行
  • backupmediafamily - 每个媒体系列包含一行
  • backupmediaset - 每个备份媒体集包含一行
  • backupset - 每个备份集包含一行

通过查询这些表,您可以确定上次备份的发生时间,发生的备份类型以及写入文件的位置。

答案 1 :(得分:1)

您可以在备份文件上尝试RESTORE HEADERONLY,如here

所述

应该为您提供所需的信息。

答案 2 :(得分:1)

有点晚了,但应该是你想要的。

每次写入数据库都是日志文件中的一个条目。哪个有LSN。 这必须至少存储在备份中以进行日志恢复。

那么,如何将LSN与日期时间相匹配?

SELECT TOP 5 [End Time] AS BringFirst, *
FROM ::fn_dblog (NULL, NULL)
WHERE [End Time] IS NOT NULL
ORDER BY BringFirst DESC

我之前从未使用过这个(只是为了这个答案而玩)。有些写入很可能是备份本身的一部分,但是你应该能够通过一些讨论来区分它们。

答案 3 :(得分:0)

据我所知,在master数据库中存在一个Log-table,其中每个写入都存储有详细信息。但我不确定您是否需要启用日志机制 - 以便默认不记录,您必须启用它。 例如,在Oracle中存在可以查询的系统数据库表Log。

如果不是这种情况 - 你仍然可以给自己写一个触发器并将其应用到所需的每个表/列上并自己进行记录。