首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

SQL Server 2005 記錄檔一鍵清理:DUMP TRANSACTION + DBCC SHRINKDATABASE 兩行指令釋放空間

     編輯:MySQL 資料庫相關知識

SQL Server 2005 長期運行導致交易記錄檔 (LDF) 膨脹至數 GB,備份檔案過大難以傳輸。本文提供最簡單的兩行 T-SQL 指令,將記錄檔壓縮至約 1 MB,附帶原理說明與生產環境風險提醒。

清理指令

DUMP TRANSACTION 資料庫名稱 WITH NO_LOG;
DBCC SHRINKDATABASE('資料庫名稱', TRUNCATEONLY);

執行範例

DUMP TRANSACTION MyDB WITH NO_LOG;
DBCC SHRINKDATABASE('MyDB', TRUNCATEONLY);

原理解析

指令作用
DUMP TRANSACTION ... WITH NO_LOG截斷非作用中虛擬記錄檔 (VLF),標記為可重用,**不寫入備份檔** (等同 2000 的 TRUNCATE_ONLY)
DBCC SHRINKDATABASE(..., TRUNCATEONLY)釋放資料/記錄檔尾端未使用空間給作業系統,**不移動資料頁**,速度極快

生產環境風險與替代方案

嚴重警告:
  • WITH NO_LOG / TRUNCATE_ONLY **破壞交易記錄鏈**,導致無法進行時間點還原,之後的完整備份才能恢復還原鏈。
  • **生產環境嚴禁常態化使用**,僅限緊急磁碟空間不足、且已有完整備份可恢復的情況。

正規軍做法:定期交易記錄備份

-- 完整備份 (每日/每週)
BACKUP DATABASE MyDB TO DISK = 'D:\Backup\MyDB_Full.bak' WITH INIT, COMPRESSION;

-- 交易記錄備份 (每 15-60 分鐘)
BACKUP LOG MyDB TO DISK = 'D:\Backup\MyDB_Log_20240115_1430.trn' WITH COMPRESSION;
  • 記錄備份會自動截斷非作用中 VLF,保持 LDF 體穩定。
  • 搭配維護計畫 / SQL Agent 作業排程自動化。
  • 啟用備份壓縮 (WITH COMPRESSION) 減少儲存/傳輸成本。

記錄檔體積暴增常見原因排查

  1. 復原模式為「完整」但**從未做過記錄備份** (最常見)。
  2. 長時間執行的大型交易 (大量刪除/更新/索引重建) 阻礙 VLF 截斷。
  3. 複寫/鏡像/AlwaysOn 同步延遲,導致記錄無法截斷 (log_reuse_wait_desc = REPLICATION/AVAILABILITY_REPLICA)。
  4. TempDB 版本存放區暴增 (長跑查詢/觸發器)。

查詢等待原因:SELECT name, log_reuse_wait_desc FROM sys.databases;

檢核清單

  • [ ] 確認已有最近完整備份可用。
  • [ ] 確認無進行中的異地複寫/鏡像同步。
  • [ ] 執行清理指令。
  • [ ] 立即執行完整備份,重建還原鏈。
  • [ ] 部署/檢查定期記錄備份排程。

緊急時刻兩行指令救急,平時靠定期記錄備份穩健控制,這才是專業 DBA 的記錄檔管理之道。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved