Windows 上に SQL Server の Java 言語拡張を インストールする

適用対象: SQL Server 2019 (15.x) 以降のバージョン

SQL Server の Java 言語拡張コンポーネントを Windows にインストールする方法について説明します。 Java 言語拡張は、SQL Server 言語拡張の一部です。

注意

この記事は、Windows への SQL Server の Java 言語拡張のインストールに関するものです。 Linux については、「Linux 上に SQL Server の Java 言語拡張をインストールする」をご覧ください

前提条件

Note

機能とインストール オプションは、SQL Server のバージョンによって異なります。 バージョン セレクターのドロップダウン リストを使用して適切なバージョンの SQL Server を選択します。

  • Java 言語拡張のサポートをインストールする場合は、SQL Server セットアップが必要です。

  • 最新の Microsoft Build of OpenJDK や公式にライセンスされた Java ランタイムなど、必要に応じて、任意の Java ランタイムをダウンロードしてインストールできます。 SQL Server 2022 (16.x) 以降のバージョンでは、Java ランタイムは SQL Server セットアップによってインストールされません。

  • データベース エンジンのインスタンスが必要です。 Java 言語拡張機能のみをインストールすることはできませんが、既存のインスタンスに段階的に追加することはできます。

  • ビジネス継続性のために、言語拡張では Always On 可用性グループがサポートされています。 各ノードに言語拡張をインストールし、パッケージを構成する必要があります。 また、Java 言語拡張のインストールが、SQL Server のフェールオーバー クラスターでサポートされています。

  • SQL Server 言語拡張機能または Java 言語拡張機能をドメイン コントローラーにインストールしないでください。 セットアップの言語拡張部分が失敗します。

  • 言語拡張と Machine Learning Services は、SQL Server ビッグ データ クラスターには既定でインストールされます。 ビッグ データ クラスターを使用する場合、この記事の手順を行う必要はありません。 詳細は、「SQL Server 2019 のビッグ データ クラスターで Machine Learning Services を使用して Python と R のスクリプトを実行する」を参照してください。

重要

セットアップが完了したら、この記事で説明されている構成後の手順を必ず完了してください。 これらの手順には、SQL Server で外部コードを使用できるようにすることや、ユーザーに代わって SQL Server が Java コードを実行するために必要なアカウントを追加することが含まれます。 通常、構成を変更するには、インスタンスを再起動するか、Launchpad サービスを再起動する必要があります。

Java JRE または JDK

注意

機能とインストール オプションは、SQL Server のバージョンによって異なります。 バージョン セレクターのドロップダウン リストを使用して適切なバージョンの SQL Server を選択します。

SQL Server 2022 (16.x) では、最新の Microsoft Build of OpenJDK や公式にライセンスされた Java ランタイムなど、任意の Java ランタイムをダウンロードしてインストールできます。

現在、Java 11 は Windows でサポートされているバージョンです。 最小要件は Java Runtime Environment (JRE) ですが、Java Development Kit (JDK) があると Java コンパイラと開発パッケージが必要な場合に便利です。 JDK にはすべてが含まれているため、JDK をインストールする場合、JRE は必要ありません。 Windows では、可能であれば、既定の /Program Files/ フォルダーに JDK をインストールすることをお勧めします。 そうしないと、実行可能ファイルにアクセス許可を付与するために余分な構成が必要になります。 詳しくは、このドキュメントのアクセス許可の付与 (Windows) に関するセクションをご覧ください。

SQL Server 2019 (15.x) 以降のバージョンで Java をインストールして使用するには、次の 2 つの方法があります。

  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 Java: Azul Zulu JRE 11.0.3
  2. 既定の Java ランタイムではなく、好みの Java ディストリビューションを使用します。

    現在、Java 11 は Windows でサポートされているバージョンです。 最小要件は Java Runtime Environment (JRE) ですが、Java Development Kit (JDK) があると Java コンパイラと開発パッケージが必要な場合に便利です。 JDK にはすべてが含まれているため、JDK をインストールする場合、JRE は必要ありません。 Windows では、可能であれば、既定の /Program Files/ フォルダーに JDK をインストールすることをお勧めします。 そうしないと、実行可能ファイルにアクセス許可を付与するために余分な構成が必要になります。 詳しくは、このドキュメントのアクセス許可の付与 (Windows) に関するセクションをご覧ください。

Note

Java に下位互換性がある場合は、以前のバージョンでも動作する可能性がありますが、SQL Server 2019 (15.x)でサポートおよびテストされているバージョンは Java 11 です。

インストール メディアを入手する

SQL Server のダウンロード場所は、エディションによって異なります。

  • SQL Server Enterprise、Standard、Express の各エディション。 これらのエディションには、運用環境で使用するためのライセンスが付与されます。 Enterprise および Standard エディションのインストール メディアについては、ソフトウェア販売元に問い合わせてください。 購入に関する情報および Microsoft パートナーのディレクトリについては、 マイクロソフトの購入 Web サイトをご覧ください。
  • 最新の無償版

セットアップの実行

ローカル インストールの場合は、セットアップを管理者として実行する必要があります。 SQL Server をリモート共有からインストールする場合は、そのリモート共有に対する読み取り権限と実行権限を持つドメイン アカウントを使用する必要があります。

  1. SQL Server のセットアップ ウィザードを開始します。

  2. [インストール] タブで、 [SQL Server の新規スタンドアロン インストールを実行するか、既存のインストールに機能を追加します] を選択します。

  1. [機能の選択] ページで、次のオプションを選択します。

    データベース エンジン サービス: SQL Server で言語拡張を使用するには、データベース エンジンのインスタンスをインストールする必要があります。 既定のインスタンスまたは名前付きインスタンスを使用できます。

    Machine Learning Services と言語拡張機能: このオプションを選択すると、Java コードの実行をサポートする言語拡張機能コンポーネントがインストールされます。

    • デフォルトの Java ランタイムをインストールする場合は、[Machine Learning Services および言語の拡張][Java] の両方を選択します。

    • 独自の Java ランタイムを使用する場合は、 [Machine Learning Services および言語の拡張] を選択します。 [Java] は選択しないでください。

    • R と Python を使用する場合は、「Windows に SQL Server Machine Learning Services (Python および R) をインストールする」を参照してください。

    Screenshot of the Feature options for Language Extensions.

    1. 前の手順で既定の Java ランタイムをインストールする [Java] を選択した場合は、[Java のインストール場所] ページが表示されます。

      このインストールに含まれているデフォルトの Java をインストールします。 このコンピューターにインストールされている別のバージョンの場所を提供する オプションは、言語拡張機能には使用されません。

      Screenshot of the Java install location.

  1. [機能の選択] ページで、次のオプションを選択します。

    データベース エンジン サービス: SQL Server で言語拡張を使用するには、データベース エンジンのインスタンスをインストールする必要があります。 既定のインスタンスまたは名前付きインスタンスを使用できます。

    Machine Learning Services と言語拡張機能: このオプションを選択すると、Java コードの実行をサポートする言語拡張機能コンポーネントがインストールされます。

    Screenshot of instance features.

  1. [インストールの準備完了] ページで、以下が選択されていることを確認した後、 [インストール] を選択します。

    • データベース エンジン サービス
    • Machine Learning Services および言語の拡張

    構成ファイルが格納されている ..\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 拡張機能は、パス jvm.dll から %JRE_HOME%\bin\server をロードしようとします。

  1. JRE ホーム パスを調べてコピーします。

    このパスは、ランタイムとインストール オプションによって異なります。

    Java 拡張機能は、パス jvm.dll から %JRE_HOME%\bin\server をロードしようとします。

  1. コントロール パネルで [システムとセキュリティ] を開き、 [システム] を開いて、 [システムの詳細設定] を選択します。

  2. [環境変数] を選択します。

  3. 値を (手順 1 で確認した) JDK/JRE のパスにして、JRE_HOME に対する新しいシステム変数を作成します。

  1. Launchpad を開始し直します。

    1. [SQL Server 構成マネージャー] を開きます。

    2. [SQL Server サービス] で [SQL Server スタート パッド] を右クリックして、 [再起動] を選択します。

  1. 言語拡張機能を登録します。 次の手順に従い、Java カスタム ランタイムに使用される Java 言語拡張機能をダウンロードして登録します。

    1. SQL Server GitHub リポジトリの Java 言語拡張機能からjava-lang-extension-windows-release.zip ファイルをダウンロードします。 最新の Windows java-lang-extension-windows.zip ファイルをダウンロードします。 SQL Server Setupからデフォルトの Java をインストールしていない場合は、JRE のバージョンが GitHub からダウンロードしたものと一致していることを確認してください。 インストールされている独自の 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 スタート パッド] を右クリックして、 [再起動] を選択します。

既定以外の JRE フォルダーへのアクセスを許可する

SQL Server に含まれている既定の Java をインストールしておらず、/Program Filesで Java をインストールしていない場合は、次の手順を実行する必要があります。

プログラム ファイルの下に Java をインストールしなかった場合は、次の手順を実行する必要があります。

管理者特権icacls コマンドを実行し、JRE にアクセスするための SQLRUsergroup および SQL Server サービス アカウント (ALL_APPLICATION_PACKAGES 内) へのアクセスを許可します。 このコマンドは、指定されたディレクトリ パスにあるすべてのファイルとフォルダーへのアクセスを再帰的に許可します。

  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 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
    

    Machine Learning Services の機能をすでに有効にしている場合は、言語拡張機能に対して reconfigure を再度実行しないでください。 基になる拡張機能プラットフォームでは、両方がサポートされています。

外部言語を登録する

言語拡張を利用する各データベースには、CREATE EXTERNAL LANGUAGE を使って外部言語を登録する必要があります。

次の例では、Windows 上の SQL Server のデータベースに、Java という名前の外部言語を追加します。

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 サービスが実行されていることを確認します。 言語拡張がインストールされているすべてのデータベース エンジンのインスタンスに対して、1 つのサービスが存在する必要があります。 サービスの詳細については、「SQL Server 言語拡張機能の拡張アーキテクチャ」を参照してください。

追加構成

検証手順が成功した場合は、SQL Server Management Studio、Azure Data Studio、Visual Studio Code、または T-SQL ステートメントをサーバーに送信できる他の任意のクライアントから、Java コードを実行できます。

コマンドの実行中にエラーが発生した場合は、このセクションの追加の構成手順を確認してください。 サービスまたはデータベースに対して追加の適切な構成を行う必要がある場合があります。

インスタンス レベルでは、追加の構成には次のものが含まれる場合があります。

データベースでは、次の構成の更新が必要になる場合があります。

注意

追加の構成が必要かどうかは、SQL Server をインストールしたセキュリティ スキーマと、ユーザーをどのようにデータベースに接続して外部スクリプトを実行させるかによって異なります。

推奨される最適化

すべてが機能するようになったので、Java 言語拡張をサポートするようにサーバーを最適化することもできます。

Java 言語拡張用にサーバーを最適化する

SQL Server セットアップの既定の設定は、抽出、変換、読み込み (ETL) プロセス、レポート、監査、SQL を使用するアプリケーションなど、データベース エンジンでサポートされるさまざまなサービスに対するサーバーのバランスを最適化することを目的としています。 サーバーデータ。 そのため、既定の設定では、場合によって言語拡張用のリソースが制限または調整されることがあります (特に、メモリを大量に使用する操作の場合)。

言語拡張ジョブが適切に優先順位を設定されて、リソースを提供されるようにするため、SQL Server Resource Governor を使って外部リソース プールを構成することをお勧めします。 データベース エンジンに割り当てられるメモリ量を変更したり、SQL Server Launchpad サービスで実行するアカウントの数を増やしたりすることもできます。

Standard エディションを使用しており、リソース ガバナーがない場合は、動的管理ビュー (DMV) と拡張イベント、および Windows イベント監視を使用して、サーバー リソースの管理を支援できます。

次のステップ

Java 開発者はいくつかの簡単な例を試して、SQL Server での Java の動作方法の基本を確認できます。 次の手順については、以下のリンクを参照してください。