新闻详情

新闻详情

首页 / 资讯中心 / 详情

SQL Server 2019 内网脱机安装机器学习组件与卡点排查

发布时间:2026/9/18 10:49:41来源:尧图网络
SQL Server 2019 内网脱机安装机器学习组件与卡点排查
SQL Server 2019 这套东西装过的人都知道常规数据库引擎部分其实半小时就能搞定真正让人抓头的是微软把机器学习组件R、Python从安装介质里拆出去这件事。你可能已经试过内网机器上挂载 ISO功能选择页面勾上 Machine Learning Services (In-Database)顺手把 R 和 Python 也勾了点下一步——然后就没然后了进度条原地不动或者弹一句看不懂的提示。我之前在一个完全隔离的内网项目里连着踩了三次才把整个流程摸清楚。这篇就把 SQL Server 2019 的完整安装步骤、脱机安装 Microsoft 机器学习组件的正确做法以及下一步不能继续这个高频卡点的排查思路按我实际操作过的顺序完整记录一遍。内容适合正在内网环境部署 SQL Server 2019、准备开机器学习服务做数据建模的朋友也适合刚接手数据库运维、想把安装这一步打扎实的同学不管你之前有没有装过 SQL Server跟着走基本都能复现。1. 先把安装这件事拆开看你到底在装什么1.1 数据库引擎和机器学习组件其实是两套独立的东西很多人第一次装 SQL Server 2019 会产生一个误解以为勾选了机器学习服务就等于装了个插件。实际上不是这么回事。数据库引擎Database Engine Services是安装介质里自带的核心组件大概 1GB 出头而 Microsoft 机器学习组件包含了两套完整的语言运行时一套是基于 Anaconda 发行版的 Python 环境另一套是 Microsoft R Open / R Server 环境。这两套东西加起来超过 1.5GB并且它们根本不在 SQL Server 2019 的 ISO 安装介质里。安装程序在功能选择页面被勾上 R 或 Python 之后会在后台调用独立的组件安装器RSetup.exe 和 PythonSetup.exe或者对应的下载引导程序去微软的下载站点拉取这些运行时包。说得直白点SQL Server 的 setup.exe 在这里扮演的是一个包管理器的角色它自己不带货货要去外面取。想清楚这一点后面所有的现象就都能解释了内网机器没网取不到货进度自然卡住。注意这个外购行为从 SQL Server 2017 就开始了2019 沿用同一套机制。所以 2016 及以前能一把装完2017 之后就得考虑离线源的问题。1.2 微软为什么要把 R 和 Python 从介质里拆出去乍一看这是给用户添麻烦但站在产品迭代角度看这么做有几个现实理由理解了之后你也能预判它未来的行为。第一是体积SQL Server 的 ISO 已经接近 6GB再塞进去 1.5GB 的语言运行时安装介质会变得非常臃肿很多只装引擎的用户白白下载。第二是版本节奏不同步Python 和 R 的运行时会独立打补丁、独立升级版本如果打包进 ISO每次运行时小版本更新都要重新发布整个 SQL Server 介质成本太高。第三是组件复用同一台机器上如果装着多个 SQL Server 实例或者从 2017 升级到 2019这两套语言运行时可以共用不需要重复下载。这些推理不是说微软官方文档逐条这么写的而是基于它实际发布的组件结构和更新记录一名装过多次的 DBA 自然会得出的判断。对我们实操的意义在于既然组件是独立的那它就可以脱离主安装程序单独安装、单独修复、单独升级。这也是后面脱机方案能成立的根本前提。1.3 装之前先把版本和授权心里有数选错版本是新手最常犯的错装到一半发现功能缺失重装又得清理一堆注册表残留。SQL Server 2019 主要几个可用版本差异很明确版本机器学习服务授权成本适用场景Developer完整支持免费仅开发测试学习、开发、功能验证Express不支持免费小型生产、轻量应用Standard支持按核心授权中小型生产环境Enterprise完整支持含更多并行能力按核心授权大型生产、数据仓库自己练手、做 PoC、验证机器学习组件的安装流程用 Developer 版就够了功能上跟 Enterprise 完全一致唯一限制是授权条款不允许上生产。这个坑我见过有人踩拿 Developer 装了生产库审计的时候被拎出来。所以选版本这件事先看用途再看预算别一上来就默认全功能。2. 主程序安装全流程从挂载 ISO 到实例跑起来2.1 安装介质准备别急着点下一步拿到 ISO 之后第一步是校验完整性。下载中断、镜像损坏导致的安装失败排查起来最费时间。用 PowerShell 算一下哈希Get-FileHash -Path D:\SQLServer2019-x64-ENU.iso -Algorithm SHA256拿到的结果跟微软下载页面公布的 SHA256 对一遍一致再动手。然后是挂载方式的选择这里有个关键决定。如果你打算后面做脱机机器学习组件安装建议直接把 ISO 解压到本地目录而不是用虚拟光驱挂载。原因很直接脱机方案需要在安装介质的根目录下新建x64\R和x64\Python两个文件夹把离线 cab 包放进去。虚拟光驱是只读的你没法往里面写文件。解压出来之后这个目录既可以当安装源又可以当离线包目录一举两得。# 用 7-Zip 或类似工具解压或者用 PowerShell 挂载后复制 Expand-Archive -Path D:\SQLServer2019-x64-ENU.iso -DestinationPath D:\SQL2019_Media解压完检查一下根目录应该能看到setup.exe、x64文件夹、resources文件夹这些。看到setup.exe在根目录就说明介质结构没问题。2.2 功能选择页面这几个勾决定了你后面会不会卡双击setup.exe进到安装中心选全新 SQL Server 独立安装或向现有安装添加功能。前面几页是产品密钥、许可条款、微软更新检查这些都是常规操作。真正的分水岭在功能选择页面。这里你需要勾的Database Engine Services必选数据库核心Machine Learning Services (In-Database)勾上之后会展开 R、Python、Java 三个子项如果你不做报表和 ETLSQL Server Replication、Full-Text、Data Quality Services 这些可以按需关键来了一旦你勾了 Machine Learning Services 下面的 R 或 Python安装程序在你点下一步的时候就会触发前面说的外购行为。所以这个时候你有两个选择第一如果当前机器有外网让它自己下载装完再打补丁这条路最省事但也最看运气网络抖动一下就可能卡半天。第二如果机器在内网完全隔离千万别在这里跟着感觉走因为只要你勾了点下一步大概率卡住。正确做法是先去把离线包准备好放到位再回来勾这样安装程序检测到本地已有文件就不会再联网了。具体怎么准备第 4 章会完整展开。提示Java 语言扩展是 SQL Server 2019 才引入的勾选后需要指定 JRE 路径。它默认依赖 Azul Zulu OpenJDK如果你机器上已经装了标准 JDK需要留意版本兼容性别在两个 JDK 之间把环境变量搞乱。2.3 实例配置、服务账户和身份验证一步错后面全是坑过完功能选择接下来几页如果随手点后期运维会很难受。逐个说。实例配置默认实例MSSQLSERVER还是命名实例取决于你一台机器上要装几个 SQL Server。如果只装一个用默认实例最省心连接时不用带实例名。如果已经有一个旧实例那必须用命名实例不能重名。服务账户这一步很多人直接跳过用默认值。默认情况下SQL Server 各服务会用内置的虚拟账户比如NT Service\MSSQLSERVER。这种方式安全性好不需要密码也符合最小权限原则。只有当你的数据库需要访问网络共享、或者要跟域环境集成做备份、链接服务器时才考虑换成域账户。换成域账户记得提前把 SPN 注册好否则后面 Kerberos 认证会出问题。身份验证模式一定选混合模式SQL Server 和 Windows 身份验证并给 sa 设置一个强密码。纯 Windows 模式虽然更安全但一旦你的 Windows 账户出问题或者需要从非域机器连过来就会直接进不去。混合模式是留了一条后路的做法。数据目录规划这是我最想强调的一步。默认安装会把数据、日志、备份、临时库全部塞到 C 盘生产环境这是灾难。合理的做法是分盘目录类型建议位置理由数据文件 DataD 盘SSD 优先随机读写密集日志文件 LogE 盘顺序写与数据盘分离减少 IO 争抢备份 Backup独立盘或网络存储避免与数据盘同盘故障TempDB单独盘多文件高并发下减少争用这些目录最好在安装前就建好并给服务账户授予完全控制权限。装完再迁移会很麻烦。2.4 装完先做这几项验证别等出问题再回头安装程序跑完看到成功两个字别急着关。先做四项检查确认实例真的活着。第一打开服务管理器看SQL Server (MSSQLSERVER)和SQL Server 代理 (MSSQLSERVER)是否处于运行状态。代理默认可能是手动启动需要手动开启。第二用 SSMS 或者 Azure Data Studio 连一下执行SELECT VERSION;应该返回类似 Microsoft SQL Server 2019 (RTM-CUxx) ... 的字符串。如果连不上先看 TCP/IP 协议有没有启用再看防火墙 1433 端口。第三在命令提示符里确认端口监听netstat -ano | findstr :1433有 LISTENING 才说明实例在正常接收连接。第四检查错误日志有没有异常。日志位置C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Log\ERRORLOG里面如果有大段的 Login failed 或者 The SQL Server Network Interface library could not register the Service Principal Name就要及时处理。3. 脱机装机器学习组件卡住下一步的真实原因3.1 安装程序在你看不见的后台做了什么点了下一步之后界面只是短暂停顿但后台其实发生了好几件事理清楚这个链条你才知道为什么它卡住。第一步setup.exe 解析你勾选的机器学习组件识别出需要 R 和或Python 运行时。第二步它把这部分工作交给独立的子安装器R 组件走 RSetupPython 组件走 PythonSetup。第三步子安装器会先检查本地有没有可用的离线包比如安装介质x64\R、x64\Python目录下的 cab 文件。如果没有找到它就去微软的下载服务器拉取。第四步这个拉取动作需要完整的网络链路DNS 解析、TLS 握手、HTTP 下载。内网机器如果连 DNS 都出不去这里就会一直重试或超时。界面上表现出来的就是下一步按钮变灰、进度条卡住、或者干脆整个窗口无响应。所以下一步不能继续不是安装程序坏了是它在等一个永远不会来的网络响应。3.2 三种典型卡顿表现对应不同的根因根据我遇到的和同行反馈的情况这个卡点大致分三类现象最可能的原因判断依据点下一步后长时间无响应进度条不动下载超时正在重试任务管理器里 setup 进程 CPU 占用低但网络无流量弹窗提示无法下载所需文件网络完全不通提示里通常会带一个下载 URL提示连接被拒绝或证书错误代理、TLS 版本、防火墙拦截错误码大概是 0x80072xxx 这一类第三类里有个隐蔽情况有些内网虽然能出网但只放通了 80 端口而微软的下载走 HTTPS443或者要求 TLS 1.2 而老系统只开了 TLS 1.0结果一样是失败。这种时候你会觉得明明能上网为什么不行其实就是 TLS 层面的问题。3.3 复制 ISO 到内网机器为什么不管用这是最典型的误区。很多人第一反应是把整个 SQL Server ISO 拷到内网机器上觉得组件就在里面。不在。ISO 里只有引擎、SSAS、SSIS、SSRS 这些R 和 Python 的运行时是独立 CDN 分发的。你就算把 ISO 复制十份也没用安装程序照样会去联网找。真正要复制的是那些独立的离线组件包。这些包微软是单独提供下载的文件名有固定的命名规律下面一章会讲怎么找、怎么放。4. 脱机安装机器学习组件的完整实操4.1 先把离线包准备好放到安装介质的正确目录这一步是整篇的核心做对了后面就是一路顺风。首先在一台能上网的机器上去微软官方的下载中心找到 SQL Server 2019 对应的 R 和 Python 离线组件包。以 SQL Server 2019 RTM 为例这两个包的文件名大致是SRO_3.5.2.cabR 运行时和SPO_4.5.2.cabPython 运行时这种形式具体的小版本号会随累积更新变化一定要以你下载时官方页面标注的版本为准。如果找不到可以在 SQL Server 安装包下载页面的附加组件或Machine Learning Services 脱机安装相关章节里翻或者在微软的 Download Center 搜关键词。拿到两个 cab 文件后回到那台内网机器的 SQL Server 安装介质目录就是你前面解压出来的D:\SQL2019_Media在根目录下创建两个文件夹D:\SQL2019_Media\x64\R\ D:\SQL2019_Media\x64\Python\把 R 的 cab 放进x64\RPython 的 cab 放进x64\Python。注意不要改名安装程序是按文件名前缀识别的改了名字它可能就认不出来。注意目录层级一定是x64\R和x64\Python不是x64\MachineLearning\R。这个路径是安装程序的硬编码查找位置写错了它照样联网。4.2 重新跑安装或者用命令行静默装准备工作做完回到安装程序。这时候你有两种路径。路径一GUI 重装。如果之前那次卡住了先正常退出安装程序把失败的安装记录清理掉重新运行setup.exe走到功能选择页勾上 Machine Learning Services 和 R/Python点下一步。这次因为本地目录里有包安装程序会跳过下载直接本地解压安装。整个环节通常几分钟就能过。路径二命令行静默安装。适合批量部署或者脚本化场景。核心功能参数是ADVANCEDANALYTICS一个简化示例如下setup.exe /Q /ACTIONInstall /FEATURESSQLENGINE,ADVANCEDANALYTICS ^ /INSTANCENAMEMSSQLSERVER /SQLSVCACCOUNTNT Service\MSSQLSERVER ^ /SQLSYSADMINACCOUNTSBUILTIN\Administrators ^ /IACCEPTSQLSERVERLICENSETERMS注意这里的^是 Windows 命令行的续行符。如果用 PowerShell 写脚本换成反引号。参数里的账户、路径都要按你实际环境替换。命令行安装之前务必先在测试机上把参数跑通再上生产静默安装失败时的日志排查比 GUI 麻烦。4.3 装完立刻验证别等业务上来才发现问题组件装完用一段 T-SQL 直接测试外部脚本能不能跑EXEC sp_execute_external_script language NPython, script N result 1 1 print(Python 扩展运行正常结果为:, result) ;执行成功会返回一行输出。如果报错常见的有外部脚本已禁用需要开启配置项无法启动 SQL Server Launchpad 服务服务没起来或者账户权限不够开启外部脚本的配置命令EXEC sp_configure external scripts enabled, 1; RECONFIGURE WITH OVERRIDE;改完需要重启 SQL Server 实例才生效。这一点特别容易被忽略很多人改完没重启一直报错以为是自己装错了。另外去文件系统里确认一下 Python 环境目录确实生成了C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\PYTHON_SERVICES这个目录里有python.exe和一堆 site-packages说明 Python 运行时是真的落盘了。R 对应的是R_SERVICES目录。4.4 累积更新CU打完之后组件可能消失这是另一个隐藏坑。SQL Server 2019 从 RTM 到后面的累积更新版本一路在升。如果你先装 RTM 再打 CU某些 CU 会重新触发机器学习组件的安装流程。如果这时候你的离线包目录还在、还在原位那没问题如果你打完补丁把介质删了CU 安装到这里又会卡住——同样的原因它又要去联网找包。所以我的建议是离线组件包和解压后的安装介质长期保留一份在内网文件服务器上别用完就删。另外如果要把 RTMCU 一次性装完更省事的做法是使用微软提供的、已经集成好最新 CU 的安装介质SQL Server 安装中心里叫Slipstream或集成更新的方式这样组件版本一次到位不用二次折腾。5. 安装日志与常见问题速查5.1 日志到底在哪怎么读才不浪费时间安装出问题第一反应不该是重装而是看日志。SQL Server 安装日志的根目录是C:\Program Files\Microsoft SQL Server\150\Setup Bootstrap\Log\里面有一个Summary.txt是所有安装动作的概览先看它找 Failed 或者 Error 关键词定位到失败的那一步。深入到具体的时间戳子目录里Detail.txt是最详细的执行记录机器学习组件相关的错误通常能在这里看到下载 URL 和具体的错误码。除了主日志R 和 Python 子安装器还会在自己的安装目录或者临时目录留下日志比如RSetup.log、PythonSetup.log。这些文件里会明确写出它尝试访问了哪个地址、为什么失败。定位卡点的时候看到这些地址就能一眼确认是不是网络问题。5.2 高频报错和处理对照把最常见的几个问题整理成表按现象查原因能省不少时间报错或现象可能原因处理办法下一步无反应、卡住联网下载超时准备离线 cab 放 x64\R、x64\Python提示无法下载安装程序文件网络完全隔离同上走脱机方案0x80072EE7无法解析下载服务器地址检查 DNS 或走脱机方案0x80072F8FTLS/SSL 协议问题启用 TLS 1.2或走脱机方案外部脚本无法执行external scripts enabled 未开sp_configure 开启并重启实例Launchpad 服务启动失败服务账户权限或依赖缺失检查服务账户对程序目录的权限装完找不到 Python 目录组件实际未安装成功回看日志确认是否有下载失败记录这张表里前三行的处理办法是同一个脱机。这也从侧面说明在内网环境里脱机安装不是可选项是必选项。5.3 我自己踩过的坑顺手记一下坑一以为杀进程重来就行。卡住的时候直接结束 setup.exe 进程结果安装状态没清理干净第二次运行提示已存在挂起的安装操作还得手动去清注册表里的 PendingFileRenameOperations。正确做法是让它正常超时退出或者用安装中心的修复功能走一遍。坑二把 cab 放错层级。我一开始放在SQL2019_Media\MachineLearning\下面结果安装程序完全无视照样联网。后来翻日志才发现它只认x64\R和x64\Python。坑三只勾父项不勾子项。Machine Learning Services (In-Database) 勾上之后R 和 Python 是单独的子复选框。我第一次只勾了父项以为默认包含结果装完啥都没有。这个细节一定要看清楚。坑四装完忘了重启。开启 external scripts enabled 之后没重启实例测试报错以为是安装失败来回查了两个小时最后发现就差一次重启。别笑这个坑很常见。6. 装完之后基础加固与后续维护6.1 服务、端口和账号做最小化配置SQL Server 装完默认开启的服务不少生产环境按需裁一遍。比如 SQL Server Browser、某些诊断服务如果业务用不到可以停掉并改为手动启动减少攻击面。端口方面默认 1433 如果暴露在公网可达范围建议改端口或者用防火墙做白名单限制。SQL Server 配置管理器里的SQL Server 网络配置可以关掉不需要的协议只留 TCP/IP。账号权限上sa 账户不要日常使用建一个专用的管理账号按角色授权。机器学习服务相关的 Launchpad 服务账户保持默认的虚拟账户就好别为了方便改成 Administrator。6.2 备份和维护计划装完就该建数据库刚装完是最干净的时候也是建备份策略的最佳时机。至少一个完整备份 差异备份 事务日志备份的组合备份文件不要放在跟数据文件同一个物理盘上。SQL Server 代理里配置维护计划或者用 Ola Hallengren 那套脚本把索引重建、统计信息更新、完整性检查这些固定下来。TempDB 的配置也值得单独提一句。默认单文件、自动增长高并发下容易有争用。合理做法是按 CPU 核数配多个等大小的数据文件一般不超过 8 个并且设置固定大小避免频繁增长。6.3 机器学习服务后续还能怎么扩展装好 Python 和 R 之后这套环境可以做的事就多了。数据库内直接跑 Python 脚本做数据清洗、特征工程、调用 scikit-learn 训练模型结果直接落回表里省去了数据搬运。SQL Server 2019 还支持 Java 扩展可以用 Java 写自定义的扩展程序复用到数据库里。如果后面要上生产级的模型服务还可以考虑把训练好的模型通过 PREDICT 函数做批量推理。这些事情的前提都是安装这一步没有踩坑、组件是真的装全了。我个人在实际操作中的体会是内网环境装 SQL Server 2019 加机器学习组件脱机准备这四个字要提前想不能等到卡住了才回头。安装介质解压到本地、cab 包提前放到位、配置文件路径提前规划好这三件事做完整个安装过程就顺得像装个普通软件。反过来如果抱着先装着看看的心态卡在下一步的时候再去找包时间成本至少翻三倍。最后再分享一个小习惯每次装完把当时的安装介质目录、cab 包版本号、CU 版本、执行的配置命令整理成一份内部文档存好。等半年后要给另一台机器装或者要给领导解释环境的时候你会感谢当时的自己。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

IDEA 常用设置指南:编码、构建、内存与插件优化 2026/9/18 11:34:56

IDEA 常用设置指南:编码、构建、内存与插件优化

在 IDEA 里敲代码这件事,很多人是从"装完就用默认设置"开始的,然后一用就是好几年。默认配置不是不能用,它只是"平均意义上的能用"——照顾了所有人的最低共识,却没有照顾你的手感、你的项目结构、你的机器配…

阅读更多 →
Pandoc教程:Markdown、Word、PDF、HTML一键互转 2026/9/18 11:34:56

Pandoc教程:Markdown、Word、PDF、HTML一键互转

先说结论:如果你经常需要在 Markdown、Word、HTML、PDF 甚至 epub 之间来回转换文档,Pandoc 就是那个你迟早会装上、装上之后就再也离不开的工具。这货本质上是一个文档格式转换器,但它的能力早就超出了“转换”这两个字。你可以用 Markdown …

阅读更多 →
Fiddler抓包全攻略:电脑端、手机真机与雷电模拟器HTTPS解密实战 2026/9/18 11:34:56

Fiddler抓包全攻略:电脑端、手机真机与雷电模拟器HTTPS解密实战

问你个问题:你的手机App,每次打开都和后端服务器说了哪些“悄悄话”?换成工程师的说法,就是它发了什么请求、带了什么参数、拿到了什么返回。https抓包工具就是干这个的,把流量从设备里“请”出来,放到电脑…

阅读更多 →
CUDA异步传输实战:用流与事件消除数据传输瓶颈 2026/9/18 11:34:56

CUDA异步传输实战:用流与事件消除数据传输瓶颈

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
QMK Iron165 键盘移植实践:基于 STM32F072 的 Smith+Rune Iron165 矩阵、背光与键位配置 2026/9/18 11:34:56

QMK Iron165 键盘移植实践:基于 STM32F072 的 Smith+Rune Iron165 矩阵、背光与键位配置

QMK Iron165 键盘移植实践:基于 STM32F072 的 SmithRune Iron165 矩阵、背光与键位配置 【免费下载链接】qmk_firmware Open-source keyboard firmware for Atmel AVR and Arm USB families 项目地址: https://gitcode.com/GitHub_Trending/qm/qmk_firmware …

阅读更多 →
SpringBoot零侵入性能监控系统设计与实现 2026/9/18 11:31:53

SpringBoot零侵入性能监控系统设计与实现

1. 项目概述在当今企业级应用开发中,SpringBoot已经成为Java生态中最受欢迎的框架之一。然而随着业务规模扩大,性能问题往往成为最棘手的挑战。传统的性能监控方案通常需要修改应用代码或配置,这在生产环境中往往不可行。我们团队开发的这套系…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞