2

伙计们,

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

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

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

谢谢!马克

4

4 回答 4

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 -- 每个备份集包含一行

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

于 2009-01-28T10:38:15.963 回答
1

您可以尝试RESTORE HEADERONLY使用您的备份文件,如此处所述

这应该会给你你正在寻找的信息。

于 2009-05-20T17:04:31.983 回答
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

我以前从未使用过它(只是对此答案有所了解)。一些写入很可能是备份本身的一部分,但您应该能够通过一些探索来区分它们。

于 2009-08-01T11:34:08.987 回答
0

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

如果不是这种情况 - 您仍然可以为自己编写一个触发器并将其应用于所需的每个表/列并自己进行日志记录。

于 2009-01-28T10:26:21.370 回答