Windows server 中 静默安装SQL SERVER 数据库 命令 参数

news/2025/3/15 19:15:57/文章来源:https://www.cnblogs.com/suv789/p/18774078

这篇文章记录一下自己如何在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-WinSystemLocaleLCID             Name             DisplayName
----             ----             -----------
2052             zh-CN            中文(简体,中国)PS C:\> Get-WinUserLanguageListLanguageTag     : zh-Hans-CN
Autonym         : 中文(中华人民共和国)
EnglishName     : Chinese
LocalizedName   : 中文(简体,中国)
ScriptName      : 中文(简体)
InputMethodTips : {0804:{81D4E9C9-1D3B-41BC-9E6C-4B40BF79E35E}{FA550B04-5AD7-411F-A5AC-CA038EC515D7}}
Spellchecking   : True
Handwriting     : TruePS 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:\> $wmiConnectionSettings : Microsoft.SqlServer.Management.Smo.Wmi.WmiConnectionInfo
Services           : {MSSQLFDLauncher, MSSQLSERVER, SQLBrowser, SQLSERVERAGENT}
ClientProtocols    : {}
ServerInstances    : {MSSQLSERVER}
ServerAliases      : {}
Urn                : ManagedComputer[@Name='WWW']
Name               : WWW
Properties         : {}
UserData           :
State              : ExistingPS C:\> $uri = "ManagedComputer[@Name='WWW']/ ServerInstance[@Name='MSSQLSERVER']/ServerProtocol[@Name='Tcp']"
PS C:\> $Tcp = $wmi.GetSmoObject($uri)
PS C:\> $TcpParent              : 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=IsEnabled/Type=System.Boolean/Writable=True/Value=True}
UserData            :
State               : CreatingPS C:\>

以上代码可以看到我们已经启用了tcp协议了,如果没有启用的话,可以看到IsEnabled : False, 这时候我们可以使用如下的语句进行更改:

PS C:\> $Tcp.IsEnabled = $true
PS C:\> $Tcp.Alter()
PS C:\> $TcpParent              : 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=IsEnabled/Type=System.Boolean/Writable=True/Value=True}
UserData            :
State               : CreatingPS C:\>

到这里我们已经配置了SQL Servertcp协议了。但是需要注意的是,Tcp的连接端口是否配置了1433, 或者仅仅是使用动态端口,我们可以继续使用如下的命令查看:

PS C:\> $wmi.GetSmoObject($uri + "/IPAddress[@Name='IPAll']").IPAddressPropertiesName       : 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']").IPAddressPropertiesName       : 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:\> $NpParent              : 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=IsEnabled/Type=System.Boolean/Writable=True/Value=False}
UserData            :
State               : CreatingPS C:\> $Np.IsEnabled = $true
PS C:\> $Np.Alter()
PS C:\> $NpParent              : 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=IsEnabled/Type=System.Boolean/Writable=True/Value=True}
UserData            :
State               : CreatingPS 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>

到这里就全部结束了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/899334.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(3).工厂方法模式

我们接上一个模式的实例: (1).创建水果接口 IFruit:1 namespace 工厂方法模式2 {3 public interface IFruit4 {5 /// <summary>6 /// 水果的单价7 /// </summary>8 double Amount { get; }9 10 11 /// <s…

nestjs Provider

Nest 实现了 IoC 容器,会从入口模块开始扫描,分析 Module 之间的引用关系,对象之间的依赖关系,自动把 provider 注入到目标对象以上部分只是简写{provide: AppService,useClass: AppService }两种注入方式构造器注入属性注入全局模块一般来说,我们都是在需要导出的模块的m…

FastAPI+CrewAI+MySQL+Celery实现AI Agent复杂工作流

FastAPI+CrewAI+MySQL+Celery实现AI Agent复杂工作流 https://github.com/fanqingsong/CrewAIFlowsFullStack本项目主要实现使用FastAPI后端框架+CrewAI实现AI Agent复杂工作流。代码实现CrewAI的Flows功能,并支持Flow运行中间结果进行持久化存储和查询(MySQL),支持多Flow并行…

石家庄地铁收费app

先建立一个项目,项目结构如图所示先编写app页面activity_main.xml,包括其输入框和按钮<TextViewandroid:id="@+id/tvStartStation"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="起点站&quo…

[WSNesting 设置说明] 数控钻加工限制-不使用加工限制-自动连线

版权声明本博客所有的原创文章,作者皆保留版权。转载必须包含本声明,保持本文完整,并以超链接形式注明作者 BensonLaur 和本文原始地址:

Git更新子模块

1.问题 如图,我们从GitHub上克隆下来一个库,内部还有类似这种右边蓝色S的表示的是该工程的子模块部分,一般初始为空,导致错误2.解决 我们需要用git submodule update --recursive --remote命令去更新初始化我们的子模块

pycharm2024下载安装一键激活2099年

​软件包和激活工具下载地址,关地球号:QStockView,发送pycharm,立刻发给你,全免费; 激活之后如下: 激活方式,打开压缩包,然后找到下面的文件,双击打开提示成功,之后,就可以了;去重新打开pycharm,就可以了; 中文设置如下: 添加图片注释,不超过 140 字(可选…

日期问题中的格式控制

define _CRT_SECURE_NO_WARNINGS include <stdio.h> include <string.h> using namespace std; void NextDay(int &year, int &month, int &day) { //存储一下月份和天数的关系 int dayOfMonth[] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 }; int is…

Windows管理小工具

Windows 管理小工具 概述 Windows 管理小工具 是一个基于批处理脚本的多功能工具,旨在帮助用户快速管理 Windows 系统中的常见设置和功能。通过简单的菜单操作,用户可以轻松完成 Windows 11 右键菜单管理、桌面图标小箭头管理、卸载 Windows 11 小组件、安装 Office、激活 Wi…

2025.3.11 php登录,连接数据库

1,$GET和$POST的区别 2, 3, 4, 5,HTML不能直接从编辑器上打开

Vue2学习5-v-model原理、表单类组件封装及v-model简化、.sync修饰符 、ref和$refs、$nextTick、自定义指令(全局、局部)、插槽(默认、具名)及商品列表案例

Vue2 v-model原理 v-model本质就是一个语法糖(一种编程语言的语法特性,允许以更简洁、易读的方式表达某些操作) 例如在输入框中,是value属性和input事件的合并 作用:实现数据的双向绑定数据变,视图跟着变视图变,数据跟着变例: $event可以获取事件的形参 <template&g…

Vue2学习5-

Vue2 v-model原理 v-model本质就是一个语法糖(一种编程语言的语法特性,允许以更简洁、易读的方式表达某些操作) 例如在输入框中,是value属性和input事件的合并 作用:实现数据的双向绑定数据变,视图跟着变视图变,数据跟着变例: $event可以获取事件的形参 <template&g…