MSSQL 清空日志 刪除日志文件
最近的項目主要做數(shù)據(jù)的歸檔,把數(shù)據(jù)從一個數(shù)據(jù)庫拉到另一個數(shù)據(jù)庫,造成新數(shù)據(jù)庫的日志文件非常大;或者數(shù)據(jù)庫在使用過程中會使日志文件不斷增加,使得數(shù)據(jù)庫的性能下降,并且占用大量的磁盤空間。于是想把日志文件刪除。最簡單就是先分離數(shù)據(jù)庫-》刪除日志文件-》最后附加數(shù)據(jù),我這里需要在SSIS中調(diào)用,所以已sql腳本為主。
兩種簡單的清除日志的方法:
一分離附加法:
1、首先把數(shù)據(jù)庫分離,分離數(shù)據(jù)庫之前一定要做好數(shù)據(jù)庫的全備份,選擇數(shù)據(jù)庫——右鍵——任務(wù)——分離,其中藥勾選刪除連接!
分離后在數(shù)據(jù)庫列表將看不到已分離的數(shù)據(jù)庫。
2、刪除數(shù)據(jù)庫的LOG文件數(shù)據(jù)庫文件夾下的對應(yīng)數(shù)據(jù)庫的 ldf文件
3、附加數(shù)據(jù)庫,附加的時候會提醒找不到log文件。到時附加上后會自動創(chuàng)建一個新的日志文件,從而達到清理數(shù)據(jù)庫的目的
二、sql語句清除mssql日志
DUMP TRANSACTION TestDB WITH NO_LOG 清除日志
DBCC SHRINKFILE ('TestDB_log',1) 收縮數(shù)據(jù)庫文件
BACKUP LOG TestDB WITH NO_LOG 截斷事務(wù)日志
該命令在SQL Server 2008也是不支持,在SQL Server 2005和2000可以使用。
首先我們需要獲取數(shù)據(jù)庫文件的路徑:
declare @logfilename varchar(100)
declare @datafilename varchar(100)
select @logfilename=physical_name from sys.database_files where type=1
select @datafilename=physical_name from sys.database_files where type=0
然后切換到master下,分離數(shù)據(jù)庫
use master
exec sp_detach_db @dbname='TestVFA';
緊接下來就是刪除數(shù)據(jù)庫 日志文件
----Remove file
DECLARE @Result int
DECLARE @FSO_Token int
EXEC @Result = sp_OACreate 'Scripting.FileSystemObject', @FSO_Token OUTPUT
EXEC @Result = sp_OAMethod @FSO_Token, 'DeleteFile', NULL, @logfilename
EXEC @Result = sp_OADestroy @FSO_Token
最后就是附加數(shù)據(jù)庫
exec sp_attach_single_file_db @dbname='TestVFA',@physname=@datafilename
注意:默認Ole Automation Procedures 是禁用的我們需要啟用它
exec sp_configure 'show advanced options', 1;
RECONFIGURE;
exec sp_configure 'Ole Automation Procedures',1;
RECONFIGURE;
關(guān)鍵詞:MSSQL
閱讀本文后您有什么感想? 已有 人給出評價!
- 0
- 0
- 0
- 0
- 0
- 0