在NORECOVERY模式下确定数据库的LSN

我正在将事务日志还原到数据库,但需要知道应该从哪个事务日志开始。 通常我会看到这样的事情:

此备份集中的日志终止于LSN 103000001633300001,这对于数据库来说还为时过早。 包含LSN 103000002524300001的更新日志备份可以恢复。

那么如何获得LSN 103000002524300001的程序化? 数据库处于NORECOVERY模式,因此DBCC LOG不起作用。 我已经logging了事务日志本身,所以我知道他们的第一个和最后一个LSN是什么。 我只是不知道数据库本身在哪里。

一些lsn列在sys.master_files中 ,在服务器级别

列“redo_start_lsn”可能只是票。

我还没有尝试过这个BTW …

您可以通过以下查询获取此信息:

SELECT TOP 1 b.type, b.first_lsn, b.last_lsn, b.checkpoint_lsn, b.database_backup_lsn FROM msdb..restorehistory a INNER JOIN msdb..backupset b ON a.backup_set_id = b.backup_set_id WHERE a.destination_database_name = 'AV_PROD' ORDER BY restore_date DESC 

不知道以编程方式从事务日志文件中获取第一个/最后一个LSN,但您可以编写恢复脚本来尝试应用每个事务日志,这些事务日志是“太早”(已经存在于数据库中)会失败,这个错误。 其余的应该干净地应用。

希望有人有一个更好的想法,但我可以想象,如果你有很多事务日志,那么等待通过是非常痛苦的,因为整个日志可能需要被扫描以确定最初和最终的LSN是什么。

事实上,你有一个数据库在norecovery意味着你已经恢复了某种types的备份。 该备份有一个标题。 使用它。

RESTORE HEADERONLY返回备份的FirstLSNLastLSN以及包含上次完全备份的LSN的DatabaseBackupLSN 。 从这些你可以重新创build必要的恢复顺序。 您永远不需要查看数据库LSN,必要的顺序可以(也应该)总是从备份介质本身重新创build。