SQL2008R2 收縮數據庫問題 - 日志文件不變小


數據庫的日志文件(*.ldf)越來越大,怎么辦?

  收縮吧。收縮日志文件的操作真不簡單喲,還跟數據庫的恢復模式有關啊。

 

一、“簡單恢復模式”時的日志收縮

1. 截斷日志

  當數據庫的恢復模式為“簡單”的時候,日志文件會在以下情況被截斷: (1)完整備份

(2)遇到檢查點(checkpoint)

2. 手動收縮日志文件

  當日志被截斷后,日志文件的內部空間就會標記為“可復用”,因此日志文件就不需要持續增長。關於日志文件空間狀態的解釋,詳見 http://jimshu.blog.51cto.com/3171847/1174474 

  手動收縮日志文件的操作可以參考本文稍后的說明。

 

 

二、“完整恢復模式”時的日志收縮

  在完整恢復模式下,對數據進行完整備份或者遇到檢查點,都不會對日志造成影響。因此,可能會導致日志文件不能被截斷,也就是說,這些空間不能被循環使用。於是,日志文件將持續增長,甚至直逼硬盤空間的極限。此時,即使手動收縮日志文件,也不會減小文件空間,因為空間都被占用着。

  注意:“大容量日志恢復模式”與“完整恢復模式”的日志處理方法一致。

 

1. 確認恢復模式

  以下是使用 SQL Server Management Studio 檢查數據庫的恢復模式。

 

2. 完整備份

  日志備份之前,必須做過完整備份。

 

注意:不要勾選“僅復制備份”選項。“僅復制備份”不會影響日志。

 

3. 事務日志備份

  做過完整備份之后,可以隨時進行事務日志備份。

 

默認的選項,是備份后截斷事務日志。

 

注意:有很多情況會阻止日志截斷,沒有備份事務日志只是其中一種情況,也是最常見的情況。

 

4. 手動收縮日志文件

  做過日志備份之后,日志被截斷,大量空間被標記為“可復用”。一般情況下,這時候就可以進行“收縮文件”操作,以將“可復用”的空間從日志文件中移出,從而減小日志文件。

 

三、非官方的操作方法

1、臨時改用簡單恢復模式

  臨時改為簡單恢復模式,然后做一次完整備份,或者運行checkpoint執行檢查點。當日志被截斷后,再收縮日志文件,最后再改回完整恢復模式。

  甚至,在簡單恢復模式時,可以直接修改日志文件的“初始大小”,改成一個很小的數值即可(系統會自動將日志文件收縮到可能的最小值)。

 

注意:改回完整恢復模式后,請務必立即做一次完整備份。

 

2、with no_log選項

  在舊版本里,可以使用 BACKUP LOG WITH NO_LOG,或者 WITH TRUNCATE_ONLY。但是,SQL Server 2008 已經刪除了這些選項。

 

3、分離后再附加

  分離這個數據庫,然后刪除日志文件。然后重新附加這個數據庫,SQL Server 就會警告丟失了日志文件,如果忽略這個警告,系統會自動創建一個空的日志文件。 注意:可能會丟失部分數據,詳見《丟失日志文件的風險與對策》 http://jimshu.blog.51cto.com/3171847/1341289

 


免責聲明!

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



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