在 Linux 上安裝 SQL Server Java 語言延伸模組

適用於: Linux 及更新版本的 SQL Server 2019 (15.x)

了解如何在 Linux 上安裝適用於 SQL Server 的 Java 語言延伸模組元件。 Java 語言延伸模組從屬於 SQL Server 語言延伸模組,是資料庫引擎的附加元件。

雖然您可以同時安裝資料庫引擎和語言擴充功能,但最佳做法是先安裝和設定 SQL Server 資料庫引擎,以便在新增更多元件之前解決任何問題。

先決條件

  • Java 擴充套件位於 SQL Server Linux 原始碼倉庫中。 如果你已經為 資料庫引擎 安裝設定了原始碼儲存庫,請mssql-server-extensibility-java使用相同的 repo 註冊執行套件安裝指令。
  • Linux 容器上也支援語言擴充功能。 沒有內建語言擴充的預建容器,但你可以利用 GitHub 上的範例範本,從 SQL Server 容器建立一個。

  • 根據預設,系統會在 SQL Server 巨量資料叢集上安裝語言延伸模組與機器學習服務。 如果您使用的是巨量資料叢集,就不需要依照此文章中的步驟進行。

套件清單

在連網裝置上,你可以獨立於 資料庫引擎 下載和安裝套件,方法是使用每個作業系統的套件安裝程式。 下表描述所有可用套件。

封裝名稱 適用對象 Description
mssql-server-extensibility 所有語言 用於 Java 語言擴充的 Extensibility Framework
mssql-server-extensibility-java JAVA 擴充性框架用於擴展 Java 語言,並包含支援的 Java 執行時環境。

適用於:僅 Linux 上的 SQL Server 2019 (15.x)

安裝 JAVA 語言延伸模組

要在 Linux 上安裝 Language Extensions 和 Java,請安裝套件mssql-server-extensibility-java。 該套件會自動安裝 JRE 11(如果尚未安裝),並將 JVM 路徑加入一個名為 JRE_HOME. 的環境變數。

若要啟用 JAVA 語言延伸模組,請遵循 GitHub 上的 JAVA 語言延伸模組頁面的指示來建置自訂二進位檔。

Note

在連線到網際網路的伺服器上,套件相依性會作為主要套件安裝的一部分下載並安裝。 如果您的伺服器未連線到網際網路,請參閱離線安裝程式中的更多詳細資料。

你可以下載並安裝任何 Java 執行環境,包括最新的 Microsoft Build of OpenJDK 或官方授權的 Java 執行環境。 從 SQL Server 2022 (16.x) 開始,SQL 安裝程式不會安裝 JAVA 執行階段。

若要啟用 JAVA 語言延伸模組,請遵循 GitHub 上的 JAVA 語言延伸模組頁面的指示來建置自訂二進位檔。

Red Hat 安裝指令

要在 Red Hat 上安裝 Java 語言擴充功能,請使用以下指令。

Tip

如果可能,在安裝前先執行 yum clean all 來更新系統的套件。

# Install as root or sudo
sudo yum install mssql-server-extensibility-java

Ubuntu 安裝命令

要在 Ubuntu 上安裝 Language Extensions for Java,請使用以下指令。

Tip

如果可能,在安裝前先執行 apt-get update 來更新系統的套件。 有些 Ubuntu Docker 映像檔沒有包含這個 apt-transport-https 套件。 若要安裝它,請執行 apt-get install apt-transport-https

# Install as root or sudo
sudo apt-get install mssql-server-extensibility-java

SUSE 安裝命令

要在 SUSE 上安裝 Java 語言擴充,請使用以下指令。

# Install as root or sudo
sudo zypper install mssql-server-extensibility-java

安裝後設定(必需)

  1. 在 Linux 上授與權限

    如果您使用的是外部程式庫,則不需要執行此步驟。 推薦使用外部函式庫。 如需協助從檔案 jar 建立外部函式庫,請參見 CREATE EXTERNAL LIBRARY

    如果您不是使用外部程式庫,則必須提供 SQL Server 在您 jar 中執行 Java 類別的權限。

    要授權讀取與執行檔案,jar請執行以下chmod指令。jar 使用 SQL Server 時,務必將類別檔案放在 ajar。 如需建立 jar的說明,請參閱 從類別檔案建立 Java .jar 檔案

    chmod ug+rx <MyJarFile.jar>
    

    你也需要授權 mssql_satellite 讀取和執行檔案 jar

    chown mssql_satellite:mssql_satellite <MyJarFile.jar>
    

    其他設定主要是透過 mssql-conf 工具來設定。

  2. 新增用來執行 SQL Server 服務的 mssql 使用者帳戶。 如果你之前沒執行過這個設定,這步驟是必須的。

    sudo /opt/mssql/bin/mssql-conf setup
    
  3. 啟用輸出網路存取。 預設會停用輸出網路存取。 要啟用外送請求,請用工具mssql-conf設定outboundnetworkaccess布林屬性。 如需詳細資訊,請參閱使用 mssql-conf 在 Linux 上設定 SQL Server

    # Run as SUDO or root
    # Enable outbound requests over the network
    sudo /opt/mssql/bin/mssql-conf set extensibility outboundnetworkaccess 1
    
  4. 重新啟動 SQL Server Launchpad 服務和資料庫引擎執行個體,以從 INI 檔案讀取更新後的值。 當你修改與擴充性相關的設定時,會提醒你一個重新履歷訊息。

    systemctl restart mssql-launchpadd
    systemctl restart mssql-server.service
    
  5. 啟用外部腳本執行。 您可以使用任何熟悉的 SQL Server 用戶端工具連線到 SQL Server 執行個體,例如 sqlcmdSQL Server Management Studio (SSMS)Visual Studio Code 的 MSSQL 延伸模組

    EXECUTE sp_configure 'external scripts enabled', 1;
    
    RECONFIGURE WITH OVERRIDE;
    
  6. 重新啟動 mssql-launchpadd 服務。

  7. 對於每個想使用語言擴充的資料庫,請用 註冊外部語言。CREATE EXTERNAL LANGUAGE 請參考下一節的步驟。

註冊外部語言

對於每個想使用語言擴充的資料庫,請用 註冊外部語言。CREATE EXTERNAL LANGUAGE

下例範例會將稱為 Java 的外部語言新增至 Linux 上的 SQL Server 資料庫。

CREATE EXTERNAL LANGUAGE Java
FROM (
    CONTENT = N'/opt/mssql-extensibility/lib/java-lang-extension.tar.gz',
    FILE_NAME = 'javaextension.so',
    ENVIRONMENT_VARIABLES = N'{"JRE_HOME":"/opt/mssql/lib/zulu-jre-11"}'
);

對於 Java 擴充功能,環境變數JRE_HOME決定尋找並初始化 JVM 的路徑。

CREATE EXTERNAL LANGUAGE DDL 提供ENVIRONMENT_VARIABLES一個參數,用以設定承載擴充套件的程序的環境變數。 使用此參數來設定外部語言擴充所需的環境變數。

如需詳細資訊,請參閱CREATE EXTERNAL LANGUAGE

確認安裝

Java 功能整合不包含函式庫,但你可以執行grep -r JRE_HOME /etc以確認JRE_HOME環境變數是否存在。

若要驗證安裝,請執行 T-SQL 指令碼,以執行叫用 Java 的系統預存程序。 您需要此工作的查詢工具。 您可以使用任何熟悉的 SQL Server 用戶端工具連線到 SQL Server 執行個體,例如 sqlcmdSQL Server Management Studio (SSMS)Visual Studio Code 的 MSSQL 延伸模組

SQL Server 和 Java 語言延伸模組的完整安裝

若要在同一程序中安裝並設定 資料庫引擎 與 Java 語言擴充功能,請將 Java 套件與參數附加於安裝 資料庫引擎 的指令中。

  1. 提供包含資料庫引擎以及語言擴充功能的命令列。

    以下指令為 資料庫引擎 安裝增加 Java 擴充性。

    sudo yum install -y mssql-server mssql-server-extensibility-java
    
  2. 接受授權合約,並完成安裝後設定。 用工具 mssql-conf 吧。

    sudo /opt/mssql/bin/mssql-conf setup
    

    此步驟會提示您接受資料庫引擎授權合約、選擇版本,以及設定系統管理員密碼。

  3. 如果被要求重新啟動服務。

    sudo systemctl restart mssql-server.service
    

無人值守安裝

使用資料庫引擎的自動安裝,並新增 mssql-server-extensibility-java 的套件。

離線安裝

要安裝套件,請依照 離線安裝 的指示操作。 找到你的下載網站,然後下載本節後面列出的具體套件。

Tip

有幾個套件管理工具會提供指令,幫助你判斷套件相依關係。 對於 yum,請使用 sudo yum deplist [package]。 若是 Ubuntu,請使用 sudo apt-get install --reinstall --download-only [package name],後面接著 dpkg -I [package name].deb

下載網站

https://packages.microsoft.com/. 該網站同時承載所有 Java 套件與 資料庫引擎 套件。

下載路徑

Package 分配 下載位置
mssql/extensibility-java packages 紅帽8 https://packages.microsoft.com/rhel/8/mssql-server-2019/
mssql/extensibility-java packages SUSE v15 https://packages.microsoft.com/sles/15/mssql-server-2019/
mssql/extensibility-java packages Ubuntu 20.04 https://packages.microsoft.com/ubuntu/20.04/mssql-server-2019/pool/main/m/

套件清單

取決於您想要使用的擴充功能,下載適用於特定語言的必要套件。 確切的檔名會在後綴中包含平台資訊,但以下檔名有助於你決定要取得哪些檔案。

  • 核心套件

    • mssql-server-15.0.1000
    • mssql-server-extensibility-15.0.1000
  • JAVA

    • mssql-server-extensibility-java-15.0.1000

Limitations

Linux 上沒有隱含認證功能。 在外部程序中執行的 Java 程式碼無法回連線伺服器以存取資料或其他資源。

資源管理

Linux 和 Windows 在外部資源池的資源治理上有相當的平衡,但目前 Linux sys.dm_resource_governor_external_resource_pools 的統計數據有不同的單位。

Note

下表中的統計資料來自指定的控制群組(cgroups)子系統。

欄位名稱 Description Linux 上的值
peak_memory_kb 資源池所使用的最大記憶體。 在 Linux 上,此統計資料是來自 memory 子系統,其值為 memory.max_usage_in_bytes
write_io_count 自 Resource Governor 統計上次重置以來,所發出的總寫入 IO 次數。 在 Linux 上,此統計資料來自 blkio 子系統,其中寫入資料列上的值為 blkio.throttle.io_serviced
read_io_count 自 Resource Governor 統計上次重置以來,所發出的總讀取輸入輸出。 在 Linux 上,此統計資料來自子系統, blkio 讀取列的值為 blkio.throttle.io_serviced
total_cpu_kernel_ms 自 Resource Governor 統計上次重置以來,CPU 使用者核心的累積時間(以毫秒計)。 在 Linux 上,此統計資料來自 cpuacct 子系統,其中使用者資料列上的值為 cpuacct.stat
total_cpu_user_ms 自 Resource Governor 統計上次重置以來,累積的 CPU 使用者時間(以毫秒計)。 在 Linux 上,此統計數據來自 cpuacct 子系統,系統列的值為 cpuacct.stat
active_processes_count 在請求時正在執行的外部程序的數量。 在 Linux 上,此統計資料是來自 pids 子系統,其值為 pids.current