Windows server SQL Server 2016 /2017 /2019 /2022;Windows Server 2016‑2025;setup.exe + ConfigurationFile.ini 无人值守静默安装 SQL Server WiX Burn 引导器(Bootstrapper) 内部嵌套一整套 MSI 包集合(数据库引擎、SSIS、SSAS、SSRS
使用配置文件安装 SQL Server - SQL Server |Microsoft 学习
从命令提示符在 Windows 上安装和配置 SQL Server - SQL Server |Microsoft 学习
从命令提示符安装更新 - SQL Server |Microsoft 学习
登录到 SQL Server 实例(命令提示符) - SQL Server |Microsoft 学习
sqlcmd 实用程序 - SQL Server |Microsoft 学习
使用 sqlcmd 从脚本文件执行 T-SQL - SQL Server |Microsoft 学习
启动 sqlcmd 实用程序 - SQL Server |Microsoft 学习
使用 sqlcmd - SQL Server |Microsoft 学习
使用 sqlcmd 连接到 SQL Server - SQL Server |Microsoft 学习
快速入门:使用 sqlcmd 在容器中创建数据库的本地副本 - SQL Server |Microsoft 学习
Windows Server SQL Server 静默安装 拆解解构
适用:SQL Server 2016 /2017 /2019 /2022;Windows Server 2016‑2025;setup.exe + ConfigurationFile.ini 无人值守静默安装 分析框架:底层原理|依赖文件|依赖关系|配套链|逻辑链路|边界
一、底层原理
SQL Server setup.exe 属于 WiX Burn 引导器(Bootstrapper),不是普通 MSI;内部嵌套一整套 MSI 包集合(数据库引擎、SSIS、SSAS、SSRS、工具)。
两种静默实现模式:
- 模式 A:命令行直接传大量参数:所有配置直接写在 setup.exe 命令行;适合简单单实例。
- 模式 B:ConfigurationFile.ini 应答文件(主流生产方式)
- setup.exe 读取 ini 应答文件,ini 内包含实例名、功能组件、账号、sa 密码、数据目录、排序规则、防火墙、服务账号等全部配置;
- 引导器解析 ini,依次调度内部各个 MSI 包串行安装;
- 静默 = 完全关闭 GUI 向导,不弹出任何交互窗口,所有输入来源于命令行 /ini 文件。
底层本质:setup.exe (Burn) → 调度多个子 MSI 安装包 → 注册 Windows 服务、写入注册表、初始化 master/model/tempdb 等系统数据库文件、配置 ACL 权限、写入系统防火墙规则。 注意:SQL Server 静默不是单一 MSI,是多组件 MSI 集合编排安装。
二、依赖文件
| 文件 | 作用 |
|---|---|
setup.exe |
WiX Burn 主引导程序,入口,解析参数 /ini,调度子安装包 |
setup.dll |
Burn 引擎内部库 |
ConfigurationFile.ini |
无人值守应答配置文件,静默安装核心;可通过/ACTION=Install /UIMODE=Normal向导生成模板 |
\*.msi / \*.cab |
介质根目录下各个组件 MSI 包:Engine、SSAS、SSIS、SSRS、Tools |
SqlEngineConfig.dll |
数据库引擎自定义安装动作 DLL,初始化系统库、权限、账号映射 |
sqlsupport.msi |
SQL 支持组件(SQL Native Client、CRT 运行库)前置依赖包 |
Summary.txt |
安装日志;默认路径:%ProgramFiles%\Microsoft SQL Server\150\Setup Bootstrap\Log\;故障排查最重要文件 |
日志目录规则:每次安装生成时间戳命名子文件夹,内部
Summary.txt汇总结果,详细 MSI 日志也在该目录。
生成 ConfigurationFile.ini 模板命令
setup.exe /ACTION=Install /UIMODE=Normal
图形向导走完最后一步不要真正安装,向导会在指定输出路径导出完整ConfigurationFile.ini模板。
三、依赖关系
硬性前置依赖(安装前系统必须具备)
- Windows Server 系统组件:.NET Framework 3.5(部分版本 SSMS/SSRS 强依赖);.NET 4.8;
- VC++ Redistributable 运行库;介质自带,setup 会自动安装缺失 CRT;
- Windows Installer MSI 服务正常运行;
- 文件系统:数据、日志、tempdb 磁盘分区NTFS 格式;FAT32 不支持生产库;
- 权限:执行 setup 的账号本地管理员权限;UAC 开启环境必须管理员运行 CMD/PowerShell;
- 域环境:如果配置域服务账号,服务器必须正常解析域控 DNS;
SQL 内部组件依赖链
sqlsupport.msi(前置支持组件)
↓
数据库引擎MSI(核心,master/model/tempdb初始化)
↓
SSAS / SSIS / SSRS (可选,依赖引擎或可独立)
↓
管理工具MSI(SSMS工具)
SSMS 可以单独安装,不依赖数据库引擎本体。
典型静默完整命令(ini 模式,生产标准)
setup.exe /CONFIGURATIONFILE="D:\sqlsetup\ConfigurationFile.ini" /Q /IACCEPTSQLSERVERLICENSETERMS
/Q:完全静默无 UI;/QS:简易进度界面;/IACCEPTSQLSERVERLICENSETERMS:静默必须,自动接受许可协议,缺少直接终止。
关键 ini 片段示例
[SQLSERVER2022]
ACTION="Install"
FEATURES=SQLENGINE,SSIS,SSAS,TOOLS
INSTANCENAME="MSSQLSERVER"
SQLSYSADMINACCOUNTS="BUILTIN\ADMINISTRATORS"
SAPWD="Complex@Passw0rd"
SECURITYMODE=SQL
SQLDATADIR="D:\SQLData"
SQLLOGDIR="L:\SQLLog"
SQLTEMPDBDIR="T:\SQLTempDB"
四、配套链
完整安装配套时序链
管理员CMD执行setup.exe + ConfigurationFile.ini
→ Burn引导器初始化;校验系统先决条件(.NET、内存、磁盘空间、OS版本)
→ 检测冲突实例、旧版本、重启挂起标志(PendingFileRenameOperations)
→ 自动安装前置依赖sqlsupport.msi、VC运行库
→ 依次安装选择的功能组件MSI包
→ SqlEngineConfig.dll自定义动作:初始化master、model、msdb、tempdb系统数据库文件
→ 创建Windows服务:MSSQLSERVER / SQLSERVERAGENT / SSAS / SSIS服务
→ 设置目录ACL权限、注册表权限
→ 可选:写入防火墙入站规则(1433端口)
→ 全部完成,写入Summary.txt日志;设置ERRORLEVEL返回码
配套工具命令
- 查看已安装 SQL 实例
sqlcmd -L
- 静默卸载 SQL 实例(同样使用 setup.exe,ini 或者命令行)
setup.exe /ACTION=Uninstall /INSTANCENAME=MSSQLSERVER /Q
- 修复模式
setup.exe /ACTION=Repair /INSTANCENAME=MSSQLSERVER /Q
- 从命令行直接传参,不使用 ini(简易测试用)
setup.exe /ACTION=Install /FEATURES=SQLENGINE /INSTANCENAME=SQL01 /SQLSYSADMINACCOUNTS="Administrators" /SECURITYMODE=SQL /SAPWD="Pass@123456" /Q /IACCEPTSQLSERVERLICENSETERMS
五、逻辑链路
- 调用入口
setup.exe /CONFIGURATIONFILE=xxx.ini /Q /IACCEPTSQLSERVERLICENSETERMS - Burn 引擎加载 ini 配置,校验参数合法性;缺失关键参数直接退出,写日志。
- 执行先决条件检查规则:内存最小要求、磁盘空间、OS 版本、挂起重启标记、账号权限。
如果存在
PendingFileRenameOperations注册表标记,SQL 安装直接失败,需要服务器重启。 - 部署前置组件:SQL 支持组件、VC++ 运行库。
- 根据
FEATURES=列表,循环调度对应 MSI 安装包。 - 数据库引擎自定义安装动作:
- 创建数据、日志、tempdb 物理文件;
- 初始化 master 系统库;配置 sa 密码、身份验证模式;
- 将指定账号加入 SQL Server sysadmin 服务器角色。
- 创建对应 Windows 服务,设置服务启动账号、启动类型。
- 设置文件夹、注册表安全 ACL。
- 可选:配置 Windows 防火墙放行 SQL 端口。
- 输出返回 Errorlevel;全部事件写入
Summary.txt日志。
关键点:静默安装所有错误不会弹窗;全部信息只写日志;脚本看不到报错,必须解析 Summary.txt。
六、边界约束(高频坑点)
1、参数边界
/Q= 完全静默;/QS= 显示简单进度窗口;不能用 msiexec 的 /qn 传给 SQL setup,SQL setup 是 Burn 引导器,不是普通 MSI。/IACCEPTSQLSERVERLICENSETERMS静默模式强制必须携带,缺失直接退出。- sa 密码复杂度必须满足 Windows 密码策略;弱密码静默直接失败,无弹窗,日志报错。
INSTANCENAME区分命名实例和默认实例;默认实例名为MSSQLSERVER。
2、环境边界
- 挂起重启标记 PendingFileRenameOperations 注册表
HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations存在内容,SQL Server 静默直接失败;必须重启服务器再执行安装。 - 必须管理员权限;普通用户运行静默直接失败。
- 磁盘路径:数据目录、日志目录路径不能带中文、特殊字符;建议纯英文路径。
- 多实例:一台服务器可装多个命名实例;每个实例有独立数据库、独立服务名。
3、文件与权限边界
- 目标磁盘必须 NTFS;SQL 引擎不能部署在 FAT32。
- setup 会自动给 SQL 服务账号设置数据目录 ACL;不要手动提前乱改权限,会造成初始化失败。
- 介质路径不能放在带中文、空格很深路径;介质损坏、cab 缺失,静默安装中断。
4、静默模式特有坑
- 静默安装失败完全无弹窗;脚本只看 errorlevel 不够,必须读取
Summary.txt判断真实结果。 - ConfigurationFile.ini 中密码是明文存储!生产环境 ini 文件必须严格 ACL 保护,禁止普通用户读取。
- 防火墙规则:静默安装默认不会自动开启 1433 防火墙放行,需要脚本后续手动配置防火墙。
- .NET3.5 缺失:SSAS、SSMS 会安装失败;Windows Server 需要先安装 NET‑Framework‑Core 功能。
Install‑WindowsFeature NET‑Framework‑Core
5、返回码边界
| Errorlevel | 含义 |
|---|---|
| 0 | 安装成功完成 |
| 3010 | 成功,需要服务器重启才完全生效 |
| 非 0 | 先决条件失败 / 参数错误 / 磁盘不足 / 权限不足 / 密码策略不满足 |
注意:部分失败场景 setup 返回 0,但 Summary.txt 里面报告失败;SQL Server 静默判断结果优先读取 Summary.txt,不要仅依靠 errorlevel。
6、功能边界
- FEATURES 参数列表:
SQLENGINE数据库引擎;SSAS分析服务;SSIS集成服务;RS报表服务;TOOLS管理工具; - SSRS 可以独立安装,不需要 SQLENGINE;
- 静默安装不自动开启 TCP/IP 协议,安装完成后需要脚本调用
sqlservr.exe或 WMI 启用 TCP 协议,否则远程无法连接,仅本地共享内存可访问。
七、补充:静默安装后常见后处理脚本要点(配套自动化流水线)
- 启用 TCP/IP 协议;
- 防火墙放行 1433;
- 配置 tempdb 多数据文件;
- 开启代理服务;
- 备份 master 库。
SQL Server 2019 / 2022 投产级 ConfigurationFile.ini
适用 Windows Server,静默无人值守安装;默认实例 MSSQLSERVER 版本兼容:SQL Server2019 (150)、SQL Server2022 (160);命名实例可修改
INSTANCENAME⚠️安全提示:ini 内 SA 密码为明文,生产服务器必须设置文件 ACL,禁止普通用户读取;部署完成建议删除本 ini。 调用命令参考:
setup.exe /CONFIGURATIONFILE="D:\SQLInstall\ConfigurationFile.ini" /Q /IACCEPTSQLSERVERLICENSETERMS
; -----------------------------------------------------------------------------
; SQL Server 静默安装应答文件 ConfigurationFile.ini
; 生产投产模板|默认实例 MSSQLSERVER
; 生成来源:setup.exe /ACTION=Install /UIMODE=Normal 向导导出后生产化修改
; -----------------------------------------------------------------------------
[SQLSERVER2022]
;==================== 基础动作与许可 ====================
ACTION="Install"
IACCEPTSQLSERVERLICENSETERMS="True"
QUIET="True"
QUIETSIMPLE="False"
UIMODE="Normal"
;==================== 安装组件选择 FEATURES ====================
; SQLENGINE=数据库核心引擎;SSIS=集成服务;SSAS=分析服务;RS=报表服务;TOOLS=管理工具
FEATURES=SQLENGINE,SSIS,SSAS,RS,TOOLS
;==================== 实例配置 ====================
INSTANCENAME="MSSQLSERVER" ; 默认实例固定 MSSQLSERVER;命名实例写自定义名称
INSTANCEID="MSSQLSERVER"
ROLE="ALL_FEATURES"
;==================== 产品版本 PID ====================
; 企业版填写密钥;开发版/评估版可删除 PID,介质自带评估授权
; PID="AAAAA‑BBBBB‑CCCCC‑DDDDD‑EEEEE"
;==================== 服务账号配置(生产最佳实践:本地系统账户,域环境替换为域托管账号) ====================
; SQL Server 数据库引擎服务账号
SQLSVCACCOUNT="NT SERVICE\MSSQLSERVER"
SQLSVCPASSWORD=""
SQLSVCSTARTUPTYPE="Automatic"
; SQL Server 代理服务
AGTSVCACCOUNT="NT SERVICE\SQLSERVERAGENT"
AGTSVCPASSWORD=""
AGTSVCSTARTUPTYPE="Automatic"
; SSAS 分析服务
ASSVCACCOUNT="NT SERVICE\MSOLAP$MSSQLSERVER"
ASSVCPASSWORD=""
ASSVCSTARTUPTYPE="Automatic"
; SSIS 集成服务
ISSVCCACCOUNT="NT SERVICE\MsDtsServer160"
ISSVCPASSWORD=""
ISVCSTARTUPTYPE="Automatic"
; SSRS 报表服务
RSSVCACCOUNT="NT SERVICE\ReportServer"
RSSVCPASSWORD=""
RSSVCSTARTUPTYPE="Automatic"
;==================== 身份验证与管理员账号 重点 ====================
SECURITYMODE="SQL" ; SQL+Windows混合认证;设为""仅Windows认证
SAPWD="P@ssw0rd‑SQL‑Prod‑2026" ; !!! 修改为生产强密码,满足服务器密码策略
SQLSYSADMINACCOUNTS="BUILTIN\ADMINISTRATORS" ; 将本地管理员组授予SQL sysadmin
; SSAS管理员账号
ASSYSADMINACCOUNTS="BUILTIN\ADMINISTRATORS"
;==================== 文件路径配置 【务必修改磁盘盘符,根据服务器存储规划】 ====================
; 数据库数据文件根目录
SQLDATADIR="D:\SQL\Data"
; 事务日志根目录
SQLLOGDIR="L:\SQL\Log"
; TempDB存放目录
SQLTEMPDBDIR="T:\SQL\TempDB"
; TempDB日志文件目录
SQLTEMPDBLOGDIR="T:\SQL\TempDB"
; 备份文件默认目录
SQLBACKUPDIR="Z:\SQL\Backup"
; 程序安装根目录;一般不需要改动
INSTALLSHAREDDIR="C:\Program Files\Microsoft SQL Server"
INSTALLSHAREDWOWDIR="C:\Program Files (x86)\Microsoft SQL Server"
INSTANCEDIR="C:\Program Files\Microsoft SQL Server"
;==================== 排序规则 生产常用中文SQL排序规则 ====================
SQLCOLLATION="Chinese_PRC_CI_AS"
ASCOLLATION="Chinese_PRC_CI_AS"
;==================== 错误报告、客户体验反馈 生产关闭 ====================
ERRORREPORTING="False"
SQMREPORTING="False"
;==================== 防火墙:静默安装不会自动开放1433,该参数仅控制向导界面选项,实际需要脚本配置防火墙 ====================
; SQL_FIREWALL="True"
;==================== 其他参数 ====================
; 是否启用FILESTREAM;不需要则设为0
FILESTREAMLEVEL="0"
; 安装后不重启服务器
REBOOT="ReallySuppress"
;==================== 附加产品更新;生产内网环境建议关闭更新,避免联网下载 ====================
UpdateEnabled="False"
UpdateSource="MU"
;==================== 先决条件、日志 ====================
; 安装日志由SQL自动输出至 %ProgramFiles%\Microsoft SQL Server\160\Setup Bootstrap\Log\
使用说明与边界注意事项
- 密码修改:
SAPWD必须替换为符合 Windows 密码策略的强密码;弱密码直接静默安装失败,无弹窗,只写日志。 - 磁盘路径修改:
SQLDATADIR / SQLLOGDIR / SQLTEMPDBDIR / SQLBACKUPDIR根据服务器存储规划修改盘符;目录安装前不需要手动创建,setup 会自动生成并配置 ACL 权限。 - 实例切换为命名实例示例
INSTANCENAME="SQL01"
INSTANCEID="SQL01"
同时对应修改各个服务账号名称。 4. 混合认证改为仅 Windows 身份验证:
SECURITYMODE=""
; SAPWD 整行注释掉
- 生产安全管控:
- ConfigurationFile.ini 部署完成后建议删除;若保留,设置 NTFS ACL:仅 Administrators 完全控制,其他用户无任何读取权限。
- SQL 静默安装不会自动开启 TCP/IP 协议,安装结束必须通过脚本启用 TCP 协议,否则只能本地共享内存连接。
- 不会自动配置防火墙放行 1433 端口,需要 PowerShell 脚本补充配置防火墙。
配套后处理脚本片段(PowerShell)
# 1.防火墙放行SQL 1433端口
New‑NetFirewallRule ‑DisplayName "SQL Server‑1433‑TCP" ‑Direction Inbound ‑LocalPort 1433 ‑Protocol TCP ‑Action Allow ‑Profile Any
# 2.启用SQL Server TCP协议(需要重启SQL实例生效)
Set‑ItemProperty ‑Path "HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL160.MSSQLSERVER\MSSQLServer\SuperSocketNetLib\Tcp" ‑Name "Enabled" ‑Value 1
Restart‑Service MSSQLSERVER ‑Force
在 Windows Server 中静默安装 SQL Server 数据库的命令和参数经历了多次发展和改进。SQL Server 提供了静默安装选项,使得管理员可以在没有用户交互的情况下进行 SQL Server 的安装和配置。静默安装通常通过命令行执行,使用 setup.exe 工具。以下是 SQL Server 静默安装的命令参数发展时间线。
1. SQL Server 2008(2008年)
- 静默安装基础:SQL Server 2008 引入了命令行工具
setup.exe来支持静默安装,允许通过命令行指定安装选项。初期的静默安装命令通常包含一个设置配置文件(如.ini文件)或者通过命令行参数直接传递。 - 命令示例:
bashCopy Code
setup.exe /Q /IACCEPTSQLSERVERLICENSETERMS /ACTION=Install /FEATURES=SQL,Tools /INSTANCENAME=MSSQLSERVER /SQLSVCACCOUNT="NT AUTHORITY\NETWORK SERVICE" /AGTSVCACCOUNT="NT AUTHORITY\NETWORK SERVICE"/Q:静默安装。/IACCEPTSQLSERVERLICENSETERMS:接受许可条款。/ACTION=Install:执行安装操作。/FEATURES:指定要安装的功能,如 SQL 引擎(SQL)和工具(Tools)。/INSTANCENAME:指定实例名称。/SQLSVCACCOUNT:指定 SQL Server 服务帐户。
2. SQL Server 2012(2012年)
-
增强的静默安装支持:SQL Server 2012 引入了更多的命令行参数来增强静默安装的灵活性,例如支持更多的配置选项和角色功能。
-
新参数:
/IACCEPTSQLSERVERLICENSETERMS:强制接受许可条款。/INDICATEPROGRESS:显示安装进度。/SQLSVCACCOUNT:指定 SQL Server 服务账户。/SQLSYSADMINACCOUNTS:指定 SQL Server 系统管理员账户。
-
命令示例:
bashCopy Codesetup.exe /Q /IACCEPTSQLSERVERLICENSETERMS /ACTION=Install /FEATURES=SQL,Replication,FullText /INSTANCENAME=MSSQLSERVER /SQLSVCACCOUNT="NT AUTHORITY\NETWORK SERVICE" /SQLSYSADMINACCOUNTS="DOMAIN\Administrator" /AGTSVCACCOUNT="NT AUTHORITY\NETWORK SERVICE"
3. SQL Server 2014(2014年)
-
进一步的命令行改进:SQL Server 2014 在命令行参数上进行了优化,增强了对复杂安装的支持。例如,安装过程中可以通过 SQL Server 配置文件(
.ini文件)进行更加细化的自定义设置。 -
新参数:
/CONFIGURATIONFILE:指定一个配置文件,包含所有的安装参数。/ACTION=Install:指定安装动作。
-
命令示例:
bashCopy Codesetup.exe /Q /IACCEPTSQLSERVERLICENSETERMS /ACTION=Install /FEATURES=SQL,Tools /INSTANCENAME=MSSQLSERVER /CONFIGURATIONFILE="C:\path\to\config.ini"
4. SQL Server 2016(2016年)
-
更强的自动化支持:SQL Server 2016 提供了更多的命令行参数和优化选项,使得安装过程更加灵活和易于管理。尤其是在高可用性和容错配置方面,安装命令可以更加详细地指定。
-
新参数:
/TCPENABLED:启用 TCP/IP 协议。/NPENABLED:启用命名管道协议。/SQLSVCSTARTUPTYPE:指定 SQL Server 启动类型(如Automatic)。/SQLSVCUSER和/SQLSVCPASSWORD:指定 SQL Server 服务帐户及密码。
-
命令示例:
bashCopy Codesetup.exe /Q /IACCEPTSQLSERVERLICENSETERMS /ACTION=Install /FEATURES=SQL,Tools,Replication /INSTANCENAME=MSSQLSERVER /TCPENABLED=1 /NPENABLED=1 /SQLSVCSTARTUPTYPE=Automatic /SQLSVCACCOUNT="NT AUTHORITY\NETWORK SERVICE"
5. SQL Server 2017(2017年)
-
跨平台支持:SQL Server 2017 引入了对 Linux 平台的支持,这对安装命令行工具进行了适配,允许管理员在 Linux 环境下进行静默安装。
-
增强的容器支持:引入了对 Docker 容器的支持,通过命令行进行 SQL Server 安装。
-
新参数:
/SQLSVCPASSWORD:指定 SQL Server 服务的密码。/INSTANCENAME:指定实例名称。
-
命令示例:
bashCopy Codesetup.exe /Q /IACCEPTSQLSERVERLICENSETERMS /ACTION=Install /FEATURES=SQL /INSTANCENAME=MSSQLSERVER /SQLSVCACCOUNT="NT AUTHORITY\NETWORK SERVICE" /SQLSVCPASSWORD="yourpassword" /AGTSVCACCOUNT="NT AUTHORITY\NETWORK SERVICE"
6. SQL Server 2019(2019年)
-
强化容器和 Kubernetes 支持:SQL Server 2019 引入了对 Kubernetes 和容器的更好支持,增加了对容器的安装和配置选项,使得企业能够在现代的容器化环境中快速部署 SQL Server 实例。
-
增强的功能安装和配置选项:SQL Server 2019 增加了更多用于定制安装过程的选项。
-
新参数:
/FEATURES=SQL,Tools,Replication,FullText,AnalysisServices:选择更多的功能进行安装。/UpdateEnabled:启用自动更新功能。
-
命令示例:
bashCopy Codesetup.exe /Q /IACCEPTSQLSERVERLICENSETERMS /ACTION=Install /FEATURES=SQL,Tools,Replication /INSTANCENAME=MSSQLSERVER /SQLSVCACCOUNT="NT AUTHORITY\NETWORK SERVICE" /SQLSVCPASSWORD="yourpassword" /UpdateEnabled=1
7. SQL Server 2022(2022年)
-
更高效的云集成和智能化功能:SQL Server 2022 强调与 Azure 生态系统的集成,允许更灵活的安装选项,支持更多智能功能,如 Azure Synapse 和其他云集成功能。
-
命令行增强:SQL Server 2022 引入了更多的云集成配置选项,以及对最新硬件和操作系统的支持。
-
命令示例:
bashCopy Codesetup.exe /Q /IACCEPTSQLSERVERLICENSETERMS /ACTION=Install /FEATURES=SQL,Tools,Cloud /INSTANCENAME=MSSQLSERVER /SQLSVCACCOUNT="NT AUTHORITY\NETWORK SERVICE" /SQLSVCPASSWORD="yourpassword"
SQL Server 从 2008 年到 2022 年在静默安装方面逐步发展,增加了对不同操作系统平台的支持、增强了容器和云环境的兼容性,并提供了更多的配置选项。命令行安装的核心参数和功能逐步细化和优化,允许管理员更精细地控制安装过程和功能选择。
这篇文章记录一下自己如何在Windows Server Core上安装和配置SQL Server。
安装之前的检查
安装SQL Server的操作系统要求检查
第一件事是需要仔细检查SQL Server的要求文档,这个文档里详细的列出了目前SQL Server支持的操作系统版本,最重要的一条就是检查当你在使用云上的虚拟机时,是否对虚拟机上的操作系统支持,例如我计划是使用Windows Server 2022 Datacenter: Azure Edition, 那么就需要自己检查该文档,检查是否支持,该文档的地址是:https://learn.microsoft.com/en-us/sql/sql-server/install/hardware-and-software-requirements-for-installing-sql-server-2022?view=sql-server-ver16, 请仔细检查操作系统支持,以及Cross-language支持。
注意
也需要注意你需要使用的SQL Server版本,包括企业版,开发版,标准版,Web版,以及Express版本。这些版本并不是在所有的操作系统上都支持的。
语言的支持
关于SQL Server多语言的支持,请参考文档:https://learn.microsoft.com/en-us/sql/sql-server/install/local-language-versions-in-sql-server?view=sql-server-ver16
注意
需要非常注意SQL Server的语言支持,必须选择和系统相对应的语言,否则会总是安装失败。
对于操作系统主要检查以下三项:
-
操作系统使用的用户界面语言
-
操作系统的用户locale
-
操作系统的系统locale
在Windows Server Core上使用如下的方式检查和配置:
PS C:\> Get-WinUILanguageOverride
PS C:\> Get-WinSystemLocale
LCID Name DisplayName
---- ---- -----------
2052 zh-CN 中文(简体,中国)
PS C:\> Get-WinUserLanguageList
LanguageTag : zh-Hans-CN
Autonym : 中文(中华人民共和国)
EnglishName : Chinese
LocalizedName : 中文(简体,中国)
ScriptName : 中文(简体)
InputMethodTips : {0804:{81D4E9C9-1D3B-41BC-9E6C-4B40BF79E35E}{FA550B04-5AD7-411F-A5AC-CA038EC515D7}}
Spellchecking : True
Handwriting : True
PS C:\>
使用如下的方式设置系统的语言和Locale
PS C:\> Set-WinUILanguageOverride -Language en-US
PS C:\> Set-WinSystemLocale -SystemLocale en-US
PS C:\> Set-WinUserLanguageList -LanguageList en-US
确认
是否继续执行此操作?
[Y] 是(Y) [N] 否(N) [S] 暂停(S) [?] 帮助 (默认值为“Y”): y
PS C:\>
设置系统的时区,可以使用sconfig, 运行sconfig, 然后如下图更改时区:


开始安装
开始安装之前请直接到微软的官方网站下载必要的安装文件,使用此安装文件下载必要的文档,默认情况下会下载到C:\SQLServer2022, 登录到Windows Server Core之后,在终端上进入到该目录,使用如下的安装命令进行SQL Server的安装:
.\Setup.exe /qs /ACTION=Install /FEATURES=SQLEngine,FullText /INSTANCENAME=MSSQLSERVER /SQLSVCACCOUNT="<本机或者域用户>" /SQLSVCPASSWORD="<本机或者域用户的密码>" /SQLSYSADMINACCOUNTS="<本机或者域用户>" /AGTSVCACCOUNT="NT AUTHORITY\Network Service" /TCPENABLED=1 /IACCEPTSQLSERVERLICENSETERMS /ADDCURRENTUSERASSQLADMIN /SECURITYMODE=SQL /SAPWD="<SA的密码>"
我们解释一下这些参数的意义:
-
/qs: 执行静默安装,使用这个参数必须要带参数:/IACCEPTSQLSERVERLICENSETERMS -
/ACTION=Install: 执行安装动作,这里也可以使用uninstall卸载安装。 -
/FEATURES=SQLEngine, FullText: 安装选项,这里表示只安装数据库引擎和全文搜索。 -
/INSTANCENAME: 用于指定该安装的实例名. -
/SQLSVCACCOUNT: SQL Server 服务的帐户: 域\用户或系统帐户, 用于启动SQL 服务的账户,例如系统管理员, SQLSVCPASSWORD需要指定该用户的密码。 -
/SQLSYSADMINACCOUNTS: 要设置为 SQL Server 系统管理员的 Windows 帐户, 本机或者域账户。 -
'/AGTSVCACCOUNT': SQL Server代理启动的账户
-
/TCPENABLED=1: 启用tcp协议支持。 -
/ADDCURRENTUSERASSQLADMIN: 注意这个是Express版本专用的选项,将当前用户添加到系统管理员。 -
/SECURITYMODE=SQL: 默认是采用windows认证,值SQL表示混合认证。 -
/SAPWD: 用于设定sa的密码。
完整的选项说明可以使用.\Setup.exe /? 进行仔细的查看。
当然还可以使用配置文件来安装,使用配置文件安装可以更加精细的调整和配置SQL Server的安装,例如数据文件的大小等等。
关于通过配置文件的安装,您可以查看文档:https://learn.microsoft.com/en-us/sql/database-engine/install-windows/install-sql-server-using-a-configuration-file?view=sql-server-ver16
调整SQL Server接受tcp协议和命名管道协议
安装完成之后,需要调整该安装接受来自tcp/ip和命名管道的连接,在Windows Server Core上我们只能通过PowerShell进行调整。
我们这里需要使用sqlps模块,在powershell里需要预先载入该模块:
PS C:\> Import-Module sqlps
PS C:\>
TCP协议和端口的配置
然后先查看tcp的情况:
PS C:\> Import-Module sqlps
PS C:\> $smo = 'Microsoft.SqlServer.Management.Smo.'
PS C:\> $wmi = new-object ($smo + 'Wmi.ManagedComputer').
PS C:\> $wmi
ConnectionSettings : Microsoft.SqlServer.Management.Smo.Wmi.WmiConnectionInfo
Services : {MSSQLFDLauncher, MSSQLSERVER, SQLBrowser, SQLSERVERAGENT}
ClientProtocols : {}
ServerInstances : {MSSQLSERVER}
ServerAliases : {}
Urn : ManagedComputer[@Name='WWW']
Name : WWW
Properties : {}
UserData :
State : Existing
PS C:\> $uri = "ManagedComputer[@Name='WWW']/ ServerInstance[@Name='MSSQLSERVER']/ServerProtocol[@Name='Tcp']"
PS C:\> $Tcp = $wmi.GetSmoObject($uri)
PS C:\> $Tcp
Parent : Microsoft.SqlServer.Management.Smo.Wmi.ServerInstance
DisplayName : TCP/IP
HasMultiIPAddresses : True
IsEnabled : True
IPAddresses : {IP1, IP2, IP3, IP4...}
ProtocolProperties : {Enabled, KeepAlive, ListenOnAllIPs}
Urn : ManagedComputer[@Name='WWW']/ServerInstance[@Name='MSSQLSERVER']/ServerProtocol[@Name='Tcp']
Name : Tcp
Properties : {Name=DisplayName/Type=System.String/Writable=False/Value=TCP/IP, Name=HasMultiIPAddresses/Type=System.Boolean/Writable=False/Value=True, Name=IsEnable
d/Type=System.Boolean/Writable=True/Value=True}
UserData :
State : Creating
PS C:\>
以上代码可以看到我们已经启用了tcp协议了,如果没有启用的话,可以看到IsEnabled : False, 这时候我们可以使用如下的语句进行更改:
PS C:\> $Tcp.IsEnabled = $true
PS C:\> $Tcp.Alter()
PS C:\> $Tcp
Parent : Microsoft.SqlServer.Management.Smo.Wmi.ServerInstance
DisplayName : TCP/IP
HasMultiIPAddresses : True
IsEnabled : True
IPAddresses : {IP1, IP2, IP3, IP4...}
ProtocolProperties : {Enabled, KeepAlive, ListenOnAllIPs}
Urn : ManagedComputer[@Name='WWW']/ServerInstance[@Name='MSSQLSERVER']/ServerProtocol[@Name='Tcp']
Name : Tcp
Properties : {Name=DisplayName/Type=System.String/Writable=False/Value=TCP/IP, Name=HasMultiIPAddresses/Type=System.Boolean/Writable=False/Value=True, Name=IsEnable
d/Type=System.Boolean/Writable=True/Value=True}
UserData :
State : Creating
PS C:\>
到这里我们已经配置了SQL Server的tcp协议了。但是需要注意的是,Tcp的连接端口是否配置了1433, 或者仅仅是使用动态端口,我们可以继续使用如下的命令查看:
PS C:\> $wmi.GetSmoObject($uri + "/IPAddress[@Name='IPAll']").IPAddressProperties
Name : TcpDynamicPorts
Value :
Type : System.String
Writable : True
Readable : True
Expensive : False
Dirty : False
Retrieved : True
IsNull : False
Enabled : False
Required : False
Attributes : {}
Name : TcpPort
Value : 1433
Type : System.String
Writable : True
Readable : True
Expensive : False
Dirty : False
Retrieved : True
IsNull : False
Enabled : False
Required : False
Attributes : {}
PS C:\>
我们这里看到该安装没有使用动态端口,静态端口已经是1433了。如果需要更改为其他端口,我们可以更改:
PS C:\> $wmi.GetSmoObject($uri + "/IPAddress[@Name='IPAll']").IPAddressProperties[1].Value="1445"
PS C:\> $wmi.GetSmoObject($uri + "/IPAddress[@Name='IPAll']").IPAddressProperties
Name : TcpDynamicPorts
Value :
Type : System.String
Writable : True
Readable : True
Expensive : False
Dirty : False
Retrieved : True
IsNull : False
Enabled : False
Required : False
Attributes : {}
Name : TcpPort
Value : 1445
Type : System.String
Writable : True
Readable : True
Expensive : False
Dirty : True
Retrieved : True
IsNull : False
Enabled : False
Required : False
Attributes : {}
PS C:\>
这样我们就端口更改到了1445了。
到这里我们就配置好了tcp协议以及端口。
命名管道的配置
采用如下的命令启用命名管道的配置:
PS C:\> $uri = "ManagedComputer[@Name='WWW']/ ServerInstance[@Name='MSSQLSERVER']/ServerProtocol[@Name='Np']"
PS C:\> $Np = $wmi.GetSmoObject($uri)
PS C:\> $Np
Parent : Microsoft.SqlServer.Management.Smo.Wmi.ServerInstance
DisplayName : Named Pipes
HasMultiIPAddresses : False
IsEnabled : False
IPAddresses : {}
ProtocolProperties : {Enabled, PipeName}
Urn : ManagedComputer[@Name='WWW']/ServerInstance[@Name='MSSQLSERVER']/ServerProtocol[@Name='Np']
Name : Np
Properties : {Name=DisplayName/Type=System.String/Writable=False/Value=Named Pipes, Name=HasMultiIPAddresses/Type=System.Boolean/Writable=False/Value=False, Name=Is
Enabled/Type=System.Boolean/Writable=True/Value=False}
UserData :
State : Creating
PS C:\> $Np.IsEnabled = $true
PS C:\> $Np.Alter()
PS C:\> $Np
Parent : Microsoft.SqlServer.Management.Smo.Wmi.ServerInstance
DisplayName : Named Pipes
HasMultiIPAddresses : False
IsEnabled : True
IPAddresses : {}
ProtocolProperties : {Enabled, PipeName}
Urn : ManagedComputer[@Name='WWW']/ServerInstance[@Name='MSSQLSERVER']/ServerProtocol[@Name='Np']
Name : Np
Properties : {Name=DisplayName/Type=System.String/Writable=False/Value=Named Pipes, Name=HasMultiIPAddresses/Type=System.Boolean/Writable=False/Value=False, Name=Is
Enabled/Type=System.Boolean/Writable=True/Value=True}
UserData :
State : Creating
PS C:\>
如上配置好了命名管道的连接方式。
开放防火墙
最后我们需要开放Windows Server Core上的防火墙,以便可以管理和使用该SQL Server:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
#Enabling SQL Server Ports
New-NetFirewallRule -DisplayName "SQL Server" -Direction Inbound –Protocol TCP –LocalPort 1433 -Action allow
New-NetFirewallRule -DisplayName "SQL Admin Connection” -Direction Inbound –Protocol TCP –LocalPort 1434 -Action allow
New-NetFirewallRule -DisplayName "SQL Database Management” -Direction Inbound –Protocol UDP –LocalPort 1434 -Action allow
New-NetFirewallRule -DisplayName "SQL Service Broker” -Direction Inbound –Protocol TCP –LocalPort 4022 -Action allow
New-NetFirewallRule -DisplayName "SQL Debugger/RPC” -Direction Inbound –Protocol TCP –LocalPort 135 -Action allow
#Enabling SQL Analysis Ports
New-NetFirewallRule -DisplayName "SQL Analysis Services” -Direction Inbound –Protocol TCP –LocalPort 2383 -Action allow
New-NetFirewallRule -DisplayName "SQL Browser” -Direction Inbound –Protocol TCP –LocalPort 2382 -Action allow
#Enabling Misc. Applications
New-NetFirewallRule -DisplayName "HTTP” -Direction Inbound –Protocol TCP –LocalPort 80 -Action allow
New-NetFirewallRule -DisplayName "SSL” -Direction Inbound –Protocol TCP –LocalPort 443 -Action allow
New-NetFirewallRule -DisplayName "SQL Server Browse Button Service” -Direction Inbound –Protocol UDP –LocalPort 1433 -Action allow
#Enable Windows Firewall
Set-NetFirewallProfile -DefaultInboundAction Block -DefaultOutboundAction Allow -NotifyOnListen True -AllowUnicastResponseToMulticast True
当然您可以根据自己的实际情况考虑是否要开放所有的端口。
测试
最后使用sqlcmd对该数据库进行测试:
PS C:\> sqlcmd -H 127.0.0.1 -U sa
密码:
1> select name, database_id, create_date from sys.databases;
2> go
name database_id create_date
-------------------------------------------------------------------------------------------------------------------------------- ----------- -----------------------
master 1 2003-04-08 09:13:36.390
tempdb 2 2023-08-06 11:57:10.920
model 3 2003-04-08 09:13:36.390
msdb 4 2022-10-08 06:31:57.550
MyDB 5 2023-08-03 22:42:29.140
(5 行受影响)
1>
到这里就全部结束了。
SQL Server 安装程序可以根据系统默认输入和运行时输入生成配置文件。您可以使用配置文件以相同的配置在整个企业中部署 SQL Server。您还可以通过创建可启动 Setup.exe 的批处理文件,在整个企业中标准化手动安装。
本文针对 SQL Server 版本 2016 及更高版本进行维护。有关旧版本的 SQL Server,请参阅使用配置文件安装 SQL Server 2014。
安装程序仅支持通过命令提示符使用配置文件。使用配置文件时参数的处理顺序概述如下:
-
配置文件会覆盖软件包中的默认值
-
命令行值会覆盖配置文件中的值
配置文件可用于跟踪每个安装的参数和值。这使得配置文件可用于验证和审计安装。
提示
由于配置选项可能因版本而异,因此最好为每个新版本的 SQL Server 生成一个新版本。ConfigurationFile.ini
配置文件结构
该文件是一个文本文件,其中包含参数(名称/值对)和描述性注释。ConfigurationFile.ini
下面是一个文件示例:ConfigurationFile.ini
; Microsoft SQL Server Configuration file
[OPTIONS]
; Specifies a Setup work flow, like INSTALL, UNINSTALL, or UPGRADE.
; This is a required parameter.
ACTION="Install"
; Specifies features to install, uninstall, or upgrade.
; The list of top-level features include SQL, AS, and IS.
; The SQL feature will install the database engine, replication, and full-text.
FEATURES=SQL
如何生成配置文件
-
插入 SQL Server 安装媒体。在根文件夹中,双击 Setup.exe。要从网络共享安装,请在共享上找到根文件夹,然后双击 Setup.exe。
注意
SQL Server Express Edition 安装程序不会自动创建配置文件。以下命令将启动设置并创建配置文件。
SETUP.exe /UIMODE=Normal /ACTION=INSTALL -
按照向导一直到 Ready to Install 页面。配置文件的路径在 Ready to Install 页面的配置文件路径部分指定。有关如何安装 SQL Server 的更多信息,请参阅从安装向导 (安装程序) 安装 SQL Server。
-
在不实际完成安装的情况下取消设置,以生成 INI 文件。
注意
设置基础设施会写出已运行作的所有适当参数,但密码等敏感信息除外。该参数也不会写出到配置文件中,并且需要修改配置文件或在命令提示符处提供值。有关详细信息,请参阅从命令提示符安装 SQL Server。此外,布尔参数还包括一个值,其中值通常不通过命令提示符提供。
/IAcceptSQLServerLicenseTerms
从 SQL Server 2022 (16.x) 开始,请阅读 aka.ms/useterms Microsoft SQL Server 软件许可条款。
使用配置文件安装 SQL Server
您只能在命令行安装中使用配置文件。
注意
如果您需要更改配置文件,建议您创建副本并使用该副本。
如何使用配置文件安装独立的 SQL Server 实例
- 通过命令提示符运行安装,并使用参数提供。
ConfigurationFile.iniConfigurationFile
如何使用配置文件准备和完成独立 SQL Server 实例的映像 (SysPrep)
-
准备一个或多个 SQL Server 实例并在同一台计算机上配置它们。
-
从安装中心的 高级 页面运行 SQL Server 独立实例的映像准备,并捕获准备映像配置文件。
-
使用与模板相同的 prepare image 配置文件来准备更多 SQL Server 实例。
-
从安装中心的 Advanced 页面运行准备好的 SQL Server 独立实例的运行映像完成,以在计算机上配置准备好的实例。
-
-
使用 Windows SysPrep 工具准备作系统的映像,包括未配置的 SQL Server 的已准备好实例。
-
从安装中心的 Advanced 页面运行 SQL Server 独立实例的映像准备,并捕获准备映像配置文件。
-
从安装中心的 Advanced 页面运行准备好的 SQL Server 独立实例的 Image completion (映像完成),但在捕获完整的配置文件后,在 Ready to Complete (准备完成) 页面上取消它。
-
完整的映像配置文件可以与 Windows 映像一起存储,以便自动配置准备好的实例。
-
如何使用配置文件安装 SQL Server 故障转移群集
-
集成安装选项(在节点上创建单节点故障转移群集,对于其他节点,请在其上运行):
AddNode-
运行 “Install a Failover Cluster” 选项并捕获列出所有安装设置的配置文件。
-
通过提供参数来运行命令行故障转移集群安装。
ConfigurationFile -
在要添加的其他节点上,运行以捕获适用于现有故障转移群集的文件。
AddNodeConfigurationFile.ini -
通过使用参数提供相同的配置文件,在将加入故障转移群集的所有其他节点上运行命令行 AddNode。
ConfigurationFile
-
-
高级安装选项(在所有故障转移群集节点上准备故障转移群集,然后在准备所有节点后,在拥有共享磁盘的节点上运行 complete):
-
在其中一个节点上运行 Prepare,然后捕获文件。
ConfigurationFile.ini -
提供相同的文件,以便在将为故障转移群集准备的所有节点上运行安装程序。
ConfigurationFile.ini -
准备好所有节点后,在拥有共享磁盘的节点上运行完整的故障转移群集作并捕获文件。
ConfigurationFile.ini -
然后,您可以提供此文件以完成故障转移群集。
ConfigurationFile.ini
-
如何使用配置文件向 SQL Server 故障转移群集添加或删除节点
- 如果您有一个配置文件,该文件以前用于向故障转移集群添加节点或从中移除节点,则可以重复使用该文件来添加或删除其他节点。
如何使用配置文件升级 SQL Server 故障转移群集
-
在被动节点上运行 upgrade 并捕获文件。您可以通过执行实际升级来执行此作,也可以在最后退出而不执行实际升级。
ConfigurationFile.ini -
在要升级的所有其他节点上,提供文件以完成该过程。
ConfigurationFile.ini
示例语法
以下是有关如何使用配置文件的一些示例:
- 要在命令提示符处指定配置文件:
Setup.exe /ConfigurationFile=MyConfigurationFile.ini
- 要在命令提示符处指定口令,而不是在配置文件中指定口令,请执行以下作:
Setup.exe /SQLSVCPASSWORD="************" /AGTSVCPASSWORD="************" /ASSVCPASSWORD="************" /ISSVCPASSWORD="************" /ConfigurationFile=MyConfigurationFile.ini
另请参阅
登录到 SQL Server 实例(命令提示符)
适用于: SQL Server
本主题介绍如何使用 sqlcmd 实用程序测试与 SQL Server 实例的连接。
登录到 SQL Server 的默认实例
-
在命令提示符下,输入以下命令以使用 Windows 身份验证进行连接:
sqlcmd [ /E ] [ /S servername ]
登录到 SQL Server 的命名实例
-
在命令提示符下,输入以下命令以使用 Windows 身份验证进行连接:

浙公网安备 33010602011771号