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

SQL Server 交易記錄清理與收縮完整指南:2000/2005/2008/2012+ 版本差異

     編輯:關於SqlServer

核心原則

  • 記錄檔 (LDF) 無限增長 通常因復原模式為 **FULL/BULK_LOGGED** 且 **長期未備份交易記錄**。
  • 收縮 (SHRINK) 非常態維護:頻繁收縮導致索引碎片、VLF 碎片化、效能抖動。應修正根因 (定期記錄備份、調整復原模式)。
  • 截斷 ≠ 收縮:截斷釋放邏輯空間 (VLF 狀態變為可重用),收縮歸還物理檔案空間給 OS。

版本別操作指令

SQL Server 2000

-- 截斷記錄 (舊語法)
DUMP TRANSACTION [dbname] WITH NO_LOG;
BACKUP LOG [dbname] WITH NO_LOG;
-- 收縮資料庫
DBCC SHRINKDATABASE(dbname);

SQL Server 2005

BACKUP LOG [dbname] WITH NO_LOG;  -- 2005 仍支援
-- 或
BACKUP LOG [dbname] WITH TRUNCATE_ONLY;
DBCC SHRINKFILE (2);  -- 檔案 ID 2 通常為記錄檔

SQL Server 2008 / 2008 R2 / 2012 / 2014 / 2016 / 2017 / 2019 (標準流程)

-- 1. 切換至簡單復原模式 (自動截斷非作用中 VLF)
ALTER DATABASE [dbname] SET RECOVERY SIMPLE WITH NO_WAIT;
GO

-- 2. 收縮記錄檔至目標大小 (MB),TRUNCATEONLY 僅釋放檔案尾端未使用空間,不移動資料頁
USE [dbname];
DBCC SHRINKFILE (N'dbname_log', 1024, TRUNCATEONLY);  -- 目標 1 GB,視需求調整
GO

-- 3. 切回完整復原模式 (生產環境必須)
ALTER DATABASE [dbname] SET RECOVERY FULL WITH NO_WAIT;
GO

-- 4. 立即執行完整備份 + 記錄備份,啟動新的記錄鏈
BACKUP DATABASE [dbname] TO DISK = 'path\dbname_full.bak' WITH INIT, COMPRESSION;
BACKUP LOG [dbname] TO DISK = 'path\dbname_log.trn' WITH INIT, COMPRESSION;

關鍵細節

  • 邏輯檔案名稱:執行 `SELECT name FROM sys.database_files WHERE type_desc = 'LOG';` 確認邏輯名 (如 `dbname_log`)。
  • TRUNCATEONLY:僅釋放檔案末端未配置空間,**不移動資料頁**,避免索引碎片,速度最快。
  • 目標大小:建議保留至少 **25-50% 預留空間** 或預估單次最大交易記錄量,避免頻繁自動增長。
  • VLF 管理:記錄檔增長以 **VLF (Virtual Log File)** 為單位。過多微小 VLF (< 1000) 或過少巨大 VLF 皆影響啟動恢復/備份/鏡像效能。建議預先規劃記錄檔初始大小與自動增長固定值 (如 512 MB/1 GB)。

替代方案:不收縮的「偽收縮」 (極端情況)

-- 僅截斷記錄,不歸還磁碟空間 (瞬時完成)
ALTER DATABASE [dbname] SET RECOVERY SIMPLE;
CHECKPOINT;  -- 強制截斷
ALTER DATABASE [dbname] SET RECOVERY FULL;
-- 隨後立即完整備份 + 記錄備份

監控與告警

  • 記錄檔使用率:`DBCC SQLPERF(LOGSPACE);` 或查詢 `sys.dm_db_log_space_usage` (2012+)。
  • VLF 數量/大小分布:`DBCC LOGINFO;`
  • 告警閾值:記錄檔使用率 > 80% 持續 15 分鐘、VLF 數 > 1000、自動增長頻率 > 1 次/小時。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved