收縮SQL Server 數據庫的幾種方法


方法一:

Use 數據庫名

Select NAME,size From sys.database_files

ALTER DATABASE 數據庫名 SET RECOVERY SIMPLE WITH NO_WAIT

ALTER DATABASE 數據庫名 SET RECOVERY SIMPLE

USE 數據庫名

DBCC SHRINKFILE(N’日志文件名’,0,TRUNCATEONLY)

ALTER DATABASE 數據庫名 SET RECOVERY FULL WITH NO_WAIT

ALTER DATABASE 數據庫名 SET RECOVERY FULL

方法二:

backup log [你的數據庫名稱] WITH NO_LOG
backup log [你的數據庫名稱] WITH TRUNCATE_ONLY
DBCC SHRINKDATABASE([你的數據庫名稱])

說明:

backup log 指定僅備份事務日志。該日志是從上一次成功執行的 LOG 備份到當前日志的末尾。備份日志之后,可能會截斷事務復制或活動事務不再需要的空間。

NO_LOG | TRUNCATE_ONLY

通過放棄活動日志以外的所有日志,無需備份復制日志即可刪除不活動的日志部分,並截斷日志。該選項會釋放空間。因為並不保存日志備份,所以沒有必要指定備份設備。NO_LOG 和 TRUNCATE_ONLY 是同義的。

這里有個問題,什么是活動日志,微軟的解釋是:

日志文件中從必須存在以確保數據庫范圍內成功回滾的第一條日志記錄到最后寫入的日志記錄之間的部分稱為日志的活動部分,即“活動日志”。這是進行數據庫完整恢復所需的日志部分。永遠不能截斷活動日志的任何部分。

DBCC SHRINKDATABASE 收縮特定數據庫的所有數據和日志文件,這個是最簡單的方法了,也可以使用。

 

不過有個問題是:

在一些對數據安全性要求不高,或者備份頻率很高的情況下,使用直接截斷日志的方法不如使用 簡單恢復模式。微軟說:在簡單恢復模式下,在每個數據備份后事務日志將自動截斷,也就是說,不活動的日志將被刪除。因為經常會發生日志截斷,所以沒有事務日志備份。這簡化了備份和還原。但是,沒有事務日志備份,便不可能恢復到失敗的時間點。

也就是說:如果你不會使用日志來恢復數據(我自己不會用,我使用redgate 定時高頻率備份),那么簡單模式就是最佳的方案。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM