我的磁盘空间不足,因此我决定通过删除旧数据来释放一些空间。我试图删除10万到100,000,因为有2.4亿条记录要删除。但我无法立即删除它们并缩小数据库并没有释放太多空间。这是我有时会遇到的错误。
数据库的事务日志' TEST_ARCHIVE'已满。要找出无法重用日志中的空间的原因,请参阅sys.databases中的log_reuse_wait_desc列
如何克服这种情况并删除所有旧记录?请指教。
答案 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';