數據庫的日志文件(*.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