1. 程式人生 > >SQL Server 2008 清空刪除日誌檔案 130G日誌 10秒內變10M

SQL Server 2008 清空刪除日誌檔案 130G日誌 10秒內變10M

SQL2005:
Backup Log DNName with no_log  '這裡的DNName是你要收縮的資料庫名,自己注意修改下面的資料庫名,我就不再註釋了。
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

 '這裡的DNName_Log 如果不知道在sys.database_files裡是什麼名字的話,可以用以下注釋的語句進行查詢

'USE DNName

'GO

'SELECT file_id, nameFROM sys.database_files;

'GO
USE [master]
GO
ALTER DATABASE DNName SET RECOVERY FULL WITH NO_WAIT
GO
ALTER DATABASE DNName SET RECOVERY FULL --還原為完全模式
GO

SQL2008 的收縮日誌 
由於SQL2008對檔案和日誌管理進行了優化,所以以下語句在SQL2005中可以執行但在SQL2008中已經被取消:
(SQL2005)
BackupLog DNName with no_log
godumptransaction DNName with no_log
goUSE DNName 
DBCC SHRINKFILE (2)
Go--------------------------------------------------------------(SQL2008):
在SQL2008中清除日誌就必須在簡單模式下進行,等清除動作完畢再調回到完全模式。

方案一:完全命令模式
USE[master

]GOALTERDATABASE DNName SET RECOVERY SIMPLE WITH NO_WAIT
    
GOALTERDATABASE DNName SET RECOVERY SIMPLE   --簡單模式GOUSE DNName 
    
GODBCC SHRINKFILE (N'DNName_Log' , 11, TRUNCATEONLY)
    
GOUSE[master]GOALTERDATABASE DNName SET RECOVERY FULLWITH NO_WAIT

    
GOALTERDATABASE DNName SET RECOVERY FULL--
還原為完全模式GO
方案二:部分命令模式 + 任務-收縮-檔案(單個數據庫)

ALTERDATABASE DNName SET RECOVERY SIMPLE   --簡單模式GO

  右鍵-任務-收縮-檔案-確定 下來資料庫的日誌只保留了1M

ALTERDATABASE DNName SET RECOVERY FULL  --還原為完全模式

GO
優點:此清除日誌所執行消耗的時間短,90GB的日誌在分鐘左右即可清除完畢,做完之後做個完全備份在分鐘內
即可完成。
缺點: 不過此動作最好不要經常使用,因為它的執行會帶來系統碎片。普通狀態下LOG和DIFF的備份即可截斷日誌。
此語句使用的恰當環境:當系統的日誌檔案異常增大或者備份LOG時間太長可能影響生產的情況下使用。