以下各节介绍Linux 上的 SQL Server的已知问题。
常规
下表列出了Linux 上的 SQL Server最常见的问题。
| 问题 | 解决方法 |
|---|---|
| 安装SQL Server的主机名长度必须为15个字符或更短。 | 将名字 /etc/hostname 改成15个字符长或更短的值。 |
| 手动将系统时间设置反向会导致 SQL Server 停止在 数据库引擎 内更新内部系统时间。 | 重启SQL Server。 |
| 仅支持单个实例安装。 | 要在同一主机上有多个实例,可以考虑使用 虚拟机 或 Linux容器。 |
| SQL Server 配置管理器无法连接到Linux 上的 SQL Server。 | Linux 不支持Configuration Manager。 请改用 mssql-conf 管理在 Linux 上运行的 SQL Server。 |
sa 帐户的默认语言为英语。 |
使用 sa 语句更改 ALTER LOGIN 帐户的语言。 |
OLE DB 提供程序记录以下警告:Failed to verify the Authenticode signature of 'C:\binn\msoledbsql.dll'. Signature verification of SQL Server DLLs will be skipped. Genuine copies of SQL Server are signed. Failure to verify the Authenticode signature might indicate that this isn't an authentic release of SQL Server. Install a genuine copy of SQL Server or contact customer support. |
无需执行任何操作。 OLE DB提供商使用SHA256签名。 SQL Server 数据库引擎未正确验证已签名 .dll。 |
重置密码命令会 mssql-conf 报错:Unable to set the system administrator password. Please consult the ERRORLOG in /path for more information. |
错误消息为误报。 密码重置成功后,你可以继续使用新密码。 适用于:仅 SQL Server 2022(16.x)容器镜像。 |
数据库
你不能用
mssql-conf工具移动master数据库。 你可以用 移动其他系统数据库。mssql-conf还原在Windows上SQL Server备份的数据库时,必须在 Transact-SQL 语句中使用
WITH MOVE子句。 有关详细信息,请参阅 使用备份和还原将SQL Server数据库从 Windows 迁移到 Linux。传输层安全性的某些算法(密码套件)不适用于Linux 上的 SQL Server。 这种行为会导致连接失败,尤其是在尝试连接 SQL Server 时,以及在高可用性组中建立副本连接的问题。
为解决此问题,修改
mssql.confLinux 上 Linux 上的 SQL Server 的配置脚本,禁用有问题的密码套件:将以下部分添加至
/var/opt/mssql/mssql.conf。 感叹号 (!) 否定表达式。 该否定告诉OpenSSL不要使用后续的密码套件。[network] tlsciphers=AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:!ECDHE-RSA-AES128-GCM-SHA256:!ECDHE-RSA-AES256-GCM-SHA384:!ECDHE-ECDSA-AES256-GCM-SHA384:!ECDHE-ECDSA-AES128-GCM-SHA256:!ECDHE-ECDSA-AES256-SHA384:!ECDHE-ECDSA-AES128-SHA256:!ECDHE-ECDSA-AES256-SHA:!ECDHE-ECDSA-AES128-SHA:!ECDHE-RSA-AES256-SHA384:!ECDHE-RSA-AES128-SHA256:!ECDHE-RSA-AES256-SHA:!ECDHE-RSA-AES128-SHA:!DHE-RSA-AES256-GCM-SHA384:!DHE-RSA-AES128-GCM-SHA256:!DHE-RSA-AES256-SHA:!DHE-RSA-AES128-SHA:!DHE-DSS-AES256-SHA256:!DHE-DSS-AES128-SHA256:!DHE-DSS-AES256-SHA:!DHE-DSS-AES128-SHA:!DHE-DSS-DES-CBC3-SHA:!NULL-SHA256:!NULL-SHA使用以下命令重启SQL Server。
sudo systemctl restart mssql-server
你无法在使用 OLTP SQL Server In-Memory Windows 上恢复 2014(12.x)数据库Linux 上的 SQL Server。 如果 SQL Server 2014 (12.x) 数据库使用 In-Memory OLTP,请先将数据库升级到 Windows 上较新版本的 SQL Server。 然后,用备份/还原或拆卸/连接,把它移到Linux 上的 SQL Server。
Linux 目前不支持用户
ADMINISTER BULK OPERATIONS权限。你无法将使用 SQL Server 2019(15.x)CU 16 及以后版本制作的 透明数据加密(TDE)压缩备份恢复到之前的 SQL Server 2019(15.x)CU 版本。 有关详细信息,请参阅 FIX:执行 RESTORE LOG 或 RESTOREDATABASE 时发生错误 3241。
你仍然可以使用 SQL Server 2019(15.x)CU 16 及以后版本恢复使用 SQL Server 2019 (15.x) 之前 CU 版本制作的 TDE 压缩备份。
在 Ubuntu 22.04 上安装 SQL Server 2022 (16.x),可能会看到以下错误消息:
Failed to start Microsoft SQL Server 数据库引擎。 如果查看错误日志,你会看到系统数据库的路径不正确。要解决此问题,请在单用户模式下启动实例,并使用
ALTER DATABASE ... MODIFY FILE将系统数据库的已配置位置移动至默认位置/var/opt/mssql/data。 完成更改后,重启服务。
网络
涉及进程出站TCP连接 sqlservr 的功能,如链接服务器、PolyBase或可用性组,如果同时满足以下两种条件,可能无法使用:
目标服务器被指定为主机名而不是 IP 地址。
源实例已在内核中禁用 IPv6。 要验证系统是否在内核中启用了 IPv6,以下所有测试都必须通过:
-
cat /proc/cmdline将打印当前内核的引导命令行。 输出不得包含ipv6.disable=1。 -
/proc/sys/net/ipv6/目录必须存在。 - 调用的C程序
socket(AF_INET6, SOCK_STREAM, IPPROTO_IP)应该能成功。 系统调用必须返回 ,fd != -1且不得失败。EAFNOSUPPORT
-
确切的错误取决于功能特性。 对于关联服务器,您可能会看到登录超时错误。 对于可用组, ALTER AVAILABILITY GROUP JOIN 次级的DDL在五分钟 download configuration timeout 后会因错误失效。
若要解决此问题,请使用下列选项之一:
使用 IP 而不是主机名来指定 TCP 连接的目标。
从引导命令行中删除
ipv6.disable=1,在内核中启用 IPv6。 方法取决于 Linux 发行版和引导加载程序,例如“grub”。 如果希望禁用 IPv6,仍可通过在net.ipv6.conf.all.disable_ipv6 = 1配置中设置sysctl来禁用它(例如/etc/sysctl.conf)。 尽管此设置会阻止系统的网络适配器获取 IPv6 地址,但允许sqlservr功能运行。
SQL Server 2022 不支持 TLS 1.3
适用于:仅 SQL Server 2022(16.x)。
尽管 SQL Server 2022(16.x)支持Windows的 TLS 1.3,但必须在 Linux 上使用 TLS 1.2。
注释
Ubuntu 22.04、Ubuntu 24.04、RHEL 9 和 RHEL 10 上支持 SQL Server 2025 (17.x)的 TLS 1.3。 TLS 1.3 默认处于启用状态。
网络文件系统 (NFS)
如果在生产中使用网络文件系统 (NFS) 远程共享,请注意以下支持要求:
使用 NFS 版本 4.2 或更高版本。 较早版本的 NFS 不支持现代文件系统常用的必需功能,例如
fallocate和稀疏文件创建。NFS挂载平台只
/var/opt/mssql支持目录。 不支持其他文件(如SQL Server系统二进制文件)。安装远程共享时,请确保 NFS 客户端使用
nolock选项。
使用Microsoft Entra身份验证进行 IPv6 连接
如果为 IPv6 启用了服务器或容器,请确保 IPv6 地址可访问且可路由。 如果未完全配置 IPv6,则对Microsoft Entra ID的身份验证请求可能会因无法访问的 IPv6 终结点而失败。
若要控制 SQL Server 2022 CU 19 及更高版本中的 IPv6 DNS 解析行为,请在 network.ipv6dnsrecordslimit 中设置 mssql-conf 选项。 有关详细信息,请参阅 network.ipv6dnsrecordslimit。
本地化
如果在安装过程中区域设置不是英语 (
en_us),则必须在 bash 会话/终端中使用 UTF-8 编码。 如果使用 ASCII 编码,可能会看到类似于以下输出的错误:UnicodeEncodeError:'ascii' 编解码器无法在位置 8 中对字符 u'\xf1' 进行编码:序号不在范围内 (128)
如果你不能用 UTF-8 编码,可以用环境变量运行设置
MSSQL_LCID来指定你的语言选择。sudo MSSQL_LCID=<LcidValue> /opt/mssql/bin/mssql-conf setup当你运行
mssql-conf setup并执行非英文版的SQL Server安装时,可能会在本地化文本“配置SQL Server...”之后看到错误的扩展字符。". 或者,对于非拉丁语的安装,句子可能完全丢失。 丢失的句子应显示以下本地化字符串:已成功处理授权权限识别符(PID)。 新版本为[<名称>版本]。
该字符串仅供参考,不影响SQL Server的安装。
全文搜索
并非所有筛选器都可用于此版本,包括用于Microsoft Office文档的筛选器。 有关支持的筛选器列表,请参阅 Linux 上的 Install SQL Server 全文搜索。
SQL Server Integration Services (SSIS)
mssql-server-is 包在 SUSE Linux Enterprise Server (SLES) 上不受支持。 该软件包支持Ubuntu和Red Hat Enterprise Linux(RHEL)。
Integration Services 包可使用 Linux 上的 ODBC 连接。 此功能适用于 SQL Server 和 MySQL ODBC 驱动,也应适用于任何遵守 ODBC 规范的 Unicode ODBC 驱动。 在设计时,提供DSN或连接字符串以连接ODBC数据;你也可以使用Windows 身份验证。 有关详细信息,请参阅宣布 Linux 上的 ODBC 支持的博客文章。
本版本在Linux上运行SSIS包时不支持以下功能:
- 集成服务目录数据库
- SQL Server 代理计划的程序包执行
- Windows身份验证
- 第三方组件
- 变更数据捕获 (CDC)
- Integration Services 横向扩展
- sSIS 的 Azure 功能包
- Hadoop 和 HDFS 支持
- 适用于 SAP BW 的 Microsoft 连接器
关于有限或无支持的内置SSIS组件列表,请参见Linux上SQL Server Integration Services(SSIS)的功能支持及考虑因素。
有关 Linux 上的 SSIS 的详细信息,请参阅以下文章:
- 博客文章宣布对 Linux 的 SSIS 支持。
- 在 Linux 上安装 SQL Server 集成服务 (SSIS)
- 使用 SSIS 在 Linux 上提取、转换和加载数据
SQL Server Management Studio (SSMS)
以下限制适用于连接到Linux 上的 SQL Server的Windows上的SQL Server Management Studio。
不支持维护计划。
不支持SQL Server Management Studio中的管理数据仓库(MDW)和数据收集器。
SQL Server Management Studio具有Windows身份验证或Windows事件日志选项的 UI 组件不适用于 Linux。 你仍然可以将这些功能与其他选项一起使用,例如 SQL Server 登录。
你无法修改要保留的日志文件数量。
高可用性和灾难恢复
适用于:仅 SQL Server 2022(16.x)。
运行 SQL Server 2022 (16.x) CU 16 及更低版本时,在 RHEL 9 上,作为启用了 SELinux 的受限应用程序,Pacemaker 群集可能无法按预期工作。 您必须将 SQL Server 2022(16.x)作为一个无限制应用安装,并开启 SELinux,才能使用 Pacemaker 集群功能。 此问题已在 2022 SQL Server 2022(16.x) CU 17 中解决。
机器学习服务
适用于:仅 SQL Server 2022(16.x)。
对于 RHEL 9 和 Ubuntu 22.04 的 SQL Server 2022(16.x)包,安装 机器学习 Services 前请考虑以下cgroup-v1先决条件。
作为前提,启用
cgroup-v1如 Using cgroupfs 中所述,手动管理 Red Hat Enterprise Linux 9 的 cgroups 。然后按照说明安装 SQL 机器学习 Services,如前所述。
禁用网络命名空间隔离。
sudo /opt/mssql/bin/mssql-conf set extensibility outboundnetworkaccess 1重启
mssql-launchpadd服务,使这些更改生效。sudo systemctl restart mssql-launchpadd
SQL Server 2025 中的已知问题
以下问题影响 SQL Server 2025 (17.x)。
Linux 上的 SQL Server无法在具有混合 CPU 体系结构的计算机上启动
Issue:如果计算机使用 Intel 12 Gen 或更高版本的混合体系结构 CPU,并且主机操作系统为 Linux,则 Linux 上的SQL Server实例可能无法启动。
你可能会看到类似于以下输出的错误消息:
Reason: 0x00000004 Message: ASSERT: Expression=(result * DrtlGetProcessorCoreCount() == DrtlGetProcessorCount()) File=LibOS\Windows\Kernel\SQLPal\common\dk\sos\src\sosnumap.cpp Line=208
如果要使用 Linux 主机作系统,可以通过在 BIOS 中禁用效率核心(E-cores)来解决此问题。 如果你用容器,或者Windows上用像 Hyper-V 这样的虚拟机监控器(包括WSL),这个问题就不会影响你。
Linux作系统不支持本地 ONNX 模型
直接托管在 SQL Server 上的 CREATE EXTERNAL MODEL 本地 ONNX 模型目前在 SQL Server 2025 (17.x) 的 Linux 版本上不可用。
相关内容
- Linux 上的 SQL Server 2022 的版本说明
- SQL Server 2022 在 Linux 上的版本和支持的功能
- 在 Linux 上排查 SQL Server 的问题