我有一个非常大的数据库(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'.
并没有删除任何东西。这条消息是什么意思?如何删除记录?
答案 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.
希望这有助于您找到解决方案。