在删除很多行时,如何防止事务日志无限期增长?

我正在使用循环删除块中的许多行。

WHILE EXISTS (SELECT 1 FROM dbo.Table WHERE LogTime < CAST('2018-11-05' AS 
  DATE))
  BEGIN
    BEGIN TRANSactION T1
        DELETE TOP (1000) FROM dbo.Table 
        WHERE LogTime < CAST('2018-11-05' AS date);
    COMMIT;
END

我希望每个While循环周期都是一个以“ COMMIT”结尾的事务,因此,每个循环周期之后都会清除事务日志。

不幸的是,事实并非如此。在大约15分钟后的某个时间,查询由于“事务日志已满”而崩溃。然后开始回滚,不仅回滚最后一个循环,还回滚整个查询,包括所有其他循环。

hellokitys 回答:在删除很多行时,如何防止事务日志无限期增长?

我通过将数据库的恢复模式设置为“简单”而不是“完全”来解决了此问题。这样可以确保事务日志不会无限期增长。但是您必须小心:这不是所有数据库的选项。在我们的情况下,我们正在存储日志信息,如果发生数据丢失,可以轻松地将其重新导入。但是对于生产数据库,应该使用“完全”恢复模式,而是使用表分区。

本文链接:https://www.f2er.com/3151537.html

大家都在问