首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

SQL Server 2000 遺失 LDF 日誌文件恢復全流程:同機/異機、sp_attach_db 失效、dbcc rebuild_log 實戰

     編輯:MySQL 資料庫相關知識

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需手動重建日誌

異機/異庫 MDF 恢復標準 10 步法

準備

  • 目標 MDF 文件 (如 test_data.mdf) 已拷貝到數據目錄。
  • 確認無其他進程佔用該文件。

步驟執行

  1. 建臨時同名庫:
    CREATE DATABASE test;  -- 生成 test_Data.mdf、test_Log.ldf
  2. 停止 SQL Server 服務 (企業管理器/服務管理器/命令行 net stop mssqlserver)。
  3. 替換文件:
    • 刪除新生成的 test_Log.ldf。
    • 用目標 test_data.mdf 覆蓋新生成的 test_Data.mdf。
  4. 啟動服務:庫狀態變為 置疑 (Suspect),不可操作。
  5. 啟用系統表直接修改:
    -- 企業管理器:右鍵服務器 → 屬性 → 服務器設置 → 勾選「允許對系統目錄直接修改」
    -- 或 T-SQL
    EXEC sp_configure 'allow updates', 1;
    RECONFIGURE WITH OVERRIDE;
  6. 設置緊急模式:
    UPDATE sysdatabases SET status = -32768 WHERE dbid = DB_ID('test');
    -- 狀態變為:只讀、置疑、脫機、緊急模式,可見系統表
  7. 重建日誌文件 (核心步驟):
    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...

  8. 驗證一致性 (可選但強烈建議):
    DBCC CHECKDB('test');
    -- 應返回:0 allocation errors, 0 consistency errors
  9. 恢復正常模式:
    EXEC sp_dboption 'test', 'dbo use only', 'false';
    -- 或
    ALTER DATABASE test SET MULTI_USER;
  10. 關閉系統表直接修改:
    EXEC sp_configure 'allow updates', 0;
    RECONFIGURE WITH OVERRIDE;

關鍵風險提示

  • 事務一致性丟失:重建日誌後,未提交事務回滾、已提交未刷盤事務可能丟失,業務層需核對關鍵數據。
  • 僅適用 SQL 2000/2005:新版本 (2008+) 推薦用 CREATE DATABASE ... FOR ATTACH_REBUILD_LOG。
  • 系統表修改極高風險:操作前必備份 master 庫,操作後立即關閉 allow updates。

現代版本 (SQL 2008+) 簡化語法

CREATE DATABASE test ON (FILENAME = 'C:\Data\test_data.mdf')
FOR ATTACH_REBUILD_LOG;
-- 自動重建日誌,無需手動進入緊急模式

總結

SQL 2000 遺失 LDF 恢復核心口訣:建臨時庫、停服務、換 MDF、刪 LDF、啟服務、置疑態、開系統表、進緊急態、REBUILD_LOG、CHECKDB、歸正常、關系統表。操作不可逆,務必在測試環境演練熟練後再上生產。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved