首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> SQL Server 2008

SQL Server 2008 交易記錄檔無法壓縮「Cannot shrink log file 2」終極解決方案

     編輯:SQL Server 2008

問題現象

記錄檔 (LDF) 佔用 23 GB,但實際使用量不足 1 GB。嘗試 Shrink 卻出現錯誤:

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

常見但失效的方法

  1. 將復原模式從 完整 改為 簡單。
  2. 執行 Shrink 記錄檔。
  3. 再改回 完整 模式。

本案例此流程無效,需採用更徹底的離線處理。

終極解法:Detach / 刪除 LDF / Re-attach

  1. 斷開所有寫入連線(停止應用程式、關閉 Agent 作業、設定單一使用者模式)。
  2. SSMS 右鍵資料庫 → 工作 → 脫離,勾選「捨棄連線」。
  3. 在檔案系統中重新命名或刪除原 LDF 檔案(如 Database_log.ldf → Database_log.ldf.bak)。
  4. SSMS 右鍵 資料庫 → 附加,選取 MDF 檔案。系統會提示找不到 LDF。
  5. 在附加對話框中,選中遺失的 LDF 列,點擊 移除,再點擊 確定。SQL Server 會自動在 MDF 同目錄建立新的 1 MB 空白 LDF。
  6. 若需將 LDF 放置其他磁碟,再次 Detach,移動 LDF,Attach 時指定新路徑。

附加時找不到 LDF

操作腳本參考

-- 1. 設定單一使用者並強制斷開連線
ALTER DATABASE [YourDB] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO

-- 2. 脫離資料庫
EXEC sp_detach_db 'YourDB';
GO

-- 3. 手動刪除/重命名 LDF 檔案 (需在檔案系統操作)

-- 4. 重新附加 (僅指定 MDF)
CREATE DATABASE [YourDB] ON 
(FILENAME = 'D:\Data\YourDB.mdf')
FOR ATTACH_REBUILD_LOG;
GO

-- 5. 恢復多使用者模式
ALTER DATABASE [YourDB] SET MULTI_USER;
GO

風險與注意事項

  • 操作期間資料庫完全不可用,請安排維護窗口。
  • 若資料庫處於 完整復原模式,此操作會中斷記錄鏈,務必在完成後立即執行完整備份以重新建立記錄鏈。
  • 確認磁碟空間足夠容納新 LDF 初始大小與後續增長。
  • 若有複數記錄檔,需一次處理所有 LDF。

替代方案(線上嘗試)

  • 執行 DBCC LOGINFO 檢查 VLF 狀態,若大量 VLF 為作用中,需先備份記錄 (BACKUP LOG) 使其變為非作用中,再 Shrink。
  • 檢查是否有長時間執行的交易、複寫、鏡像、CDC 等導致記錄無法截斷,解除阻塞後再 Shrink。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved