交易日誌 (.ldf) 是資料庫恢復的命脈。本文聚焦三大實戰場景:LDF 遺失/損壞的差異化恢復、日誌暴增的緊急縮減與預防、Simple/Full/Bulk-Logged 三種恢復模式的選型與還原操作,提供可直接執行的 T-SQL 腳本與決策流程圖。
核心判斷:遺失時點是否有作用中交易 (Active Transaction)。
風險極高,資料可能不一致。步驟 (SQL 2000/2005 時代手法,現代版本極少需手工):
sp_configure 'allow updates', 1; RECONFIGURE WITH OVERRIDE;UPDATE sysdatabases SET status = 32768 WHERE name = 'DBName';sp_dboption 'DBName', 'single user', 'true'; → 重啟服務。DBCC CHECKDB ('DBName') 檢查一致性。UPDATE sysdatabases SET status = 28 WHERE name = 'DBName'; sp_configure 'allow updates', 0; RECONFIGURE WITH OVERRIDE;現代最佳實踐:永遠保有完整備份 + 定期日誌備份。LDF 遺失時直接 RESTORE DATABASE ... WITH NORECOVERY; RESTORE LOG ... WITH RECOVERY; 還原至故障點,RPO 可達分鐘級。
SELECT name, recovery_model_desc FROM sys.databases;BACKUP LOG DBName TO DISK = 'path\emergency_log.trn' WITH COMPRESSION, CHECKSUM;log_reuse_wait_desc 確認可重用:SELECT name, log_reuse_wait_desc FROM sys.databases WHERE name = 'DBName';DBCC SHRINKFILE (DBName_log, 1024); -- 縮至 1GBALTER DATABASE DBName MODIFY FILE (NAME = DBName_log, SIZE = 4096MB, FILEGROWTH = 512MB);ALTER DATABASE DBName SET RECOVERY BULK_LOGGED; (索引重建、大量匯入) → 完成後切回 Full。percent_log_used > 80% 觸發告警,自動執行日誌備份/縮減作業。| 模式 | 日誌記錄 | 截斷機制 | 還原能力 | 適用場景 | RPO |
|---|---|---|---|---|---|
| Simple | 大量操作最小記錄 | 檢查點自動 | 僅完整/差異備份還原至備份點 | 測試/開發/資料倉儲/可重載資料 | 備份間隔 |
| Full | 所有操作完整記錄 | 日誌備份 | 時間點還原、頁面還原、檔案群組還原 | 生產 OLTP、關鍵業務、Always On/鏡像/複寫 | 分鐘級 |
| Bulk-Logged | 大量操作最小記錄,其餘完整 | 日誌備份 | 大部分 Full 能力,但大量操作區間無法時間點還原 | 大量匯入/索引維護窗口臨時切換 | 分鐘級 (非大量操作區間) |
-- 完整備份還原 (NORECOVERY 保持恢復狀態)
RESTORE DATABASE DBName FROM DISK = 'full.bak' WITH NORECOVERY, REPLACE, STATS=10;
-- 差異備份還原 (可選)
RESTORE DATABASE DBName FROM DISK = 'diff.bak' WITH NORECOVERY, STATS=10;
-- 日誌備份依序還原 (最後一條用 RECOVERY)
RESTORE LOG DBName FROM DISK = 'log1.trn' WITH NORECOVERY, STATS=10;
RESTORE LOG DBName FROM DISK = 'log2.trn' WITH RECOVERY, STATS=10; -- 完成上線
-- 時間點還原 (STOPAT)
RESTORE LOG DBName FROM DISK = 'log_final.trn' WITH RECOVERY, STOPAT = '2024-01-15 14:30:00';
NORECOVERY (不可讀) 或 STANDBY (可唯讀報表) 模式還原日誌。交易日誌管理的核心鐵律:Full 模式必配日誌備份排程、檔案大小固定成長量、監控 log_reuse_wait_desc、定期驗證還原演練。這才是 DBA 守護資料資產的根本功。