Sql server - 由于ACTIVE_TRANSACTION,日志已满

时间:2014-05-23 03:58:39

标签: sql sql-server sql-server-2012

我有一个非常大的数据库(50+ GB)。为了释放硬盘中的空间,我尝试从其中一个表中删除旧记录。我跑了命令:

delete from Table1 where TheDate<'2004-01-01';

但是,SQL Server 2012说:

Msg 9002, Level 17, State 4, Line 1 
The transaction log for database 'MyDb' is full due to 'ACTIVE_TRANSACTION'.

并没有删除任何东西。这条消息是什么意思?如何删除记录?

2 个答案:

答案 0 :(得分:15)

以下是我最终解决错误的方法。

首先,我将数据库恢复模型设置为SIMPLE。更多信息here

然后,通过删除一些旧文件,我可以创建5GB的可用空间,从而为日志文件提供更多的增长空间。

我在没有任何警告的情况下成功地重新使用DELETE语句。

我认为通过运行DELETE语句,数据库会立即变小,从而释放我硬盘中的空间。但事实并非如此。除非您运行以下命令,否则在DELETE语句释放后释放的空间不会中介返回到操作系统:

DBCC SHRINKDATABASE (MyDb, 0);
GO

有关该命令的更多信息here

答案 1 :(得分:10)

重新启动SQL Server将清除数据库使用的日志空间。 如果这不是一个选项,您可以尝试以下方法:

* Issue a CHECKPOINT command to free up log space in the log file.

* Check the available log space with DBCC SQLPERF('logspace'). If only a small 
  percentage of your log file is actually been used, you can try a DBCC SHRINKFILE 
  command. This can however possibly introduce corruption in your database. 

* If you have another drive with space available you can try to add a file there in 
  order to get enough space to attempt to resolve the issue.

希望这有助于您找到解决方案。