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

SQL Server 還原資料庫報「無法打開備份裝置」錯誤的排查與解決

     編輯:關於SqlServer

錯誤現象

在執行資料庫還原 (RESTORE DATABASE) 時,彈出錯誤:

無法打開備份裝置 'E:\自動備份\ufidau8xTmp\UFDATA.BAK'。裝置出現錯誤或裝置脫機。詳細資訊請參閱 SQL Server 錯誤日誌。 (錯誤碼 -2147217900)

系統建議檢查:磁碟空間、目錄是否存在、系統庫路徑與 MDF 檔案目錄一致性。

根因分析

  1. 權限不足 (最常見):SQL Server 服務啟動帳戶 (通常是 NT Service\MSSQLSERVER 或網域帳戶) 對備份檔案所在目錄 沒有讀取/寫入權限。
  2. 路徑不存在:備份路徑拼寫錯誤、磁碟機代號變更、網路磁碟未掛載。
  3. 檔案被佔用/損壞:備份檔正在被其他程式鎖定,或檔案本身損壞。
  4. 資料庫正在使用中:還原目標資料庫有活躍連線,無法取得獨佔鎖。

解決方案

方案一:授予服務帳戶權限 (推薦)

  1. 開啟 服務 (services.msc),找到 SQL Server (MSSQLSERVER),查看「登入身分」欄位確認服務帳戶。
  2. 在檔案總管中右鍵備份目錄 (如 E:\自動備份\ufidau8xTmp\) → 內容 → 安全性 → 編輯 → 新增。
  3. 輸入服務帳戶名稱 (如 NT Service\MSSQLSERVER),點擊「檢查名稱」確認後確定。
  4. 給予 讀取與執行、列出資料夾內容、讀取 權限 (若需寫入備份則加 寫入)。
  5. 重試還原操作。

方案二:複製備份檔到預設備份目錄

SQL Server 安裝時會建立預設備份目錄 (通常在 C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup),服務帳戶預設擁有完全控制權限。

# 命令列複製 (需管理員權限)
copy "E:\自動備份\ufidau8xTmp\UFDATA.BAK" "C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup\"

然後在 SSMS 還原對話框中從「裝置」選擇此預設目錄下的檔案。

方案三:處理「資料庫正在使用中」導致的還原失敗

若權限無誤但提示「資料庫正在使用」,需先將資料庫設為單用戶模式並強制斷開連線:

USE master;
GO
-- 1. 斷開所有連線並回滾事務
ALTER DATABASE [目標資料庫名] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO
-- 2. 執行還原 (REPLACE 覆蓋現有)
RESTORE DATABASE [目標資料庫名] 
FROM DISK = N'C:\Backup\UFDATA.BAK' 
WITH REPLACE, 
     MOVE 'UFDATA' TO 'D:\Data\UFDATA.mdf',   -- 指定資料檔新路徑
     MOVE 'UFDATA_log' TO 'D:\Log\UFDATA_log.ldf', -- 指定日誌檔新路徑
     STATS = 5;
GO
-- 3. 還原完成後恢復多用戶模式
ALTER DATABASE [目標資料庫名] SET MULTI_USER;
GO

關鍵參數說明:

  • WITH REPLACE:允許覆蓋同名資料庫。
  • MOVE:若還原路徑與原備份路徑不同,**必須** 明確指定 .mdf/.ldf 新路徑,否則會嘗試寫入原路徑導致失敗。
  • STATS = 5:每 5% 顯示進度,便於監控大型資料庫還原。

方案四:檢查 SQL Server 錯誤日誌定位深層原因

-- 透過 T-SQL 讀取最新錯誤日誌
EXEC sp_readerrorlog 0, 1, N'backup', N'error';
-- 或查看檔案:C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Log\ERRORLOG

預防最佳實踐

  1. 固化備份路徑權限:部署腳本中包含 icacls 授權命令,確保服務帳戶永久擁有讀寫權。
  2. 使用維護計畫/作業自動備份:避免手動複製導致路徑/權限問題,備份檔直接寫入預設或受管目錄。
  3. 異地備份:配合 BACKUP TO URL (Azure Blob) 或網路共享 (需服務帳戶有網路權限) 實現異地容災。
  4. 定期演練還原:每季在測試環境執行完整還原驗證備份有效性。

總結

「無法打開備份裝置」90% 以上為 **SQL Server 服務帳戶權限不足**。優先檢查並授予備份目錄讀取權限,或將檔案移至服務帳戶可訪問的預設備份目錄。還原前務必用 ALTER DATABASE ... SET SINGLE_USER WITH ROLLBACK IMMEDIATE 處理活躍連線,並用 MOVE 子句明確指定檔案路徑,可避免 99% 的還原失敗。

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