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

SQL Server 檔案級備份還原技術:MDF/LDF 複製、sp_attach_db、僅有 MDF 重建記錄檔

     編輯:關於SqlServer

除了 BACKUP/RESTORE,直接複製 .mdf/.ldf 檔案也是有效的備份還原方式,特別適合檔案層級備份軟體、磁碟快照、跨伺服器快速遷移。

1. 正常流程:雙檔案完整備份

-- 卸離 (需單一使用者或殺連線)
EXEC sp_detach_db 'TestDB';

-- 複製 TestDB.mdf、TestDB_log.ldf 至備份儲存區

-- 還原:附加
EXEC sp_attach_db 'TestDB',
    'D:\Data\TestDB.mdf',
    'D:\Data\TestDB_log.ldf';

-- 或單檔附加 (自動重建記錄檔)
EXEC sp_attach_single_file_db 'TestDB', 'D:\Data\TestDB.mdf';

適用版本:SQL 7.0 / 2000 / 2005 / 2008 / 2012 / 2014 / 2016 / 2019。

2. 僅有 MDF 檔案:重建記錄檔 (緊急修復模式)

情境:跨機器複製、記錄檔遺失/損壞。

  1. 建立同名空資料庫 (SSMS 或 CREATE DATABASE Test)。
  2. 停止 SQL Server 服務。
  3. 用來源 .mdf 覆蓋目標 .mdf;刪除目標 .ldf。
  4. 啟動服務 → 資料庫顯示 置疑。
  5. 允許系統表更新:
EXEC sp_configure 'allow updates', 1; RECONFIGURE WITH OVERRIDE;
  1. 設定緊急模式:
UPDATE sysdatabases SET status = -32768 WHERE dbid = DB_ID('Test');
  1. 重建記錄檔:
DBCC REBUILD_LOG('Test', 'D:\Data\Test_log.ldf');

成功訊息:Warning: The log for database 'Test' has been rebuilt...

  1. 驗證一致性:DBCC CHECKDB('Test')。
  2. 恢復正常模式:EXEC sp_dboption 'Test', 'dbo use only', 'false';。
  3. 關閉系統表更新:EXEC sp_configure 'allow updates', 0; RECONFIGURE WITH OVERRIDE;。

3. SQL Server 2005+ 簡化版:FOR ATTACH_REBUILD_LOG

CREATE DATABASE Test
ON (FILENAME = 'D:\Data\Test.mdf')
FOR ATTACH_REBUILD_LOG;
GO

單一指令完成上述 1-9 步驟,自動重建記錄檔並線上資料庫。

關鍵風險提醒

  • 記錄鏈中斷:重建記錄檔後,舊記錄備份無法套用,必須立即執行完整備份。
  • 交易一致性:未提交交易將遺失,資料庫進入交易一致但非時間點一致狀態。
  • 系統表更新風險:allow updates 為舊版相容選項,新版建議避免直接更新系統目錄。

最佳實務

  1. 標準備份請使用 BACKUP DATABASE,支援差異/記錄/壓縮/加密/校驗和。
  2. 檔案級備份僅作為輔助手段 (如磁碟快照、離線複製)。
  3. 跨版本附加:低版本 → 高版本 自動升級;高版本 → 低版本 不支援。
  4. AlwaysOn/複寫/鏡像資料庫附加需額外處理拓撲關係。

掌握 sp_attach_db、FOR ATTACH_REBUILD_LOG 與緊急修復流程,在災難現場能快速恢復核心資料服務。

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