SQL Server 2000 僅有 MDF 數據文件、LDF 日誌文件遺失/損壞時,標準附加失效。本文提供「建臨時庫 → 停服務換文件 → 啟動置疑 → 緊急模式 → dbcc rebuild_log 重建日誌 → 驗證歸檔」完整恢復流程,適用同機遷移與異機掛載。
| 場景 | 現象 | 可行性 |
|---|---|---|
| 同一實例、MDF 為當前庫產生 | sp_attach_single_file_db 可自動重建 LDF,僅警告路徑不符 | 高,一鍵恢復 |
| 異機複製 MDF、或 MDF 非當前庫產生 | 附加報錯 Error 1813: Could not open new database、Device activation error | 需手動重建日誌 |
test_data.mdf) 已拷貝到數據目錄。CREATE DATABASE test; -- 生成 test_Data.mdf、test_Log.ldf
net stop mssqlserver)。test_Log.ldf。test_data.mdf 覆蓋新生成的 test_Data.mdf。-- 企業管理器:右鍵服務器 → 屬性 → 服務器設置 → 勾選「允許對系統目錄直接修改」
-- 或 T-SQL
EXEC sp_configure 'allow updates', 1;
RECONFIGURE WITH OVERRIDE;
UPDATE sysdatabases SET status = -32768 WHERE dbid = DB_ID('test');
-- 狀態變為:只讀、置疑、脫機、緊急模式,可見系統表
DBCC REBUILD_LOG('test', 'C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_log.ldf');
-- 路徑指定新 LDF 存放位置
若報錯 Error 5030: Cannot exclusively lock database → 關閉企業管理器/所有連接,重試。
成功標誌:Warning: The log for database 'test' has been rebuilt. Transactional consistency lost. Run DBCC CHECKDB...
DBCC CHECKDB('test');
-- 應返回:0 allocation errors, 0 consistency errors
EXEC sp_dboption 'test', 'dbo use only', 'false';
-- 或
ALTER DATABASE test SET MULTI_USER;
EXEC sp_configure 'allow updates', 0;
RECONFIGURE WITH OVERRIDE;
CREATE DATABASE ... FOR ATTACH_REBUILD_LOG。master 庫,操作後立即關閉 allow updates。CREATE DATABASE test ON (FILENAME = 'C:\Data\test_data.mdf')
FOR ATTACH_REBUILD_LOG;
-- 自動重建日誌,無需手動進入緊急模式
SQL 2000 遺失 LDF 恢復核心口訣:建臨時庫、停服務、換 MDF、刪 LDF、啟服務、置疑態、開系統表、進緊急態、REBUILD_LOG、CHECKDB、歸正常、關系統表。操作不可逆,務必在測試環境演練熟練後再上生產。