使用fn_dblog
我可以获得我的数据库的联机事务日志的活动部分。
但是在每个检查点之后我只能看到 2 个条目显示检查点的开始和检查点LOP_BEGIN_CKPT
的结束LOP_END_CKPT
。
我想知道以前的日志是否在每个检查点之后都被删除,或者它们只是被忽略,因为dbi_checkptLSN
位于引导页面中的值指示最新的 LSN?
如果是dbi_checkptLSN
我能够移动该指标的结果,如果是,如何移动?
如果没有,并且日志没有被删除,我该如何访问以前的日志?
使用fn_dblog
我可以获得我的数据库的联机事务日志的活动部分。
但是在每个检查点之后我只能看到 2 个条目显示检查点的开始和检查点LOP_BEGIN_CKPT
的结束LOP_END_CKPT
。
我想知道以前的日志是否在每个检查点之后都被删除,或者它们只是被忽略,因为dbi_checkptLSN
位于引导页面中的值指示最新的 LSN?
如果是dbi_checkptLSN
我能够移动该指标的结果,如果是,如何移动?
如果没有,并且日志没有被删除,我该如何访问以前的日志?
如果您的数据库处于简单恢复中,则日志可能会在检查点之后被截断。
尽管由于可以延迟日志截断的因素中讨论的原因(最明显的是打开的事务),但这并不总是发生
要查看日志的非活动部分,您可以使用未记录的
DBCC log
命令。或跟踪标志 2537 与
sys.fn_dblog
当然,不能保证您要找的东西就在那里。它可能随时被覆盖。
在检查点之后实际上并没有删除事务。它们的状态只是变为非活动状态,所以它们会被
fn_dblog
函数忽略即使事务位于联机事务日志的非活动部分,也不意味着它们已从 LDF 文件中删除
了解 SQL Server 中的日志记录和恢复
不活动的 VLF 可以并且将会被覆盖,但不会在检查点之后立即被覆盖,因此事务将在那里存在一段时间。当新交易覆盖它们时,它们将消失。这可以在 5 分钟或 2 天内完成。这取决于几个因素
请注意,“截断”并不意味着“删除”,只是标记以便可以重复使用,即覆盖。
事务日志截断
此外
DBCC log
,还有读取LDF文件的第三方工具,例如ApexSQL Log。免责声明:我在 ApexSQL 担任支持工程师