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

適用対象: SQL Server 2019 (15.x) - Linux および以降のバージョン。

SQL Server の Java 言語拡張機能コンポーネントを Linux にインストールする方法について説明します。 Java 言語拡張機能は、SQL Server 言語拡張機能の一部であり、データベース エンジンへのアドオンです。

データベース エンジンと言語拡張機能を同時にインストールすることは可能ですが、コンポーネントを追加する前に問題を解決できるように、まずは SQL Server データベースエンジンをインストールして構成することをお勧めします。

前提条件

  • Java 拡張機能のパッケージは、SQL Server Linux ソース リポジトリに配置されています。 データベース エンジンのインストール用にソース リポジトリを既に構成している場合は、同じリポジトリ登録を使用して mssql-server-extensibility-java パッケージ インストール コマンドを実行できます。

パッケージ一覧

インターネットに接続されたデバイス上で、各オペレーティング システム用のパッケージ インストーラーを使用して、パッケージがデータベース エンジンとは別個にダウンロードされてインストールされます。 次の表に、使用可能な全パッケージについて説明します。

パッケージ名 適用先 説明
mssql-server-extensibility すべての言語 Java 言語拡張機能に使用される拡張性フレームワーク
mssql-server-extensibility-java Java 適用対象: SQL Server 2019 (15.x) on Linux のみ

Java 言語拡張機能に使用され、サポートされている Java ランタイムが含まれる拡張性フレームワーク

Java 言語拡張機能をインストールする

mssql-server-extensibility-java をインストールすることによって、Linux 上に言語拡張と Java をインストールできます。 mssql-server-extensibility-java をインストールすると、JRE 11 がまだインストールされていない場合は、パッケージによって自動的にインストールされます。 また、JVM パスが JRE_HOME という環境変数に追加されます。

Java 言語拡張機能を有効にするには、GitHubの Java 言語拡張機能ページの手順に従ってカスタム バイナリをビルドします。

Note

インターネットに接続されたサーバー上では、パッケージの依存関係がダウンロードされ、メイン パッケージのインストールの一部としてインストールされます。 サーバーがインターネットに接続されていない場合は、オフライン セットアップに関するページで詳細を確認してください。

最新の Microsoft Build of OpenJDK や公式にライセンスされた Java ランタイムなど、必要に応じて、任意の 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 transport オプションが含まれていない場合があります。 インストールするには、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

インストール後の構成 (必須)

  1. Linux 上でのアクセス許可を付与します

    外部ライブラリを使用している場合は、この手順を実行する必要はありません。 外部ライブラリを使用して作業することをお勧めします。 jar ファイルから外部ライブラリを作成する方法については、CREATE EXTERNAL LIBRARY をご覧ください。

    外部ライブラリを使用しない場合は、jar 内の Java クラスを実行するための権限を SQL Server に付与する必要があります。

    jar ファイルに読み取りと実行のアクセス権限を付与するには、jar ファイルに対して次の chmod コマンドを実行します。 SQL Server を操作するときは、常にクラス ファイルを jar 内に配置することをお勧めします。 jar の作成でヘルプが必要な場合は、「クラス ファイルから Java jar ファイルを作成する」を参照してください。

    chmod ug+rx <MyJarFile.jar>
    

    また、mssql_satellitejar ファイルへの読み取り/実行権限を付与する必要があります。

    chown mssql_satellite:mssql_satellite <MyJarFile.jar>
    

    追加の構成には、主に mssql-conf ツールを利用します。

  2. SQL Server サービスの実行に使用する mssql ユーザー アカウントを追加します。 事前にセットアップを実行していない場合、これは必須です。

    sudo /opt/mssql/bin/mssql-conf setup
    
  3. 送信ネットワーク アクセスを有効にします。 既定では、送信ネットワーク アクセスは無効になっています。 送信要求を有効にするには、mssql-conf ツールを使用して outboundnetworkaccess ブール型プロパティを設定します。 詳しくは、「mssql-conf ツールを利用して SQL Server on Linux を構成する」をご覧ください。

    # Run as SUDO or root
    # Enable outbound requests over the network
    sudo /opt/mssql/bin/mssql-conf set extensibility outboundnetworkaccess 1
    
  4. SQL Server Launchpad サービスとデータベース エンジン インスタンスを再起動して、INI ファイルから更新後の値を読み込みます。 拡張機能に関連する設定が変更されるたびに、再起動を促すメッセージが表示されます。

    systemctl restart mssql-launchpadd
    systemctl restart mssql-server.service
    
  5. Azure Data Studio または T-SQL を実行する SQL Server Management Studio (Windows のみ) などの別のツールを使用して、外部スクリプトの実行を有効にします。

    EXEC sp_configure 'external scripts enabled', 1;
    RECONFIGURE WITH OVERRIDE;
    
  6. もう一度、mssql-launchpadd サービスを再起動します。

  7. 言語拡張を利用する各データベースには、CREATE EXTERNAL LANGUAGE を使って外部言語を登録する必要があります。 次のセクションの手順を参照してください。

外部言語を登録する

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

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

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 パッケージとパラメーターをアペンドすると、1 つの手順でデータベース エンジンと Java 言語拡張機能をインストールして構成することができます。

  1. データベース エンジンに加えて、言語拡張機能を含めたコマンド ラインを指定します。

    データベース エンジンのインストールに Java の拡張性を追加できます。

    sudo yum install -y mssql-server mssql-server-extensibility-java
    
  2. ライセンス契約に同意し、インストール後の構成を完了します。 このタスクには、mssql-conf ツールを使用します。

    sudo /opt/mssql/bin/mssql-conf setup
    

    この手順では、データベース エンジンのライセンス契約に同意し、エディションを選択して、管理者パスワードを設定するプロンプトが表示されます。

  3. 求められた場合は、サービスを再起動します。

    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 用のすべてのパッケージは、データベース エンジンのパッケージと併置されています。

ダウンロード パス

パッケージ Distribution ダウンロード場所
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 上に異なるユニットがあります。

Note

次のテーブルの統計のソースは、指定されたコントロール グループ (cgroup) サブシステムです。

列名 説明 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 になります