數據庫日志不停瘋長,如何進行清空呢?這裡以一台數據庫SQL SERVER 2005為例, 日志文件達到了100多個G一直無法清理,想了很多的辦法:
比如下面這款SqlServer日志清除專家,可用於SQL Server 7、SQL Server 2000、SQL Server 2005的各種版本的數據庫日志的清除。
這個工具一清就可以清干淨的。使您再也不用擔心數據庫日志文件超過幾百兆或上GB級而煩惱。
第二個方法就是采用了一個比較死的辦法。采用 分離,然後再刪除日志文件再附加來生成一個新的日志文件。
切記在操作前先把SQL好好的備份一下。
第一步 當然還是打開企業管理器了
在分離前最好是先把IIS之類的正在連接數據庫的程序關一下,要不然老半天也分離不了。
也可以選擇一下 刪除鏈接 這樣可能分離會快一點。
我們再定位到數據庫所在的硬盤位置
我們為了保除起見可以把 qq2.mdf備份一份,然後再將 qq2_log.ldf 這個文件重命一下名(200G的文件實在是沒地方可以備份)。
然後我們再來附加數據庫
附加到剛剛那個 mdf的文件。注意看下面會提示 .ldf 文件找不到。
不管他了。選擇 .ldf這一分把他給刪掉。
然後再確定,哈還原成功了。系統自動生成了一個新的 ldf 文件 504KB
建議大家先用上面的那個工具去清一下,如果清不到再用這個死辦法來刪除日志。
最後再次提醒各位一定要注意備份噢!!
SQL2008 的收縮日志
由於SQL2008對文件和日志管理進行了優化,所以以下語句在SQL2005中可以運行但在SQL2008中已經被取消:
(SQL2005)
Backup Log DNName with no_log
go
dump transaction DNName with no_log
go
USE DNName
DBCC SHRINKFILE (2)
Go
--------------------------------------------------------------
(SQL2008):
在SQL2008中清除日志就必須在簡單模式下進行,等清除動作完畢再調回到完全模式。
USE [master]
GO
ALTER DATABASE DNName SET RECOVERY SIMPLE WITH NO_WAIT
GO
ALTER DATABASE DNName SET RECOVERY SIMPLE --簡單模式
GO
USE DNName
GO
DBCC SHRINKFILE (N'DNName_Log' , 11, TRUNCATEONLY)
GO
USE [master]
GO
ALTER DATABASE DNName SET RECOVERY FULL WITH NO_WAIT
GO
ALTER DATABASE DNName SET RECOVERY FULL --還原為完全模式
GO
優點:此清除日志所運行消耗的時間短,90GB的日志在分鐘左右即可清除完畢,做完之後做個完全備份在分鐘內
即可完成。
缺點: 不過此動作最好不要經常使用,因為它的運行會帶來系統碎片。普通狀態下LOG和DIFF的備份即可截斷日志。
此語句使用的恰當環境:當系統的日志文件異常增大或者備份LOG時間太長可能影響生產的情況下使用。