首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 遺失交易記錄檔 (LDF) 仍能搶救資料:兩種無日誌復原實戰步驟

     編輯:關於SqlServer

場景

誤刪 .ldf 導致資料庫進入「置疑」狀態,且無可用備份。資料檔 .mdf 完好。

方法一:系統表修改狀態法(適用於資料庫已 checkpoint、無作用中交易)

  1. 建立同名新資料庫,停止 SQL Server,用原 .mdf 覆蓋新資料庫檔案,重啟服務(資料庫顯示置疑)。
  2. 執行下列腳本(將 DBName 替換為實際名稱):
    USE MASTER;
    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;
    SP_DBOPTION 'DBName', 'single user', 'false';
    
  3. 完成後通常可存取資料,建議腳本產生新資料庫並匯入資料替換。

方法二:緊急模式 + DBCC CHECKDB 修復法(更通用)

  1. 停止 SQL Server,移走原 .mdf,建立同名資料庫,停止服務,覆回原 .mdf。
  2. 啟用系統表更新並設定緊急模式:
    USE MASTER;
    SP_CONFIGURE 'ALLOW UPDATES', 1; RECONFIGURE WITH OVERRIDE;
    UPDATE SYSDATABASES SET STATUS = 32768 WHERE NAME = 'DBName';
    
  3. 重啟 SQL Server,設定單一使用者模式並執行修復:
    SP_DBOPTION 'DBName', 'single user', 'true';
    DBCC CHECKDB('DBName');  -- 檢查錯誤
    SP_RESETSTATUS 'DBName'; -- 重置狀態
    SP_CONFIGURE 'ALLOW UPDATES', 0; RECONFIGURE WITH OVERRIDE;
    
  4. 若 DBCC CHECKDB 報錯,嘗試 DBCC CHECKDB('DBName', REPAIR_ALLOW_DATA_LOSS),再逐表 DBCC CHECKTABLE。
  5. 重建所有索引、檢視、預存程序、觸發器(DBCC DBREINDEX 輔助)。
  6. 建立新資料庫 DBName_Recovered,用 DTS/SSIS 將搶救出的資料匯入(視圖、SP 需腳本重建)。

關鍵提醒

  • 修復過程中 進行中交易必定遺失,資料可能有損壞,REPAIR_ALLOW_DATA_LOSS 為最後手段。
  • 平時務必落實「完整備份 + 交易記錄備份」策略,避免陷入無備份無日誌的絕境。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved