在 Windows 上安装 SQL Server Java 语言扩展

适用于:SQL Server 2019 (15.x) 及更高版本

了解如何为 Windows 上的 SQL Server 安装 Java 语言扩展组件。 Java 语言扩展是 SQL Server 语言扩展的一部分。

注意

本文适用于在 Windows 上安装 SQL Server Java 语言扩展。 对于 Linux,请参阅在 Linux 上安装 SQL Server Java 语言扩展

先决条件

注意

功能和安装选项因 SQL Server 版本而异。 使用版本选择器下拉列表选择适当版本的 SQL Server。

  • 如果要安装针对 Java 语言扩展的支持,则需要 SQL Server 安装程序。

  • 可以根据需要下载和安装任意 Java 运行时,包括最新的 OpenJDK 的 Microsoft 内部版本或正式许可的 Java 运行时。 在 SQL Server 2022 (16.x) 及更高版本中,SQL Server 安装程序不会安装 Java 运行时。

  • 需要数据库引擎实例。 尽管可以将 Java 语言扩展功能以增量方式添加到现有实例中,但无法只安装该功能。

  • 为实现业务连续性,语言扩展支持 Always On 可用性组。 必须在每个节点上安装语言扩展并配置包。 还支持在 SQL Server 中的故障转移群集实例上安装 Java 语言扩展。

  • 请勿在域控制器上安装 SQL Server 语言扩展或 Java 语言扩展。 安装程序的语言扩展部分失败。

  • 默认情况下,语言扩展和机器学习服务安装在 SQL Server 大数据群集上。 如果使用大数据群集,则无需按照本文中的步骤进行操作。 有关详细信息,请参阅通过机器学习服务在 SQL Server 2019 大数据群集上运行 Python 和 R 脚本

重要

安装完成后,请务必完成本文中所述的配置后步骤。 这些步骤包括使 SQL Server 能够使用外部代码,以及添加 SQL Server 代表你运行 Java 代码所需的帐户。 配置更改通常需要重启实例或重启 Launchpad 服务。

Java JRE 或 JDK

注意

功能和安装选项因 SQL Server 版本而异。 使用版本选择器下拉列表选择适当版本的 SQL Server。

使用 SQL Server 2022 (16.x) 时,可以下载和安装任意 Java 运行时,包括最新的 OpenJDK 的 Microsoft 版本或正式许可的 Java 运行时。

Java 11 目前是 Windows 上受支持的版本。 Java Runtime Environment (JRE) 是最低要求,但如果需要 Java 编译器和开发包,Java 开发工具包 (JDK) 也很有用。 因为 JDK 包含所有这些内容,所以如果安装了 JDK,则不需要 JRE。 在 Windows 上,我们建议尽可能将 JDK 安装在默认 /Program Files/ 文件夹下。 否则,需要其他配置才能向可执行文件授予权限。 有关详细信息,请参阅本文档的授予权限 (Windows) 部分。

可以通过两种方式来安装 Java 并与 SQL Server 2019 (15.x) 及更高版本结合使用:

  1. 使用 SQL Server 安装附带的默认 Java 运行时。

    下表列出了安装程序中包含的 Java 的默认版本:

    SQL Server 版本 默认的 Java 版本控制
    SQL Server 2019 (15.x) CU 23 及更高版本 Microsoft Build of OpenJDK 11.0.19
    SQL Server 2019 (15.x) RTM – CU22 Azul Zulu JRE 11.0.3
  2. 使用首选 Java 分发,而不是默认的 Java 运行时。

    Java 11 目前是 Windows 上受支持的版本。 Java Runtime Environment (JRE) 是最低要求,但如果需要 Java 编译器和开发包,Java 开发工具包 (JDK) 也很有用。 因为 JDK 包含所有这些内容,所以如果安装了 JDK,则不需要 JRE。 在 Windows 上,我们建议尽可能将 JDK 安装在默认 /Program Files/ 文件夹下。 否则,需要其他配置才能向可执行文件授予权限。 有关详细信息,请参阅本文档的授予权限 (Windows) 部分。

注意

由于 Java 可向后兼容,早期版本可能可以正常运行,但 SQL Server 2019 (15.x) 的支持和测试版本是 Java 11。

获取安装介质

SQL Server 的下载位置由版本决定:

  • SQL Server Enterprise、Standard 和 Express 版本。 这些版本已获得生产使用许可。 如需 Enterprise 和 Standard 版本,请联系软件供应商获取安装媒体。 你可以在 Microsoft 采购网站上找到采购信息和 Microsoft 合作伙伴目录。
  • 最新免费版本

运行安装程序

对于本地安装,必须以管理员身份运行安装程序。 如果从远程共享安装 SQL Server ,则必须使用对远程共享具有读取和执行权限的域帐户。

  1. 启动 SQL Server 的安装向导。

  2. 在“安装”选项卡上,选择“全新 SQL Server 独立安装或向现有安装添加功能” 。

  1. 在“功能选择” 页上,选择以下选项:

    数据库引擎服务:要将语言扩展与 SQL Server 结合使用,必须安装数据库引擎的实例。 可使用默认实例或命名实例。

    机器学习服务和语言扩展:此选项将安装支持 Java 代码执行的语言扩展组件。

    Screenshot of the Feature options for Language Extensions.

    1. 如果在上一步中选择“Java”来安装默认的 Java 运行时,则会显示“Java 安装位置”页。

      安装此安装附带的默认 Java。 “提供已安装在此计算机上的其他版本的位置”选项不适用于语言扩展。

      Screenshot of the Java install location.

  1. 在“功能选择” 页上,选择以下选项:

    数据库引擎服务:要将语言扩展与 SQL Server 结合使用,必须安装数据库引擎的实例。 可使用默认实例或命名实例。

    机器学习服务和语言扩展:此选项将安装支持 Java 代码执行的语言扩展组件。

    Screenshot of instance features.

  1. 在“准备安装”页面上,验证是否已包括这些选择,然后选择“安装” 。

    • 数据库引擎服务
    • 机器学习服务和语言扩展

    请注意配置文件存储路径 ..\Setup Bootstrap\Log 下的文件夹位置。 安装完成后,可以在“摘要”文件中查看已安装的组件。

  2. 安装完成后,如果收到重启计算机的指示,请立即重启。 安装完成后,请务必阅读安装向导中的消息。 有关详细信息,请参阅 查看和读取 SQL Server 安装程序日志文件

添加 JRE_HOME 变量

JRE_HOME 是指定 Java 解释器位置的系统环境变量。 在此步骤中,在 Windows 上为该变量创建一个系统环境变量。

  1. 查找并复制 JRE 起始路径。

    例如,默认的 Java 运行时 Zulu JRE 11.0.3 的 JRE 起始路径为 %ProgramFiles%\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Binn\AZUL-OpenJDK-JRE\

    根据 SQL Server 安装路径,或者如果选择其他 Java 运行时,JDK 或 JRE 的位置可能不同于前面的示例中的路径。 即使安装了 JDK,通常还会在安装过程中获得 JRE 子文件夹,因此,请在此情况下指向 JRE 文件夹。 Java 扩展尝试从路径 %JRE_HOME%\bin\server 加载 jvm.dll

  1. 查找并复制 JRE 起始路径。

    该路径取决于运行时和安装选项。

    Java 扩展尝试从路径 %JRE_HOME%\bin\server 加载 jvm.dll

  1. 在“控制面板”中,依次打开“系统和安全”、“系统”,然后选择“高级系统属性”。

  2. 选择“环境变量”。

  3. 使用 JDK/JRE 路径的值(见步骤 1)为 JRE_HOME 创建新的系统变量。

  1. 重启 Launchpad

    1. 打开“SQL Server 配置管理器”

    2. 在“SQL Server 服务”下,右键单击“SQL Server Launchpad”,然后选择“重启” 。

  1. 注册语言扩展。 按照以下步骤下载并注册 Java 语言扩展,该扩展用于 Java 自定义运行时。

    1. SQL Server GitHub 存储库的 Java 语言扩展下载 java-lang-extension-windows-release.zip 文件。 下载最新的 Windows java-lang-extension-windows.zip 文件。 如果尚未从 SQL Server 安装程序安装默认 Java,请确保 JRE 版本与从 GitHub 下载的 Java 版本匹配。 如果想要使用自己的已安装 JRE 版本,可能需要从 GitHub 源代码编译 java-lang-extension

    2. 使用 Azure Data Studio 连接到 SQL Server 实例,并运行以下 T-SQL 命令,以便使用 CREATE EXTERNAL LANGUAGE 注册 Java 语言扩展。

    3. 修改此语句中的路径,反映出下载的语言扩展 zip 文件 (java-lang-extension-windows-release.zip) 的位置和自定义 Java 安装的位置 (%ProgramFiles%\Python)。

    CREATE EXTERNAL LANGUAGE [Java]
    FROM (CONTENT = N'C:\path\to\java-lang-extension-windows-release.zip',
        FILE_NAME = 'javaextension.dll',
        ENVIRONMENT_VARIABLES = N'{"JAVAHOME": "C:\\Program Files\\Java"}');
    GO
    
  2. 重启 Launchpad

    1. 打开“SQL Server 配置管理器”

    2. 在“SQL Server 服务”下,右键单击“SQL Server Launchpad”,然后选择“重启” 。

授予非默认 JRE 文件夹的访问权限

如果未安装 SQL Server 附带的默认 Java,并且未在 /Program Files 下安装 Java,则需要执行以下步骤。

如果未在程序文件下安装 Java,则需要执行以下步骤。

从提升的行运行 icacls 命令,以向 SQLRUsergroup 和 SQL Server 服务帐户(位于 ALL_APPLICATION_PACKAGES)授予访问 JRE 的权限。 这些命令将以递归方式授予对给定目录路径下所有文件和文件夹的访问权限。

  1. 授予 SQLRUserGroup 权限

    对于命名实例,请将实例名称追加至 SQLRUsergroup(例如 SQLRUsergroupINSTANCENAME)。

    icacls "<PATH to JRE>" /grant "SQLRUsergroup":(OI)(CI)RX /T
    

    如果已在 Windows 的程序文件下的默认文件夹中安装了 JDK/JRE,则可以跳过此步骤。

  2. 授予 AppContainer 权限。 此命令向计算机 SID S-1-15-2-1 授予权限,这等同于英文版 Windows 上的 ALL APPLICATION PACKAGES。 此外,也可以在英语版本的 Windows 上使用 icacls "<PATH to JRE>" /grant "ALL APPLICATION PACKAGES":(OI)(CI)RX /T

    icacls "<PATH to JRE>" /grant *S-1-15-2-1:(OI)(CI)RX /T
    

重新启动服务。

安装完成后,请先重启数据库引擎,然后再继续执行下一步,以启用脚本执行。

重启 SQL Server 服务也会自动重启相关的 SQL Server Launchpad 服务。

可以使用 SSMS 中实例的右键单击“重启”命令、“控制面板”中的“服务”面板,或者使用 SQL Server 配置管理器来重启服务。

启用脚本执行

  1. 打开 SQL Server Management Studio。 连接到已安装语言扩展的实例,选择“新建查询”以打开查询窗口,并运行以下命令:

    EXEC sp_configure;
    

    此功能默认处于关闭状态(value0),必须在管理员显式启用此功能后,才能运行 Java 代码。

  2. 若要启用外部脚本编写功能,请运行以下语句:

    EXEC sp_configure 'external scripts enabled', 1
    GO
    RECONFIGURE WITH OVERRIDE
    

    如果已为机器学习服务启用此功能,请勿再次为语言扩展运行重新配置。 基础扩展性平台支持这两种方法。

注册外部语言

对于想要在其中使用语言扩展的每个数据库,需要使用 CREATE EXTERNAL LANGUAGE 注册外部语言。

以下示例将一种名为 Java 的外部语言添加到 Windows 上的 SQL Server 的数据库中。

CREATE EXTERNAL LANGUAGE Java
FROM (CONTENT = N'<path-to-zip>', FILE_NAME = 'javaextension.dll');
GO

有关详细信息,请参阅 CREATE EXTERNAL LANGUAGE

验证安装

在安装程序日志中检查实例的安装状态。

使用以下步骤验证用于启动外部脚本的所有组件是否都在运行。

  1. 在 SQL Server Management Studio 或 Azure Data Studio 中打开新的查询窗口,然后运行以下语句:

    EXEC sp_configure 'external scripts enabled';
    

    run_value 现已设置为 1。

  2. 打开“服务”面板或 SQL Server 配置管理器,并验证“SQL Server Launchpad”是否正在运行 。 应有一项服务适用于已安装语言扩展的每个数据库引擎实例。 有关该服务的更多信息,请参阅 SQL Server 语言扩展中的扩展性体系结构

其他配置

如果验证步骤成功,则可以从 SQL Server Management Studio、Azure Data Studio、Visual Studio Code 或者能够向服务器发送 T-SQL 语句的其他任何客户端运行 Java 命令。

如果在运行命令时遇到错误,请查看本部分中的其他配置步骤。 可能需要对服务或数据库进行其他适当配置。

在实例级别,其他配置可能包括:

数据库上可能需要以下配置更新:

注意

是否需要其他配置取决于安全架构、SQL Server 的安装位置,以及期望用户以何方式连接到数据库和运行外部脚本。

建议的优化

一切正常运行后,可能还需要优化服务器以支持 Java 语言扩展。

针对 Java 语言扩展优化服务器

SQL Server 安装程序的默认设置旨在为数据库引擎支持的各种服务(可能包括提取、转换和加载 (ETL) 进程、报告、审核和使用 SQL Server 数据的应用程序)优化服务器平衡。 因此,在默认设置下,可能会发现语言扩展(尤其是占用大量内存的操作)的资源有时被限制或被阻止。

若要确保语言扩展作业的优先级别并为其分配相应资源,建议使用 SQL Server Resource Governor 配置外部资源池。 可能还想要更改分配到数据库引擎的内存量,或增加 SQL Server Launchpad 服务下运行的帐户数。

如果使用的是 Standard edition 且没有 Resource Governor,则可以使用动态管理视图 (DMV) 和扩展事件以及 Windows 事件监视来帮助管理服务器资源。

下一步

Java 开发人员可以开始体验一些简单的示例,并了解 Java 如何与 SQL Server 配合工作的基础知识。 有关下一步,请参阅以下链接: