当事务日志文件已满时,无法删除记录

时间:2015-03-22 12:43:28

标签: sql sql-server database archive transaction-log

我的磁盘空间不足,因此我决定通过删除旧数据来释放一些空间。我试图删除10万到100,000,因为有2.4亿条记录要删除。但我无法立即删除它们并缩小数据库并没有释放太多空间。这是我有时会遇到的错误。

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

如何克服这种情况并删除所有旧记录?请指教。

2 个答案:

答案 0 :(得分:1)

收缩日志文件

您的日志文件所在的磁盘已满,请尝试释放日志驱动器上的一些空间。

Use [DatabaseName]
GO

CHECKPOINT;
GO

CHECKPOINT;  --<-- executed twice 
GO

DBCC SHRINKFILE('LogFileName' , 1024)
GO

删除小块中的记录

以小块的形式删除记录......

DECLARE @Deleted_Rows INT;
SET @Deleted_Rows = 1;


WHILE (@Deleted_Rows > 0)
  BEGIN
   -- Delete some small number of rows at a time
    DELETE TOP (10000) FROM [TableName]

  SET @Deleted_Rows = @@ROWCOUNT;
END

答案 1 :(得分:0)

您需要在大型删除操作期间更频繁地备份事务日志。日志备份将从事务日志中删除不再需要回滚或崩溃恢复的记录。如果这没有帮助,请运行错误消息中建议的查询:

SELECT log_reuse_wait_desc
FROM sys.databases
WHERE name = N'TEST_ARCHIVE';