数据库的事务日志已满.要找出无法重用日志中的空间的原因,请参阅sys.databases中的log_reuse_wait_desc列.

Abh*_*bhi 26 sql-server

我在尝试删除单个删除查询中的355447记录时收到以下错误.

数据库的事务日志已满.要找出无法重用日志中的空间的原因,请参阅sys.databases中的log_reuse_wait_desc列.

我试过foll.解决方案,但仍然删除语句抛出相同的错误.

DBCC SHRINKFILE(DBname_Log, 2)
BACKUP LOG gis_sync WITH TRUNCATE_ONLY
DBCC SHRINKFILE(DBname_Log, 2)
Run Code Online (Sandbox Code Playgroud)

请帮我解决....谢谢

Ale*_*ici 30

顺便说一句,使用批处理删除大量行总是一种很好的做法(并且可能是此类问题的解决方案):

WHILE EXISTS (SELECT 1 
              FROM   YourTable 
              WHERE  <yourCondition>) 
  DELETE TOP(10000) FROM YourTable 
  WHERE  <yourCondition>
Run Code Online (Sandbox Code Playgroud)

  • 就我而言,这是最好的答案. (2认同)

Seb*_*ine 14

正如Damien所说,你应该找出你的日志增长的原因.查看此帖子以获得解释:事务日志重用等待

删除那么多记录本身就需要很大的日志空间,所以如果你不能为日志文件腾出更多空间,你可能需要在几个较小的步骤中删除这些行.如果使用"完全"恢复,则必须在每个步骤后进行日志备份.

另外,BACKUP LOG ... WITH TRUNCATE_ONLY通常是一个非常糟糕的主意.如果您处于完全恢复模式,那么这将破坏您的备份链并阻止您进行时间点恢复.如果您不需要时间点可恢复性,请使用"简单"恢复设置.否则,请进行真正的日志备份,并将其与其他备份文件一起存储.

日志文件上的DBCC SHRINKFILE对您正在收缩的数据库没有任何帮助.您可以使用它为驱动器上的其他DB腾出空间,但它不会为当前数据库腾出空间,因为它只能删除可重用的空间.这意味着它释放的任何空间都可以用于您的交易.


nit*_*123 13

我也遇到了同样的问题.我得到的结论是,当数据库文件所在的磁盘已满时出现此异常.要解决此问题,我只需增加磁盘的大小.

  • 我有同样的问题。增加磁盘大小有效。我还对日志进行了“收缩”操作,这给了我额外的 85 GB。 (2认同)