DBA 為縮減記錄檔,執行「卸離 → 刪除 LDF → 附加 MDF」,但附加報錯:
訊息 1813,層級 16:無法開啟新資料庫 'test'。CREATE DATABASE 終止。裝置啟動錯誤。實體檔名 "d:\data\test_log.LDF" 可能有誤。
原因:資料庫卸離時有未提交交易或檢查點未完成,MDF 內部仍標記需要對應 LDF。單純附加無法自動重建記錄檔。
D:\Data\),產生 test.mdf, test_log.ldf。net stop mssqlserver)。test.mdf,將原始損壞的 test.mdf 複製到資料目錄覆蓋。USE master; GO
EXEC sp_configure 'allow updates', 1; RECONFIGURE WITH OVERRIDE; GO
UPDATE sysdatabases SET status = -32768 WHERE dbid = DB_ID('test'); GO
重新整理 EM,資料庫顯示「唯讀/置疑/離線/緊急模式」,僅見系統表。
DBCC REBUILD_LOG('test', 'D:\Data\test_log.ldf'); GO
前提:EM 已關閉、無任何連線佔用資料庫,否則報錯 5030 (無法排他鎖定)。
成功訊息:警告: 資料庫 'test' 的日誌已重建。已失去交易一致性。應執行 DBCC CHECKDB...
DBCC CHECKDB('test'); GO
應回傳 0 個配置錯誤和 0 個一致性錯誤。
EXEC sp_dboption 'test', 'dbo use only', 'false'; GO
EXEC sp_configure 'allow updates', 0; RECONFIGURE WITH OVERRIDE; GO
| 風險 | 說明 | 緩解措施 |
|---|---|---|
| 交易一致性遺失 | REBUILD_LOG 捨棄記錄檔中未寫入資料檔的已提交交易,及未提交交易 | 事後立即完整備份;業務驗證關鍵資料完整性;若不可接受,需從備份還原 |
| 資料庫選項重置 | 自動關閉、自動縮減、復原模式等可能恢復預設 | 檢查並重設 sp_dboption / ALTER DATABASE 選項 |
| 複寫/鏡像/記錄傳送中斷 | LSN 鏈斷裂 | 重新初始化所有相關拓撲 |
ALTER DATABASE test SET RECOVERY SIMPLE; DBCC SHRINKFILE(test_log, 100); ALTER DATABASE test SET RECOVERY FULL;DBCC CHECKDB) 排程。CHECKSUM、啟用壓縮備份 (SQL 2008+)。