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

SQL Server 附加資料庫錯誤 1813 解決方案:遺失 LDF 檔案的標準急救流程

     編輯:關於SqlServer

錯誤現象

執行 sp_attach_db / sp_attach_single_file_db
錯誤 1813:無法開啟新資料庫 'dbname'。CREATE DATABASE 終止。
裝置啟動錯誤。實體檔案名 'd:\SQL Server\mssql\data\dbname_log.ldf' 可能有誤!

原因:僅有 MDF 檔案,LDF 遺失/路徑錯誤/損壞,系統嘗試依 MDF 中記錄的路徑尋找 LDF 失敗。

標準急救流程 (保留資料、重建 LDF)

  1. 建立同名空資料庫 (檔案路徑任意):
    `CREATE DATABASE dbname;`
  2. 停止 SQL Server 服務** (不要分離,直接停服務)。
  3. 用原 MDF 覆蓋新建的 MDF** (覆蓋步驟 1 建立的空 MDF)。
  4. 重新啟動 SQL Server 服務**。
  5. 企業管理器/SSMS 顯示資料庫為 **「可疑」** 模式。
  6. 執行修復腳本 (修改 `@dbname` 為實際名稱):
USE master;
GO
EXEC sp_configure 'allow updates', 1; RECONFIGURE WITH OVERRIDE;
GO
UPDATE sysdatabases SET status = 32768 WHERE name = 'dbname'; -- 設為緊急模式
GO
EXEC sp_dboption 'dbname', 'single user', 'true';
GO
DBCC CHECKDB ('dbname'); -- 檢查一致性
GO
UPDATE sysdatabases SET status = 28 WHERE name = 'dbname'; -- 恢復正常模式
GO
EXEC sp_configure 'allow updates', 0; RECONFIGURE WITH OVERRIDE;
GO
EXEC sp_dboption 'dbname', 'single user', 'false';
GO
  1. 完成後通常可正常存取資料。
  2. 後續強烈建議:利用 `Generate Scripts` 腳本重建新資料庫結構,再用 `INSERT SELECT` / `BCP` / `SSIS` 導入資料,**徹底替換**修復後的資料庫,消除潛在隱患。

替代方案:分離-刪除 LDF-重新附加 (高風險,可能遺失資料)

  1. 分離資料庫。
  2. 刪除/改名 LDF 檔案。
  3. 僅附加 MDF:`sp_attach_single_file_db 'dbname', 'path\dbname.mdf'`。
  4. SQL Server 自動建立最小 LDF (~512KB)。

⚠️ **僅限簡單復原模式、確認無未提交交易、可接受遺失** 時使用。標準流程優先。

預防措施

  • 備份策略:**完整備份 + 記錄備份**,確保 MDF+LDF 成對備份。
  • 檔案管理:MDF/LDF 放置於**專用磁碟/路徑**,避免誤刪/遷移遺漏。
  • 監控:設定資料庫狀態變更警示 (可疑、離線、緊急模式)。

結語

附加資料庫找不到 LDF 是經典場景。**建立同名庫 → 停服務 → 換 MDF → 啟服務 → 緊急模式修復 → 重建遷移**,是保留資料最大化、風險最小化的標準 SOP。切記:修復後**必須重建遷移**,不可長期運行於修復後狀態。

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