適用於: Linux 及更新版本的 SQL Server 2019 (15.x)
了解如何在 Linux 上安裝適用於 SQL Server 的 Java 語言延伸模組元件。 Java 語言延伸模組從屬於 SQL Server 語言延伸模組,是資料庫引擎的附加元件。
雖然您可以同時安裝資料庫引擎和語言擴充功能,但最佳做法是先安裝和設定 SQL Server 資料庫引擎,以便在新增更多元件之前解決任何問題。
先決條件
你的 Linux 發行版必須支援 SQL Server。 容器會在後面的子彈中單獨涵蓋。 支援的發行版包括:
你需要一個查詢編輯器來執行 Transact-SQL(T-SQL)指令,方便安裝後的設定和驗證。 我們推薦 Visual Studio Code 的 MSSQL 擴充功能。 它是免費下載,能在 Linux 上運行。
- 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
安裝後設定(必需)
在 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 工具來設定。
新增用來執行 SQL Server 服務的
mssql使用者帳戶。 如果你之前沒執行過這個設定,這步驟是必須的。sudo /opt/mssql/bin/mssql-conf setup啟用輸出網路存取。 預設會停用輸出網路存取。 要啟用外送請求,請用工具
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重新啟動 SQL Server Launchpad 服務和資料庫引擎執行個體,以從 INI 檔案讀取更新後的值。 當你修改與擴充性相關的設定時,會提醒你一個重新履歷訊息。
systemctl restart mssql-launchpadd systemctl restart mssql-server.service啟用外部腳本執行。 您可以使用任何熟悉的 SQL Server 用戶端工具連線到 SQL Server 執行個體,例如 sqlcmd、 SQL Server Management Studio (SSMS) 或 Visual Studio Code 的 MSSQL 延伸模組。
EXECUTE sp_configure 'external scripts enabled', 1; RECONFIGURE WITH OVERRIDE;重新啟動
mssql-launchpadd服務。對於每個想使用語言擴充的資料庫,請用 註冊外部語言。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 執行個體,例如 sqlcmd、 SQL Server Management Studio (SSMS) 或 Visual Studio Code 的 MSSQL 延伸模組。
SQL Server 和 Java 語言延伸模組的完整安裝
若要在同一程序中安裝並設定 資料庫引擎 與 Java 語言擴充功能,請將 Java 套件與參數附加於安裝 資料庫引擎 的指令中。
提供包含資料庫引擎以及語言擴充功能的命令列。
以下指令為 資料庫引擎 安裝增加 Java 擴充性。
sudo yum install -y mssql-server mssql-server-extensibility-java接受授權合約,並完成安裝後設定。 用工具
mssql-conf吧。sudo /opt/mssql/bin/mssql-conf setup此步驟會提示您接受資料庫引擎授權合約、選擇版本,以及設定系統管理員密碼。
如果被要求重新啟動服務。
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.1000mssql-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 |