适用于:SQL Server 2019 (15.x) - Linux 及更高版本
了解如何为 Linux 上的 SQL Server 安装 Java 语言扩展组件。 Java 语言扩展是 SQL Server 语言扩展的一部分,也是数据库引擎的一个加载项。
尽管可以同时安装数据库引擎和语言扩展,但最好先安装并配置 SQL Server 数据库引擎,以便在添加更多组件之前解决所有问题。
先决条件
Linux 版本必须受 SQL Server 支持,但不包括 Docker 引擎。 受支持的版本包括:
应有用于运行 Transact-SQL (T-SQL) 命令的工具。 需要使用查询编辑器进行安装后配置和验证。 我们建议使用 Azure Data Studio,它是在 Linux 上运行的免费下载。
- Java 扩展包位于 SQL Server Linux 源存储库中。 如果已为数据库引擎安装配置了源存储库,则可以使用相同的存储库注册运行
mssql-server-extensibility-java
包安装命令。
Linux 容器也支持语言扩展。 我们不提供带有语言扩展的预生成容器,但你可以使用 GitHub 中提供的示例模板通过 SQL Server 容器创建一个。
默认情况下,语言扩展和机器学习服务安装在 SQL Server 大数据群集上。 如果使用大数据群集,则无需按照本文中的步骤进行操作。 有关详细信息,请参阅通过机器学习服务在 SQL Server 2019 大数据群集上运行 Python 和 R 脚本。
包列表
在已连接 Internet 的设备上,将根据设备各自的操作系统使用包安装程序独立于数据库引擎下载和安装相应的包。 下表列出了所有可用的包。
包名称 | 适用对象 | 说明 |
---|---|---|
mssql-server-extensibility |
所有语言 | 用于 Java 语言扩展的扩展性框架 |
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 语言扩展页面中的说明生成自定义二进制文件。
注意
在已连接 Internet 的服务器上,将在主包安装过程中下载并安装包依赖项。 如果服务器未连接到 Internet,请参阅脱机设置了解更多详细信息。
可以根据需要下载和安装任意 Java 运行时,包括最新的 OpenJDK 的 Microsoft 生成 或正式许可的 Java 运行时。 从 SQL Server 2022 (16.x) 开始,SQL Server 安装程序不再安装 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
文件的读取和执行访问权限,请在 文件上运行以下 chmod 命令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
启用出站网络访问。 默认情况下,出站网络访问处于禁用状态。 若要启用出站请求,请使用 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
使用 Azure Data Studio 或使用运行 T-SQL 的其他工具(如 SQL Server Management Studio,仅限 Windows)来启用外部脚本执行。
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
环境变量的创建。
若要验证安装,请运行执行调用 Java 的系统存储过程的 T-SQL 脚本。 需要使用查询工具来完成此任务。 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.1000
mssql-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 |