從 SQL Server 2012 起,系統資料庫(Master、Model、MSDB 和 TempDB)以及 資料庫引擎 使用者資料庫,都可以安裝 Server Message Block(SMB)檔案伺服器作為儲存選項。 這同時適用於 SQL Server 獨立安裝和 SQL Server 容錯移轉叢集安裝 (FCI)。
Note
目前 SMB 檔案分享不支援 Filestream。
安裝注意事項
SMB 檔案分享格式:
在指定 SMB 檔案分享的同時,以下格式支援獨立及 FCI 資料庫的通用命名規則(UNC)路徑格式:
\\ServerName\ShareName\
\\伺服器名稱\共享名稱
欲了解更多關於通用命名慣例的資訊,請參閱 UNC (https://go.microsoft.com/fwlink/?LinkId=245534)。
迴圈 UNC 路徑(即伺服器名稱為 localhost、127.0.0.1 或本地機器名稱的 UNC 路徑)不被支援。 作為特殊情況,使用檔案伺服器叢集(File Server Cluster)且託管於與 SQL Server 同一節點的 SQL Server 也不支援。 為避免此情況,建議在分離的 Windows 叢集上建立 SQL Server 與檔案伺服器叢集。
以下的 UNC 路徑格式不支援:
迴圈路徑,例如 \\localhost\.\ 或 \\127.0.0.1\...\
管理共享,例如 \\servername\x$
其他 UNC 路徑格式如 \\?\x:\
映射網路磁碟機。
支援的資料定義語言(DDL)語句
以下的 Transact-SQL DDL 陳述式和資料庫引擎預存程序支援 SMB 檔案共用:
安裝選項
在設定介面的「資料庫引擎 Configuration」頁面「Data Directories」分頁中,將「Data root directory」這個參數設為「\\fileserver1\share1」。
在命令提示字元安裝中,將「/INSTALLSQLDATADIR」指定為「\\fileserver1\share1」。
以下是使用 SMB 檔案分享選項在獨立伺服器上安裝 SQL Server 的範例語法:
Setup.exe /q /ACTION=Install /FEATURES=SQL /INSTANCENAME=MSSQLSERVER /SQLSVCACCOUNT="<DomainName\UserName>" /SQLSVCPASSWORD="<StrongPassword>" /SQLSYSADMINACCOUNTS="<DomainName\UserName>" /AGTSVCACCOUNT="<DomainName\UserName>" /AGTSVCPASSWORD="<StrongPassword>" /INSTALLSQLDATADIR="\\FileServer\Share1\" /IACCEPTSQLSERVERLICENSETERMS若要安裝包含 資料庫引擎 和 Analysis Services 預設執行個體的單節點 SQL Server 容錯移轉叢集執行個體:
setup.exe /q /ACTION=InstallFailoverCluster /InstanceName=MSSQLSERVER /INDICATEPROGRESS /ASSYSADMINACCOUNTS="<DomainName\UserName>" /ASDATADIR=<Drive>:\OLAP\Data /ASLOGDIR=<Drive>:\OLAP\Log /ASBACKUPDIR=<Drive>:\OLAP\Backup /ASCONFIGDIR=<Drive>:\OLAP\Config /ASTEMPDIR=<Drive>:\OLAP\Temp /FAILOVERCLUSTERDISKS="<Cluster Disk Resource Name - for example, 'Disk S:'" /FAILOVERCLUSTERNETWORKNAME="<Insert Network Name>" /FAILOVERCLUSTERIPADDRESSES="IPv4;xx.xxx.xx.xx;Cluster Network;xxx.xxx.xxx.x" /FAILOVERCLUSTERGROUP="MSSQLSERVER" /Features=AS,SQL /ASSVCACCOUNT="<DomainName\UserName>" /ASSVCPASSWORD="xxxxxxxxxxx" /AGTSVCACCOUNT="<DomainName\UserName>" /AGTSVCPASSWORD="xxxxxxxxxxx" /INSTALLSQLDATADIR="\\FileServer\Share1\" /SQLCOLLATION="SQL_Latin1_General_CP1_CS_AS" /SQLSVCACCOUNT="<DomainName\UserName>" /SQLSVCPASSWORD="xxxxxxxxxxx" /SQLSYSADMINACCOUNTS="<DomainName\UserName> /IACCEPTSQLSERVERLICENSETERMS欲了解更多關於 SQL Server 2014 中各種命令列參數選項的使用資訊,請參閱命令提示字元的「安裝 SQL Server 2014」。
作業系統考量(SMB 協定與 SQL Server)
不同的 Windows 作業系統有不同的 SMB 協定版本,而 SMB 協定版本對 SQL Server 是透明的。 你可以在 SQL Server 2014 上找到不同 SMB 協定版本的優點。
| 作業系統 | SMB2 通訊協定版本 | 對 SQL Server 的好處 |
|---|---|---|
| Windows Server 2008 SP 2 | 2.0 | 效能較先前的 SMB 版本有所提升。 耐用度,有助於從暫時的網路故障中恢復。 |
| Windows Server 2008 R2 SP 1,包含 Server Core | 2.1 | 支援大型 MTU,有助於大規模資料傳輸,如 SQL 備份與還原。 此功能必須由使用者啟用。 欲了解更多如何啟用此功能,請參閱《 中小企業的新資訊 》(https://go.microsoft.com/fwlink/?LinkID=237319)。 效能有顯著提升,特別是針對 SQL OLTP 類型的工作負載。 這些效能提升需要套用熱修正。 欲了解更多熱修正的資訊,請參閱 此處 (https://go.microsoft.com/fwlink/?LinkId=237320)。 |
| Windows Server 2012,包含 Server Core | 3.0 | 支援檔案共享的透明故障轉移,提供零停機時間,且無需管理員介入 SQL DBA 或檔案伺服器叢集配置中的檔案伺服器管理員。 支援同時使用多個網路介面的 IO,以及對網路介面故障的容忍度。 支援具有 RDMA 功能的網路介面。 欲了解更多關於這些功能及伺服器訊息區塊的資訊,請參閱 伺服器訊息區塊概覽 (https://go.microsoft.com/fwlink/?LinkId=253174)。 支援可擴展檔案伺服器 (SoFS) 的持續可用性。 |
| Windows Server 2012 R2,包含伺服器核心 | 3.2 | 支援檔案共享的透明故障轉移,提供零停機時間,且無需管理員介入 SQL DBA 或檔案伺服器叢集配置中的檔案伺服器管理員。 支援同時使用多個網路介面進行 IO,並具備對網路介面故障的容忍度,使用 SMB 多通道。 利用 SMB Direct 支援具有 RDMA 功能的網路介面。 欲了解更多關於這些功能及伺服器訊息區塊的資訊,請參閱 伺服器訊息區塊概覽 (https://go.microsoft.com/fwlink/?LinkId=253174)。 支援可擴展檔案伺服器 (SoFS) 的持續可用性。 針對 SQL Server OLTP 常見的小型隨機讀寫輸入輸出進行優化。 預設會啟動最大傳輸單位 (MTU),可大幅提高大型循序傳送的效能,例如 SQL Server 資料倉儲及資料庫備份或還原。 |
安全性考慮
SQL Server 服務帳號和 SQL Server 代理服務帳號在 SMB 共享資料夾上應該擁有完整的 CONTROL 分享權限和 NTFS 權限。 如果使用 SMB 檔案伺服器,SQL Server 服務帳戶可以是網域帳戶或系統帳戶。 欲了解更多關於分享與 NTFS 權限的資訊,請參閱檔案 伺服器上的分享與 NTFS 權限 (https://go.microsoft.com/fwlink/?LinkId=245535)。
Note
SMB 分享資料夾上的 FULL CONTROL 分享權限與 NTFS 權限應限制於:SQL Server 服務帳號、SQL Server Agent 服務帳號及擁有管理員伺服器角色的 Windows 使用者。
建議將網域帳號當作 SQL Server 服務帳號使用。 如果系統帳號被用作服務帳號,請以以下格式授予該機器帳號的權限: <domain_name>\<computer_name>$。
Note
- 在 SQL Server 設定時,若 SMB 檔案分享被指定為儲存選項,則必須將網域帳戶指定為服務帳戶。 在 SMB 檔案分享中,系統帳號只能在 SQL Server 安裝後指定為服務帳號。
- 虛擬帳號無法被認證到遠端地點。 所有虛擬帳戶都使用電腦帳戶的權限。 請以domain_name<computer_name> 格式配置機器帳號。<>$\
用於安裝 SQL Server 的帳號在叢集設定時,應擁有作為資料目錄的 SMB 檔案分享資料夾,或任何其他資料資料夾(使用者資料庫目錄、使用者資料庫日誌目錄、TempDB 目錄、TempDB 日誌目錄、備份目錄)的 FULL CONTROL 權限。
用來安裝 SQL Server 的帳戶應具有 SMB 檔案伺服器的 SeSecurityPrivilege 權限。 要授予此權限,請使用檔案伺服器的本地安全政策主控台,將 SQL Server 設定帳號加入管理稽核與安全日誌政策。 此設定可在本地安全政策主控台的「本地政策」下的使用者權利分配區段取得。
已知問題
當你將一個位於網路連接儲存裝置上的 SQL Server 2014 資料庫分離後,嘗試重新連接 SQL Server 資料庫時,可能會遇到資料庫權限問題。 這個議題在這篇知識庫文章https://go.microsoft.com/fwlink/?LinkId=237321中有定義()。 要解決這個問題,請參考知識庫文章中的 更多資訊 區塊。
有些第三方,例如 NetApp 裝置,並不支援所有 SQL Server API 呼叫。 這些可能會有:
2015-06-04 13:14:19.97 spid9s 誤差:17053,嚴重程度:16,狀態:1。
2015-06-04 13:14:19.97s spid9s DoDevIoCtlOut() GetOverlappedResult() : 遇到作業系統錯誤 1(功能錯誤)。對於NTFS來說,這個錯誤是無害的。 但對 ReFS 來說,這可能導致顯著的效能下降。
若 SMB 檔案分享作為叢集 SQL Server 實例的儲存選項,預設情況下 SQL Server 故障轉移叢集診斷日誌無法寫入檔案共享,因為 SQL Server Resource DLL 缺乏檔案共享的讀寫權限。 若要解決這個問題,請嘗試下列其中一個方法:
授與檔案共用的讀取/寫入權限給叢集中的所有電腦物件。
將診斷記錄的位置設定為本機檔案路徑。 請參閱下列範例:
ALTER SERVER CONFIGURATION SET DIAGNOSTICS LOG PATH = 'C:\logs';