TRUNCATE TABLE 向 SQL Server 中的日志文件写入什么内容?

use*_*350 4 sql-server

我知道它不会像 DELETE 那样记录所有内容,但我不确定它会写入日志文件的内容。

小智 5

DELETE 和 TRUNCATE TABLE 语句的事务日志文件中记录的记录之间存在巨大差异

DELETE 语句记录到底删除了什么,即删除行的值,例如'JohnSmith',这样你就可以读取事务日志内容(你可以使用fn_dblog),查看删除了什么,如果你重新插入删除的记录想。

使用 TRUNCATE TABLE 语句,您不能这样做,因为该语句是“最少记录”的。确切的删除值不会记录在事务日志中,只会记录包含截断记录的页面的 ID。这些页面在数据库数据文件中被标记为覆盖,当新事务写入这些页面时,截断的数据将永远消失。

因此,仅读取事务日志无法提供由于 TRUNCATE TABLE 语句而丢失的值。您必须恢复截断记录的唯一机会是读取事务日志中的页面 ID 并在 MDF 文件中找到它,以防它没有被覆盖

  • 根据数据库恢复模型,可以在 BCM 中跟踪由诸如“TRUNCATE TABLE”之类的大容量日志操作修改的范围。在备份之前,此类扩展区不会被重用。确实不能直接使用 fn_dblog 读取数据,但这并不等于说读取日志无法恢复数据。 (2认同)