SQL Server 2005 時代常用 BACKUP LOG ... WITH NO_LOG / DUMP TRANSACTION ... WITH NO_LOG 截斷記錄檔,但此語法在 SQL Server 2008 已移除。本文提供 2008 官方標準流程:切換至 SIMPLE 復原模式 → DBCC SHRINKFILE (TRUNCATEONLY) → 切回 FULL 模式,並補充附加資料庫唯讀錯誤的服務帳戶解法。
-- 1. 切換至簡單復原模式 (立即截斷非作用中 VLF)
USE [master];
GO
ALTER DATABASE DNName SET RECOVERY SIMPLE WITH NO_WAIT;
GO
ALTER DATABASE DNName SET RECOVERY SIMPLE; -- 確認生效
GO
-- 2. 縮減記錄檔 (僅釋放檔案尾端未使用空間,不移動資料頁)
USE DNName;
GO
DBCC SHRINKFILE (N'DNName_Log', 11, TRUNCATEONLY); -- 目標縮減至 11MB
GO
-- 3. 切回完整復原模式 (恢復記錄鏈,啟用點對點還原能力)
USE [master];
GO
ALTER DATABASE DNName SET RECOVERY FULL WITH NO_WAIT;
GO
ALTER DATABASE DNName SET RECOVERY FULL;
GO
| 指令/選項 | 作用 |
|---|---|
WITH NO_WAIT | 不等待鎖定,立即返回 (若資源忙碌則失敗,避免封鎖) |
TRUNCATEONLY | 僅釋放檔案末端未配置空間,不移動資料頁,速度極快、無碎片風險 |
目標大小 (11) | 單位 MB,建議設為略大於實際使用量 (可用 DBCC SQLPERF(LOGSPACE) 查詢) |
現象:使用 sa 登入 SSMS 附加資料庫,報錯 File is read-only,但檔案屬性明顯非唯讀。
根因:SQL Server 服務啟動帳戶為 Network Service,僅有預設資料目錄 (DATA) 權限,無法存取其他路徑檔案。
解法 (二擇一):
DATA 目錄下附加。Local System 或具備完整磁碟權限的網域帳號:若上述流程仍報 Cannot shrink log file because of minimum log space required,參考「終極解法」:
Detach → 刪除/重命名 .ldf → Attach 僅加入 .mdf → SQL Server 自動重建記錄檔 → 立即完整備份。
詳細步驟見文章 ID 49117。
掌握標準流程,配合定期記錄檔備份與 MAXSIZE 限制,即可長期維持記錄檔健康體態,避免磁碟空間危機。