誤刪交易記錄檔 (.ldf) 是 DBA 職涯中最驚心動魄的時刻之一。資料庫進入 SUSPECT (置疑) 狀態,無法正常掛載。本文提供兩大經典復原方案:標準緊急模式修復法 與 實戰案例深度還原法 (含 DTS/SSIS 資料遷移),並解析關鍵風險控制點。
.mdf),**不驗證記錄檔一致性**SINGLE_USER、READ_ONLY (舊版) 或 READ_WRITE (新版)DBCC CHECKDB 修復、資料匯出、結構腳本產生
-- 1. 建立同名空資料庫 (僅為取得檔案鎖定權限)
CREATE DATABASE [RecoverDB];
GO
-- 2. 停止 SQL Server 服務 (net stop MSSQLSERVER)
-- 3. 用原始 .mdf 覆蓋新建資料庫的 .mdf
-- 複製原始 RecoverDB.mdf → 覆蓋 C:\Data\RecoverDB.mdf
-- 4. 啟動 SQL Server 服務
-- 資料庫將顯示為 SUSPECT (置疑)
-- 5. 進入緊急模式修復
USE MASTER;
GO
EXEC sp_configure 'allow updates', 1; RECONFIGURE WITH OVERRIDE; -- 允許直接更新系統表 (舊版需求)
GO
UPDATE sysdatabases SET status = 32768 WHERE name = 'RecoverDB'; -- 32768 = EMERGENCY MODE
GO
EXEC sp_dboption 'RecoverDB', 'single user', 'true'; -- 單用戶模式
GO
DBCC CHECKDB ('RecoverDB'); -- 檢查並嘗試修復 (可加 REPAIR_ALLOW_DATA_LOSS)
GO
-- 重置狀態
UPDATE sysdatabases SET status = 28 WHERE name = 'RecoverDB'; -- 28 = 正常狀態
GO
EXEC sp_configure 'allow updates', 0; RECONFIGURE WITH OVERRIDE;
GO
EXEC sp_dboption 'RecoverDB', 'single user', 'false';
GO
-- SQL 2005+ 簡化版 (不需 allow updates)
-- ALTER DATABASE RecoverDB SET EMERGENCY;
-- ALTER DATABASE RecoverDB SET SINGLE_USER;
-- DBCC CHECKDB ('RecoverDB', REPAIR_ALLOW_DATA_LOSS);
-- ALTER DATABASE RecoverDB SET MULTI_USER;
-- ALTER DATABASE RecoverDB SET ONLINE;
XXX,記錄檔 XXX_Log.ldf 增長至 3 GB.mdf → 建立同名空資料庫 → 停止服務 → 覆蓋回原始 .mdf → 啟動服務EXEC sp_resetstatus 'XXX' (SQL 2005+ 推薦,替代手動 UPDATE sysdatabases)allow updates,資料庫恢復 ONLINEXXX_Lost:
XXX_Lost → XXX → 更新連線字串 → 業務恢復| 風險點 | 影響 | 緩解措施 |
|---|---|---|
| 緊急模式下資料可能不一致 | 讀到髒讀/幻讀/半寫入資料 | **全量匯出後,必須對比業務邏輯驗證** (筆數、金額平衡、關鍵業務流程) |
| sp_configure 'allow updates' 僅 SQL 2000/2005 支援 | 2008+ 會報錯 | 新版使用 ALTER DATABASE ... SET EMERGENCY |
| DBCC CHECKDB REPAIR_ALLOW_DATA_LOSS 會刪除資料 | 不可逆資料遺失 | **先嘗試無 REPAIR 的 CHECKDB**,確認錯誤類型後再決定 |
| DTS/SSIS 匯出大表可能逾時/失敗 | 遷移中斷 | 分批匯出、調整封包大小、使用 BCP/大量插入替代 |
| 身分識別欄位 (IDENTITY) 重置問題 | 匯入後種子值錯誤 | 匯入前 DBCC CHECKIDENT ... RESEED 或啟用 IDENTITY_INSERT |
遺失 LDF 並非世界末日,**緊急模式 + DBCC CHECKDB + 全量資料遷移** 是標準復原路徑。關鍵在於:冷靜、不嘗試未驗證的修復、完整匯出驗證、重建乾淨資料庫。將此流程文件化、腳本化、演練化,是 DBA 從「救火隊員」進化為「架構守護者」的必修課。