使用 SMB 文件共享存储安装 SQL Server

适用于:SQL Server - 仅限 Windows

在 SQL Server 2012(11.x)及更高版本中,可以将服务器消息块(SMB)文件服务器作为存储选项安装系统数据库(mastermodelmsdbtempdb)和数据库引擎用户数据库。 这同时适用于 SQL Server 独立安装和 SQL Server 故障转移群集安装 (FCI)。

注意

SMB 文件共享目前不支持 FILESTREAM。

安装注意事项

SMB 文件共享格式

指定 SMB 文件共享时,独立数据库和 FCI 数据库支持以下值通用命名约定 (UNC) 路径格式:

  • \\ServerName\ShareName\
  • \\ServerName\ShareName

有关详细信息,请参阅 通用命名约定

不支持环回 UNC 路径(服务器名称为 localhost、127.0.0.1 或本地计算机名称的 UNC 路径)。 作为一种特殊情况,在与 SQL Server 相同节点上托管的文件服务器群集上的 SQL Server 也不受支持。 若要防止这种情况,应在单独的 Windows 群集上创建 SQL Server 和文件服务器群集。

不支持以下 UNC 路径格式:

  • 环回路径,例如 \\localhost\...\\\127.0.0.1\...\
  • 管理共享,例如 \\servername\x$
  • 其他 UNC 路径格式,例如 \\?\x:\
  • 映射网络驱动器

支持的数据定义语言 (DDL) 语句

以下 Transact-SQL DDL 语句和数据库引擎存储过程支持 SMB 文件共享:

  1. 创建数据库
  2. 修改数据库
  3. RESTORE 语句
  4. 备份

安装选项

  • 在设置用户界面中,在 “数据库引擎配置 ”页上的“ 数据目录 ”选项卡上,将参数 数据根目录 设置为 \\<FileServer>\<Share1>\。 将<FileServer><Share1>替换为您环境中的值。

  • 在命令提示符安装中,指定 /INSTALLSQLDATADIR\\<FileServer>\<Share1>\.

    下面是使用 SMB 文件共享选项在独立服务器上安装 SQL Server 的示例语法:

    Setup.exe /q /ACTION=Install /FEATURES=SQL /INSTANCENAME=MSSQLSERVER /SQLSVCACCOUNT="<DomainName\UserName>" /SQLSVCPASSWORD="<password>" /SQLSYSADMINACCOUNTS="<DomainName\UserName>" /AGTSVCACCOUNT="<DomainName\UserName>" /AGTSVCPASSWORD="<password>" /INSTALLSQLDATADIR="\\FileServer\Share1\" /IACCEPTSQLSERVERLICENSETERMS
    

    对于 SQL Server 2022(16.x)及更高版本,请阅读 aka.ms/useterms Microsoft SQL Server 软件许可条款。

    安装具有 SQL Server 和 数据库引擎 的单节点 Analysis Services故障转移群集实例(默认实例):

    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="<password>" /AGTSVCACCOUNT="<DomainName\UserName>" /AGTSVCPASSWORD="<password>" /INSTALLSQLDATADIR="\\FileServer\Share1\" /SQLCOLLATION="SQL_Latin1_General_CP1_CS_AS" /SQLSVCACCOUNT="<DomainName\UserName>" /SQLSVCPASSWORD="<password>" /SQLSYSADMINACCOUNTS="<DomainName\UserName> /IACCEPTSQLSERVERLICENSETERMS
    

    有关 SQL Server 中各种命令行参数选项的使用的详细信息,请参阅 命令提示符在 Windows 上安装和配置 SQL Server

注意

密码应遵循 SQL Server 默认 密码策略。 默认情况下,密码必须为至少八个字符且包含以下四种字符中的三种:大写字母、小写字母、十进制数字、符号。 密码可最长为 128 个字符。 使用的密码应尽可能长,尽可能复杂。

操作系统注意事项(SMB 协议与 SQL Server)

不同的 Windows 操作系统具有不同的 SMB 协议版本,并且 SMB 协议版本对于 SQL Server 而言是透明的。 您可以就 SQL Server而言发现不同 SMB 协议版本的好处。

操作系统 SMB2 协议版本 优势 SQL Server
Windows Server 2012 及更高版本,包括 Server Core 3.0 支持文件共享的透明故障转移,实现零停机时间,并且在文件服务器群集配置中无需数据库管理员或文件服务器管理员的任何干预。

支持同时使用多个网络接口进行IO,并具有对网络接口故障的容忍能力。

支持具有 RDMA 功能的网络接口。

有关这些功能和服务器消息块的详细信息,请参阅 服务器消息块概述

通过持续可用性支持向外扩展文件服务器 (SoFS)。
Windows Server 2012 R2 及更高版本,包括 Server Core 3.2 支持文件共享的透明故障转移,实现零停机时间,并且在文件服务器群集配置中无需数据库管理员或文件服务器管理员的任何干预。

支持通过 SMB 多通道同时使用多个网络接口进行 IO,并具备对网络接口故障的容忍能力。

使用 SMB Direct 支持具有 RDMA 功能的网络接口。

有关这些功能和服务器消息块的详细信息,请参阅 服务器消息块概述

通过持续可用性支持向外扩展文件服务器 (SoFS)。

针对 SQL Server 事务样式工作负荷常见的小型随机读取/写入 I/O 进行优化。

默认情况下启用最大传输单位 (MTU),这可以显著增强大型连续传输(例如 SQL Server 数据仓库和数据库备份或还原)的性能。

安全注意事项

  • SQL Server 服务帐户和 SQL Server 代理服务帐户应对 SMB 共享文件夹具有 FULL CONTROL 共享权限和 NTFS 权限。 使用 SMB 文件服务器时, SQL Server 服务帐户可以是域帐户或系统帐户。 有关共享和 NTFS 权限的详细信息,请参阅 文件服务器上的共享和 NTFS 权限

    注意

    FULL CONTROL SMB 共享文件夹上的共享权限和 NTFS 权限应限制为 SQL Server 服务帐户、SQL Server 代理服务帐户和具有管理员服务器角色的 Windows 用户。

    使用域帐户作为 SQL Server 服务帐户。 如果系统帐户用作服务帐户,请以格式 <___domain-name>\<computer-name>*$*授予计算机帐户的权限。

    注意

    在 SQL Server 安装过程中,如果将 SMB 文件共享指定为存储选项,则必须将域帐户指定为服务帐户。 使用 SMB 文件共享时, System 只能在安装 SQL Server 后将帐户指定为服务帐户。

    虚拟帐户无法通过身份验证,因而无法访问远程位置。 所有虚拟帐户都使用计算机帐户的权限。 以 <___domain-name>\<computer-name>*$* 格式设置计算机帐户。

  • 用于安装 SQL Server 的帐户应在群集安装期间对用作数据目录的 SMB 文件共享文件夹或任何其他数据文件夹(用户数据库目录、用户数据库日志目录、 tempdb 目录、tempdb 日志目录、备份目录)具有完全控制权限。

  • 应向 SeSecurityPrivilege 用于安装 SQL Server 的帐户授予 SMB 文件服务器上的特权。 若要授予此特权,请使用文件服务器上的“本地安全策略”控制台将 SQL Server 安装帐户添加到“管理审核和安全日志”策略中。 此设置在“本地策略”下的“用户权限分配”部分提供。

已知问题和限制

分离驻留在网络连接存储上的 SQL Server 数据库后,在尝试重新附加 SQL Server 数据库时可能会遇到数据库权限问题。 有关详细信息,请参阅错误 5120

如果将 SMB 文件共享用作 SQL Server 群集实例的存储选项,则默认情况下,SQL Server 故障转移群集诊断日志无法写入文件共享,因为 SQL Server 资源 DLL 缺少对文件共享的读/写权限。 若要解决此问题,请尝试使用以下方法之一:

  1. 将对该文件共享的读/写权限授予群集中的所有计算机对象。

  2. 将诊断日志的位置设置为本地文件路径。 请参阅以下示例:

    ALTER SERVER CONFIGURATION SET DIAGNOSTICS LOG PATH = 'C:\logs';
    

在 SMB 文件共享上托管 SQL Server 数据文件时,针对文件的所有 I/O 都通过服务器或虚拟机上的网络接口。 确保有足够的网络带宽来支持工作负荷所需的 I/O。

由于网络连接问题或其他故障而导致承载 SQL Server 数据文件的文件共享不可用,可能会导致 SQL Server 中的 I/O 延迟或故障。 对于任务关键型工作负荷,请确保网络和文件共享中内置了冗余,并且文件共享支持 SMB 3.0 透明故障转移,也称为 连续可用性