dbcreator 角色成員使用 SSMS 還原資料庫可能發生無法存取伺服器上指定的路徑或檔案

本文將介紹 dbcreator 角色成員使用 SSMS 還原資料庫可能發生無法存取伺服器上指定的路徑或檔案,該如何利用workaround的方式來解決。

問題描述

當您嘗試使用 dbcreator 角色嘗試還原資料庫時,若您使用來源裝置上的資料庫備份檔來還原資料庫,可能會發生如下圖的錯誤訊息,告訴您沒有權限存取預設的備份路徑。

image

解決步驟

根據和 James 一番討論之後,突然想到或許可以利用 workaround 的方式來避開這個錯誤,如果您不介意看到上述的錯誤訊息,其實也可以在下圖的尋找備份檔案視窗中自行輸入備份檔案位置與檔案名稱,一樣可以順利還原資料庫。

image

或是直接以 T-SQL 進行資料庫還原都可以避開這個錯誤,例如下列的指令碼:


USE [master]
GO

ALTER DATABASE [Northwind] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
RESTORE DATABASE [Northwind] FROM  DISK = N'd:\db backup\NWDev.bak' WITH  REPLACE
ALTER DATABASE [Northwind] SET MULTI_USER

GO

若您真的不希望看到這個錯誤訊息,或許可以考慮使用備份裝置來取代直接使用備份。首先您必須以 diskadmin 或 sysadmin 角色成員來新增備份裝置,請在物件總管中【執行個體 > 伺服器物件 > 備份裝置】上按滑鼠右鍵選擇【新增備份裝置】。

image

於【備份裝置】視窗書入您的裝置名稱,預設目的地的檔案名稱會以您的裝置名稱加上 .bak 的副檔名來命名,當然您也可以自行修改這個檔案名稱,設定完畢按下確定。

image

您就可以在備份裝置節點下看到您所建立的備份裝置。

image

建立備份裝置之後,您就可以使用下列 T-SQL 指令碼來將資料庫直接備份到您所指定的位置。


backup database Northwind to NWDev with init

接著您再使用 dbcreator 角色成員於 SSMS 物件總管中還原資料庫時,於【選取備份裝置】視窗中選擇不要使用預設的【檔案】改用【備份裝置】。

image

按下上圖的【加入】之後您就可以看到之前建立的備份裝置,選擇之後直接按確定。

image

此時您將再【選取備份裝置】視窗中的備份媒體區塊中看到您所選擇的備份媒體。

image

當您按下上圖的【確定】之後 SSMS 會幫您載入這個備份裝置中的備份組,接著按下確定後就可以開始還原資料庫。

image

結論

上一節筆者介紹利用備份裝置來避開 dbcreator 角色成員無法在 SSMS 中利用選擇備份檔案時可能發生的錯誤,可能不是最佳的解決方案,但至少也是一種變通的方式,有類似需求的朋友不妨參考看看。

參考資料

SQL Server Default Backup Directory

伺服器層級角色

sp_addumpdevice (Transact-SQL)