当更新数百万条记录而不是插入时,如何防止 SQL 服务器中的日志增长

How can I prevent log growth in SQL Server when update millions of records, not insert

我在 SQL 服务器中有一个更新查询需要更新 5000 万条记录,但是当我执行这个查询时,我的数据库日志文件增长到 100GB 并且由于磁盘已满而停止。

如何防止日志文件增长?

嗯。您可以确定数据库的 recovery model 设置为 "SIMPLE"。然后就可以批量更新了。

即使使用 SIMPLE 恢复模型,仍会记录更新。但是,每次交易后日志记录都会被删除。

我找到了解决我问题的方法,但我不确定它是否是最佳或优化的方法。解决方案是这样的:将您的更新记录拆分为较低计数的批次。我使用带有 wile 循环的 10000 条记录的批处理。

    DECLARE @batchNum int; set @batchNum= 10000;
    DECLARE @ind int; select @ind=MIN(Isn_Num) from PURCHASE_INVOICE_D07F088L1;      
    DECLARE @maxind int; select @maxind=max(Isn_Num) from PURCHASE_INVOICE_D07F088L1; 

    while @ind<=@maxind
    begin
    --update query

        set @ind=@ind+@batchNum 
    end