Linux 上的 SQL Server:已知問題

下列各節描述 Linux 上的 SQL Server 的已知問題。

一般

下表會列出 Linux 上的 SQL Server 最常見的問題。

問題 解決方案
SQL Server 安裝位置的主機名稱長度必須等於或少於 15 個字元。 /etc/hostname 中的名稱變更為長度等於或小於 15 個字元的值。
手動將系統時間設定成過去的時間會造成 SQL Server 停止更新資料庫引擎內的內部系統時間。 重新啟動 SQL Server。
僅支援單一執行個體安裝。 如果您想要在指定的主機上有多個執行個體,請考慮使用虛擬機器Linux 容器
SQL Server 組態管理員無法連線到 Linux 上的 SQL Server。 無。
sa 登入的預設語言是英文。 使用 ALTER LOGIN 陳述式來變更 sa 登入的語言。
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

  • 某些適用於「傳輸層安全性」(TLS) 的演算法 (加密套件) 在 Linux 的 SQL Server 上正常運作。 這除了會導致在高可用性群組中的複本之間建立連線時發生問題,也會導致在嘗試連線至 SQL Server 時發生連線失敗。

    若要解決此問題,執行下列動作,修改 Linux 上的 SQL Server 的 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
      
  • Windows 上使用記憶體內部 OLTP 的 SQL Server 2014 (12.x) 資料庫無法在 Linux 上的 SQL Server 進行還原。 如果您的 SQL Server 2014 (12.x) 資料庫使用記憶體內部 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

    使用 SQL Server 2019 (15.x) 的舊版 CU 製作的透明資料加密 (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 列印目前核心的開機 cmdline。 輸出不得包含 ipv6.disable=1
    • /proc/sys/net/ipv6/ 目錄必須存在。
    • 呼叫 socket(AF_INET6, SOCK_STREAM, IPPROTO_IP) 的 C 程式應該成功;syscall 必須傳回 fd != -1 且未因 EAFNOSUPPORT 而發生失敗。

確切的錯誤需視功能而定。 針對連結的伺服器,您會看到登入逾時錯誤。 就可用性群組而言,次要複本上的 ALTER AVAILABILITY GROUP JOIN DDL 會在五分鐘後因 download configuration timeout 錯誤而發生失敗。

若要暫時解決此問題,請使用下列其中一個選項:

  • 使用 IP 而不是主機名稱來指定 TCP 連線的目標。

  • 從開機命令列中移除 ipv6.disable=1 以在核心中啟用 IPv6。 執行方式取決於 Linux 發行版本和開機載入器 (例如 grub)。 如果想要停用 IPv6,您仍然可以透過在 sysctl 組態 (例如 /etc/sysctl.conf) 中設定 net.ipv6.conf.all.disable_ipv6 = 1 來停用。 雖然此設定讓系統的網路轉接卡無法取得 IPv6 位址,但可讓 sqlservr 功能正常運作。

不支援 TLS 1.3

適用於:僅限 SQL Server 2022 (16.x)。

雖然 Windows 版 SQL Server 2022 (16.x) 支援 TLS 1.3,但您必須在 Linux 上使用 TLS 1.2。

網路檔案系統 (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。 新版本為 [<Name> 版本]。

    此字串輸出僅供資訊之用,不會影響 SQL Server 的成功安裝。

此版本並未提供所有篩選條件,包括適用於 Microsoft Office 文件的篩選條件。 如需所支援篩選的清單,請參閱在 Linux 上安裝 SQL Server 全文檢索搜尋

SQL Server Integration Services (SSIS)

SUSE Linux Enterprise Server (SLES) 上不支援 mssql-server-is 套件。 在 Ubuntu 和 Red Hat Enterprise Linux (RHEL) 上支援套件。

Integration Services 套件可以在 Linux 上使用 ODBC 連線。 此功能已經過 SQL Server 和 MySQL ODBC 驅動程式的測試,但也應該能夠與任何遵循 ODBC 規格的 Unicode ODBC 驅動程式搭配使用。 在設計階段,您可以提供 DSN 或連接字串來連接到 ODBC 資料;您也可以使用 Windows 驗證。 如需詳細資訊,請參閱宣佈在 Linux 上提供 ODBC 支援的部落格文章 \(英文\)。

在 Linux 上執行 SSIS 套件時,此版本不支援下列功能:

  • Integration Services 目錄資料庫
  • SQL Server Agent 排定的套件執行
  • Windows 驗證
  • 協力廠商元件
  • 異動資料擷取 (CDC)
  • Integration Services Scale Out
  • 適用於 SSIS 的 Azure Feature Pack
  • Hadoop 和 HDFS 支援
  • Microsoft Connector for SAP BW

如需目前不支援或支援但有限制的內建 SSIS 元件清單,請參閱 Linux 上的 SSIS 限制和已知問題

如需有關 Linux 上 SSIS 的詳細資訊,請參閱下列文章:

SQL Server Management Studio (SSMS)

下列限制適用於連線到 Linux 上的 SQL Server 之 Windows 上的 SQL Server Management Studio。

  • 不支援維護計劃。

  • 不支援 SQL Server Management Studio 中的管理資料倉儲 (MDW) 和資料收集器。

  • 具有 Windows 驗證或 Windows 事件記錄檔選項的 SQL Server Management Studio UI 元件無法與 Linux 搭配使用。 您仍然可以將這些功能與其他選項搭配使用,例如 SQL Server 登入。

  • 無法修改要保留的記錄檔數目。

高可用性和災害復原

適用於:僅限 SQL Server 2022 (16.x)。

針對 RHEL 9 和 Ubuntu 22.04 的 SQL Server 2022 (16.x) 套件,當您使用 Pacemaker 啟用 HA/DR 堆疊時,可能會遇到自動和手動容錯移轉的問題。 這些問題目前僅限於 Pacemaker HA 堆疊。 其他 HA 堆疊,包括 HPE Serviceguard 和 DH2i DxEnterprise,沒有這些問題。

可用性群組會持續切換主要角色

在 RHEL 8、Ubuntu 20.04 和更新版本中,在 SQL Server 2022 (16.x) 中使用可用性群組 (AG) 時,您可能會遇到 AG 中主要角色持續從一個節點切換到另一個節點的情況。 目前,您可以使用下列步驟來解決該問題:

  1. ag_cluster 資源屬性 failure-timeout 更新為 0s

    pcs resource update ag_cluster meta failure-timeout=0s
    

    如需相關資訊,請參閱設定 SQL Server 可用性群組的 Pacemaker 叢集

  2. 重設 Pacemaker 叢集上的失敗計數:

    crm_failcount -r ag_resource_name -delete
    

機器學習服務

適用於:僅限 SQL Server 2022 (16.x)。

針對 RHEL 9 和 Ubuntu 22.04 的 SQL Server 2022 (16.x) 套件,在安裝 Machine Learning services 之前,必須先考慮 cgroup-v1 的一些必要條件。

  1. 作為必要條件,必須根據 Red Hat 的使用 cgroupfs 手動管理 cgroups Red Hat Enterprise Linux 9,啟用 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