適用於:SQL Server 2019 (15.x) - Linux 及後續版本
了解如何在 Linux 上安裝適用於 SQL Server 的 Java 語言延伸模組元件。 Java 語言延伸模組從屬於 SQL Server 語言延伸模組,是資料庫引擎的附加元件。
雖然您可以同時安裝資料庫引擎和語言擴充功能,但最佳做法是先安裝和設定 SQL Server 資料庫引擎,以便在新增更多元件之前解決任何問題。
必要條件
Linux 版本必須受 SQL Server 支援,但不包含 Docker 引擎。 支援的版本包含:
您應該有執行 Transact-SQL (T-SQL) 命令的工具。 必須使用查詢編輯器進行安裝後設定和驗證。 我們推薦在 Linux 上執行的免費軟體 Azure Data Studio。
- Java 擴充功能的套件位置在 SQL Server Linux 來源存放庫中。 如果您已經為資料庫引擎安裝設定來源存放庫,您可以使用相同的存放庫登錄來執行
mssql-server-extensibility-java套件安裝命令。
Linux 容器上也支援語言擴充功能。 我們沒有提供含語言擴充功能的預先建立容器,但您可以使用 GitHub 上提供的範例範本,從 SQL Server 容器建立一個。
根據預設,系統會在 SQL Server 巨量資料叢集上安裝語言延伸模組與機器學習服務。 如果您使用的是巨量資料叢集,就不需要依照此文章中的步驟進行。 如需詳細資訊,請參閱對安裝有機器學習服務的 SQL Server 2019 巨量資料叢集執行 Python 與 R 指令碼。
套件清單
在連接到網際網路的裝置上,系統會使用每個作業系統的套件安裝程式,獨立於資料庫引擎下載和安裝套件。 下表描述所有可用套件。
| 套件名稱 | 適用於 | 描述 |
|---|---|---|
mssql-server-extensibility |
所有語言 | 用於 Java 語言擴充的 Extensibility Framework |
mssql-server-extensibility-java |
Java |
適用於:僅限 Linux 上的 SQL Server 2019 (15.x) 擴充性框架用於擴展 Java 語言,並包含支援的 Java 執行時環境。 |
安裝 JAVA 語言延伸模組
您可以藉由安裝 mssql-server-extensibility-java,在 Linux 上安裝語言擴充功能和 Java。 當您安裝 mssql-server-extensibility-java 時,套件會自動安裝 JRE 11 (如果尚未安裝)。 它也會將 JVM 路徑新增至名為 JRE_HOME 的環境變數。
若要啟用 JAVA 語言延伸模組,請遵循 GitHub 上的 JAVA 語言延伸模組頁面的指示來建置自訂二進位檔。
注意
在連線到網際網路的伺服器上,套件相依性會作為主要套件安裝的一部分下載並安裝。 如果您的伺服器未連線到網際網路,請參閱離線安裝程式中的更多詳細資料。
您可以視需要下載並安裝任何 JAVA 執行階段,包括最新 OpenJDK 的 Microsoft 組建或正式授權的 JAVA 執行階段。 從 SQL Server 2022 (16.x) 開始,SQL 安裝程式不會安裝 JAVA 執行階段。
若要啟用 JAVA 語言延伸模組,請遵循 GitHub 上的 JAVA 語言延伸模組頁面的指示來建置自訂二進位檔。
Red Hat 安裝指令
您可以使用下列命令,在 Red Hat 上安裝適用於 Java 的語言擴充功能。
提示
可能的話,請執行 yum clean all 以在安裝之前重新整理系統上的套件。
# Install as root or sudo
sudo yum install mssql-server-extensibility-java
Ubuntu 安裝命令
您可以使用下列命令,在 Ubuntu 上安裝適用於 Java 的語言擴充功能。
提示
可能的話,請執行 apt-get update 以在安裝之前重新整理系統上的套件。 此外,某些 Ubuntu 的 Docker 映像可能沒有 HTTPS apt 傳輸選項。 若要安裝它,請使用 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檔案的權限,請在 檔案上執行下列jar命令。 當您使用 SQL Server 時,建議您一律將類別檔案放在jar中。 如需建立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啟用輸出網路存取。 預設會停用輸出網路存取。 若要啟用輸出要求,請使用
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使用 Azure Data Studio 或 SQL Server Management Studio (僅限 Windows) 等執行 T-SQL 的另一種工具,來啟用外部指令碼執行。
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 來確認 JAVA_HOME 環境變數的建立。
若要驗證安裝,請執行 T-SQL 指令碼,以執行叫用 Java 的系統預存程序。 您需要此工作的查詢工具。 Azure Data Studio 是不錯的選擇。 其他常用的工具,例如,SQL Server Management Studio,則只適用於 Windows。 如果您有包含這些工具的 Windows 電腦,請使用它來連線到您的 Linux 安裝資料庫引擎。
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 的套件。
離線安裝
遵循離線安裝指示,以取得安裝套件的步驟。 尋找您的下載網站,然後使用本節稍後顯示的套件清單下載特定套件。
提示
數個套件管理工具都提供協助您判斷套件相依性的命令。 若是 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 套件都與資料庫引擎套件搭配使用。
下載路徑
| 套件 | 分配 | 下載位置 |
|---|---|---|
mssql/extensibility-java packages |
Red Hat 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
限制
目前在 Linux 上無法使用隱含驗證,這表示您無法從進行中的 Java 連線回到伺服器,以存取資料或其他資源。
資源管理
針對外部資源集區的資源管理,Linux 與 Windows 之間有同位,但 sys.dm_resource_governor_external_resource_pools 的統計資料在 Linux 上目前有不同單位。
注意
下表中的統計資料來自指定的控制群組 (cgroups) 子系統。
| 欄位名稱 | 描述 | 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 統計資料以來發出的總讀取 IO 數。 | 在 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 |