清理SQL Server日志釋放文件空間的終極方法


【問題場景】有一個數據庫,它的名字叫CNBlogsText,日志文件霸占了23G硬盤空間,而事務日志已經截斷(Truncate),實際日志內容很小,1G都不到。23G的空間只放1G不到的日志,就如同用一棟別墅養一只寵物,太奢侈了!秉承中華民族勤儉節約的美德,這種奢侈是絕對不允許的,必須要釋放日志文件霸占的多余空間。

但是,無論怎么收縮(Shrink)日志文件,空間就是不能釋放,總是出現錯誤:

Cannot shrink log file 2 (CNBlogsText_log) because of minimum log space required.

之前解決過類似的問題,也寫過一篇博客-SQL Server 2008事務日志清理,當時采用的最終解決方法是:

  • 將恢復模式由完整(Full)改為簡單(Simple)
  • 收縮(Shrink)日志文件
  • 將恢復模式由簡單(Simple)改為完整(Full)

一直以為這就是終極方法,但是竟然沒能終結這次遇到的問題。

經過不懈的努力,終於找到真正的終極方法:

1. Detach數據庫(Detach之前一定要屏蔽所有對這個數據庫的寫入操作,這是血的教訓

2. 刪除或重命名日志文件

3. Attach數據庫,這時會提示找不到日志文件

4. 移除(Remove)這個找不到的日志文件,然后點擊Ok進行Attach,SQL Server會在數據文件所在的文件夾自動創建一個新的日志文件完成Attach。

5. 如果日志文件需要存放在另外的路徑,要再通過Detach/Attach進行日志文件的移動操作。

  • Detach數據庫
  • 將日志文件移動至新的位置
  • Attach數據庫,修改日志文件的路徑並完成Attach

該終極方法的弊端是在操作期間,被操作的數據庫不能被正常訪問。

這就是我找到的清理SQL Server日志釋放文件空間的終極方法。也許有經驗的你覺得這是常識,我才不管呢,只要能秒殺實際問題,就值得分享!


免責聲明!

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



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