2014-05-23 755 views
10

我有一個非常大的數據庫(50+ GB)。爲了釋放硬盤中的空間,我嘗試從其中一個表中刪除舊記錄。我跑的命令:Sql服務器 - 由於ACTIVE_TRANSACTION,日誌已滿

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

小;)不是很大。只要它適合中端服務器的內存,絕對不會變化很大。 – TomTom

回答

3

重新啓動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. 

希望這將幫助你找到你的解決方案。

+0

DBCC SQLPERF('logspace')會顯示「Log Size(MB)」和「Log Space Used(%)」。請記住,日誌大小並不表示寫入日誌的實際大小,而是磁盤上日誌文件的大小。因此,要以MB爲單位獲得真實的日誌大小,請將這兩列相乘。例如,2.00MB的日誌大小和70%的使用意味着你有1.4MB的日誌數據。 – brentlightsey

8

這是我最終做的工作來解決錯誤。

首先,我將數據庫恢復模型設置爲SIMPLE。更多信息here

然後,通過刪除一些舊文件,我可以製作5GB的可用空間,這爲日誌文件增加了更多空間。

我沒有任何警告地重新執行DELETE語句。

我認爲通過運行DELETE語句,數據庫會馬上變小,從而釋放硬盤中的空間。但事實並非如此。有關命令here

DBCC SHRINKDATABASE (MyDb, 0); 
GO 

的更多信息:DELETE語句後釋放的空間,除非你運行下面的命令不會返回到操作系統inmediatedly。