之前公司有一台 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 執行個體使用此帳號來啟動服務,並設定可用此帳號讀寫分享的資料夾
如下圖,將登入身分改為有權限讀寫分享資料夾的帳號
這樣設定完成後就可以順利建立資料庫並使用了
註:在建立資料庫路徑時若是使用磁碟機代號方式執行,會出現下述訊息,因此請改用 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. 完成
參考資料: