通过


SQL Server on Linux:已知问题

以下各节介绍SQL Server on Linux的已知问题。

常规

下表列出了SQL Server on Linux最常见的问题。

问题 解决方案
安装SQL Server的主机名的长度需要 15 个字符或更少。 将名称 /etc/hostname 更改为长度等于或小于 15 个字符的值。
手动设置系统时间后退会导致SQL Server停止在Database Engine内更新内部系统时间。 重启SQL Server。
仅支持单个实例安装。 如果希望在给定主机上安装多个实例,请考虑使用虚拟机Linux 容器
SQL Server Configuration Manager无法连接到SQL Server on Linux。 无。
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 Database Engine未正确验证已签名 .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

  • 传输层安全性的某些算法(密码套件)不适用于SQL Server on Linux。 这会导致尝试连接到SQL Server时连接失败,在高可用性组中的副本之间建立连接时出现问题。

    若要解决此问题,请按照以下步骤修改 SQL Server on Linux mssql.conf 配置脚本以禁用有问题的密码套件:

    1. 将以下部分添加至 /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
      
    2. 使用以下命令重启SQL Server。

      sudo systemctl restart mssql-server
      
  • 无法将使用 In-Memory OLTP 的 SQL Server 2014 (12.x) 数据库从 Windows 还原到运行 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 版本。 有关详细信息,请参阅修复:执行 RESTORE LOG 或 RESTORE DATABASE 期间发生错误 3241

    使用较早的 CU 版本 SQL Server 2019(15.x)创建的Transparent Data Encryption(TDE)压缩备份,仍可通过使用 SQL Server 2019(15.x) CU 16 及更高版本进行还原。

  • 在 Ubuntu 22.04 上安装 SQL Server 2022 (16.x),可能会看到以下错误消息:Failed to start Microsoft SQL Server Database Engine。 如果查看错误日志,你会看到系统数据库的路径不正确。

    要解决此问题,请在单用户模式下启动实例,并使用 ALTER DATABASE ... MODIFY FILE 将系统数据库的已配置位置移动至默认位置 /var/opt/mssql/data。 进行此更改后,重启服务。

网络

如果满足以下两个条件,则涉及来自 sqlservr 进程的出站 TCP 连接(如链接服务器、PolyBase 或可用性组)的功能可能不起作用:

  • 目标服务器被指定为主机名而不是 IP 地址。

  • 源实例已在内核中禁用 IPv6。 要验证系统是否在内核中启用了 IPv6,以下所有测试都必须通过:

    • cat /proc/cmdline 将打印当前内核的引导命令行。 输出不得包含 ipv6.disable=1
    • /proc/sys/net/ipv6/ 目录必须存在。
    • 调用 socket(AF_INET6, SOCK_STREAM, IPPROTO_IP) 的 C 程序应成功,即系统调用必须返回一个 fd != -1 并且不会因 EAFNOSUPPORT 而失败。

确切的错误取决于功能特性。 对于关联服务器,您可能会看到登录超时错误。 对于可用性组,备用节点上的 ALTER AVAILABILITY GROUP JOIN DDL 将在 5 分钟后因 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 选项。

本地化

  • 如果在安装过程中区域设置不是英语 (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 上安装 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 或 connection string 来连接到 ODBC 数据;也可以使用 Windows 身份验证。 有关详细信息,请参阅宣布 Linux 上的 ODBC 支持的博客文章

在 Linux 上运行 SSIS 包时,此版本不支持以下功能:

  • 集成服务目录数据库
  • 由SQL Server代理调度的包执行
  • Windows身份验证
  • 第三方组件
  • 变更数据捕获 (CDC)
  • Integration Services 横向扩展
  • sSIS 的 Azure 功能包
  • Hadoop 和 HDFS 支持
  • 适用于 SAP BW 的 Microsoft 连接器

有关当前不受支持或提供有限支持的内置 SSIS 组件的列表,请参阅 Linux 上的 SSIS 的限制和已知问题

有关 Linux 上的 SSIS 的详细信息,请参阅以下文章:

SQL Server Management Studio (SSMS)

以下限制适用于连接到SQL Server on Linux的Windows上的SQL Server Management Studio。

  • 不支持维护计划。

  • 不支持管理数据仓库 (MDW) 和 SQL Server Management Studio 下的数据收集器。

  • 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) 包,在安装 Machine Learning 服务之前,需要考虑一些先决条件cgroup-v1

  1. 作为先决条件,需要根据 Red Hat 的《在 Red Hat Enterprise Linux 9 中使用 cgroupfs 手动管理 cgroups》启用 cgroup-v1

  2. 然后按照说明安装 SQL Machine Learning Services,如前所述。

  3. 禁用网络命名空间隔离。

    sudo /opt/mssql/bin/mssql-conf set extensibility outboundnetworkaccess 1
    
  4. 重启 mssql-launchpadd 服务,使这些更改生效。

    sudo systemctl restart mssql-launchpadd
    

SQL Server 2025 中的已知问题

以下问题影响 SQL Server 2025 (17.x)。

SQL Server on Linux无法在具有混合 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(包括 WSL)上的Hyper-V),则不会受到影响。

Linux作系统不支持本地 ONNX 模型

CREATE EXTERNAL MODEL直接托管在 SQL Server 上的本地 ONNX 模型当前不适用于 Linux 上的 SQL Server 2025(17.x)。