[SQL][問題處理]無法順利透過 SSMS 進行資料庫複製 ?

在不做任何調整的狀況下,當使用 SSMS 的「複製資料庫」功能的時候,會造成失敗,無法順利複製資料庫。

今天臨時一個同事傳來一個訊息,他使用 SSMS 18.1 的時候,無法正常執行「複製資料庫」的功能,到底是 SSMS 版本太舊還是 SQL Server 2019 的問題呢 ? 其實根本來說,這兩個都沒有問題,有問題的是權限設定所造成的。

怎麼說呢 ? 我先把整個步驟做一下,下面的範例我使用 SQL Server 2019 搭配 SSMS 18.4 的版本,首先我們先選擇我們的資料庫,按下滑鼠右鍵選擇「工作」→「複製資料庫

接下來透過精靈的方式,一步一步來進行相關的設定

1. 歡迎畫面

2. 來源伺服器

3. 目的伺服器

4. 傳送方法

5. 設定為複製資料庫

6. 選擇目的地資料庫名稱和路徑

7. 產生封裝

8. 立即執行

9. 確認


透過前面這幾個步驟,看起來都是用預設值,也沒有做甚麼調整,但很不幸的,卻得到一個錯誤的執行結果

從錯誤訊息中也看不出來有甚麼異常

即便查看 SQL Agent 的紀錄,但從訊息中只能看到執行錯誤,並沒有辦法明確告訴我們到底哪裡錯誤,問題看起來似乎沒有那麼明確。但稍微可以從 SQL Agent 的訊息中知道,是發生在複製檔案的時候造成的異常,因此應該可以縮小範圍,大概不外乎磁碟空間不足或者是權限不足這兩個方向。

其實在前面第 4 個步驟,Wizard 中就有提示到,按照預設會使用 SQL Agent 服務的帳號來進行檔案複製處理,因此如果 SQL Agent 的服務帳號,對於目的地端沒有存取的權限,那就會造成問題了。


問題方向大概確定了,那我們要怎麼來處理呢 ? 在這裡有幾個事項要注意一下

1. 預設的磁碟目錄:在伺服器屬性內雖然有「資料庫預設位置」,在這裡雖然我們有調整預設值,將其修改另外設定一個目錄

但我們在前面使用精靈的第 6 個步驟,在設定目的地資料庫所在的路徑時,這裡並不會抓取我們修改後的伺服器預設值,還是會抓取 master 資料庫的路徑,因此這一點要注意一下。

2. 目錄的權限:當我們希望「資料庫複製」要將新的資料庫放到某個目錄下的時候,要先找一下 SQL Server 和 SQL Agent 這兩個服務的「啟動帳號

將存放資料庫的目錄,透過檔案總管對該目錄的「安全性」進行設定

將 SQL Server 和 SQL Agent 的啟動帳號能對該目錄能具備有「完全控制」的權限

當上述兩項有注意到並且進行設定之後,那麼當我們再重新進行複製資料庫的工作的時候,將資料庫目錄的權限設定好,並且指定檔案放到那個有權限的目錄下

應該就可以順利完成複製資料庫的工作了