將 SQL Server 資料庫建立在網路磁碟

之前公司有一台 Database Server 硬碟空間耗盡造成無法正常存取資料,因 Server 硬體規格限制無法升級更大容量硬碟,後來評估是以網路磁碟分享的方式來擴充硬碟空間,而 SQL Server 預設是不能存取網路磁碟的,在建立資料庫時會出現不能使用網路磁碟的錯誤訊息...

之前公司有一台 Database Server 硬碟空間耗盡造成無法正常存取資料,因 Server 硬體規格限制無法升級更大容量硬碟,後來評估是以網路磁碟分享的方式來擴充硬碟空間,而 SQL Server 預設是不能存取網路磁碟的,在建立資料庫時會出現如下錯誤訊息:

訊息 5110,層級 16,狀態 2,行 2
檔案 "\\192.168.152.146\share_folder\test_data.mdf" 所在的網路路徑不支援資料庫檔案。
訊息 1802,層級 16,狀態 1,行 2
CREATE DATABASE 失敗。某些列出的檔案名稱無法建立。請檢查相關的錯誤。


在微軟的 KB304261 中有提到,預設情況下,SQL Server 無法使用網路資料庫檔案(儲存在網路的伺服器或網路附加的儲存體 [NAS]),若要使用,可透過啟用追蹤旗標 1807 讓 SQL Server 可對網路磁碟進行存取,因此可使用下列語法來建立資料庫

   1:  -- 啟用指定的追蹤旗標 1807
   2:  DBCC TRACEON (1807)
   3:  GO
   4:   
   5:  -- 建立資料庫
   6:  CREATE DATABASE [test] ON  PRIMARY
   7:  ( NAME = N'test_data', FILENAME = '\\192.168.152.146\share_folder\test_data.mdf' , SIZE = 10240KB , FILEGROWTH = 10240KB )
   8:  LOG ON
   9:  ( NAME = N'test_log', FILENAME = '\\192.168.152.146\share_folder\test_log.ldf' , SIZE = 10240KB , FILEGROWTH = 10240KB)
  10:  GO
  11:   
  12:  -- 停用指定的追蹤旗標 1807
  13:  DBCC TRACEOFF(1807)
  14:  GO

 

 

但執行後出現下述訊息:

訊息 5133,層級 16,狀態 1,行 7
檔案 "\\192.168.152.146\share_folder\test_data.mdf" 的目錄查閱失敗,有作業系統錯誤 5(存取被拒。)。
訊息 1802,層級 16,狀態 1,行 7
CREATE DATABASE 失敗。某些列出的檔案名稱無法建立。請檢查相關的錯誤。

 

這是因為 SQL 執行個體的登入身分沒有權限讀寫分享的資料夾,因此只要在分享的資料夾開啟 SQL 執行個體登入帳號的讀寫權限就可以了

若 SQL Server 主機有加入網域,則可直接設定網域帳號來啟動服務,再將分享的資料夾設定讓該網域帳號可讀寫的權限

若 SQL Server 主機沒有加入網域,則可分別在 SQL Server 及分享資料夾的二台主機皆建立一組相同的本機帳號密碼,讓 SQL 執行個體使用此帳號來啟動服務,並設定可用此帳號讀寫分享的資料夾

如下圖,將登入身分改為有權限讀寫分享資料夾的帳號

SQL無法讀寫遠端磁碟時要確認執行個體的帳號是否有讀寫權限

 

這樣設定完成後就可以順利建立資料庫並使用了

 

註:在建立資料庫路徑時若是使用磁碟機代號方式執行,會出現下述訊息,因此請改用 UNC 路徑即可:

訊息 5133,層級 16,狀態 1,行 2
檔案 "z:\test_data.mdf" 的目錄查閱失敗,有作業系統錯誤 3(系統找不到指定的路徑。)。
訊息 1802,層級 16,狀態 1,行 2
CREATE DATABASE 失敗。某些列出的檔案名稱無法建立。請檢查相關的錯誤。

 

將上述建立資料庫步驟整理如下:

1. 設定分享資料夾,並開放讀寫權限給 SQL Server 執行個體

2. 於 SQL 啟動追蹤旗標 1807

3. 建立資料庫

4. 停用追蹤旗標

5. 完成

 

註:使用網路磁碟方式建立的資料庫,可能會對資料穩定性及效能產生影響,使用此方式前請謹慎評估!

 

參考資料: