民间,
假设您收到SQL Server数据库(2005或2008)的断开连接备份,并将其还原到SQL Server实例。
有没有办法,是否有系统目录或其他东西,以找出该特定数据库上最后一次写入操作的时间?我希望能够找出特定数据库备份的日期 - 遗憾的是,这并没有真正在任何地方明确记录,并且检查所有数十个数据表以获取最高日期/时间戳也不是真正的选择....
有什么想法吗?当然 - 我可以查看* .bak文件的日期/时间戳 - 但是我可以从SQL Server(Management Studio)中更准确地找到它吗?
谢谢! 马克
答案 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'
有几个与备份集相关的表:
通过查询这些表,您可以确定上次备份的发生时间,发生的备份类型以及写入文件的位置。
答案 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。
如果不是这种情况 - 你仍然可以给自己写一个触发器并将其应用到所需的每个表/列上并自己进行记录。