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

SQL Server 從 MDF/LDF 檔案附加資料庫:快速恢復與遷移指南

     編輯:關於SqlServer

適用場景

  • 資料庫伺服器重灌/遷移,僅備份 `.mdf` (資料檔) 與 `.ldf` (記錄檔)。
  • 開發/測試環境快速複製生產資料庫 (停用服務複製檔案)。
  • 誤刪資料庫後,從檔案層面備份恢復。

標準附加語法 (SQL Server 2005+)

USE master;
GO

CREATE DATABASE [YourDBName] 
ON (FILENAME = N'D:\MSSQL\Data\YourDBName.mdf'),   -- 主資料檔
   (FILENAME = N'D:\MSSQL\Log\YourDBName_log.ldf')  -- 記錄檔
FOR ATTACH;
GO

關鍵參數說明

  • FOR ATTACH:指示 SQL Server 從現有檔案建立資料庫元件,不建立新檔案。
  • FILENAME:必須指定 **完整實體路徑**,且 SQL Server 服務帳號需有讀寫權限。
  • 若有 **多個資料檔 (ndf)** 或 **多個記錄檔**,全部在 `ON` 子句中列出。
  • 若記錄檔遺失,可用 `FOR ATTACH_REBUILD_LOG` 重建記錄檔 (資料庫需正常關閉/無作用中交易)。

SSMS 圖形介面操作

  1. 物件總管右鍵 **資料庫** → **附加...**
  2. 點選 **新增** → 選擇 `.mdf` 檔案,下方自動列出關聯檔案。
  3. 確認邏輯名稱、路徑、檔案群組無誤後點選 **確定**。

常見錯誤與排查

錯誤訊息原因解決
Access denied / 5120服務帳號無檔案權限授予服務帳號 (或 `NT SERVICE\MSSQLSERVER`) 資料夾完全控制權限
版本不相容檔案來自較新版本 SQL Server無法降級附加;需相同或更高版本實例
資料庫已存在同名資料庫已在實例中先卸離/刪除現有資料庫,或指定不同名稱附加
記錄檔不符.ldf 非對應 .mdf 或資料庫非乾淨關閉嘗試 `FOR ATTACH_REBUILD_LOG` 或從備份還原

進階:唯讀/獨立資料庫附加

-- 唯讀附加 (適合報表/歸檔)
CREATE DATABASE [ReportDB] ON (FILENAME = '...') FOR ATTACH;
ALTER DATABASE [ReportDB] SET READ_ONLY;

-- 包含檔案流/FILESTREAM
CREATE DATABASE [FSDb] ON (FILENAME = '...'), (FILENAME = '...') FOR ATTACH;

自動化腳本 (批次附加目錄下所有 .mdf)

DECLARE @path NVARCHAR(260) = N'D:\MSSQL\Data\';
DECLARE @cmd NVARCHAR(MAX), @file NVARCHAR(260);
DECLARE cur CURSOR FOR
    SELECT name FROM sys.sysfiles WHERE filename LIKE @path + '%.mdf'; -- 需配合 xp_cmdshell 或 CLR 掃描目錄
-- 實務建議使用 PowerShell + dbatools: Attach-DbaDatabase -SqlInstance localhost -Path 'D:\MSSQL\Data\*.mdf'
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved