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

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

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

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

前提条件

  • Java拡張パッケージはSQL Server Linuxのソースリポジトリにあります。 データベース エンジンインストール用のソースリポジトリをすでに設定している場合は、同じリポジトリ登録を使ってmssql-server-extensibility-javaパッケージインストールコマンドを実行してください。
  • また、言語拡張は Linux コンテナー上でもサポートされます。 言語拡張付きの既成コンテナは利用できませんが、GitHubで入手可能なサンプルテンプレートを使ってSQL Serverコンテナから作成できます。

  • 言語拡張と Machine Learning Services は、SQL Server ビッグ データ クラスターには既定でインストールされます。 ビッグ データ クラスターを使用する場合、この記事の手順を行う必要はありません。

パッケージ一覧

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

パッケージ名 対象 Description
mssql-server-extensibility すべての言語 Java 言語拡張機能に使用される拡張性フレームワーク
mssql-server-extensibility-java Java Java 言語拡張機能に使用され、サポートされている Java ランタイムが含まれる拡張性フレームワーク

対象:Linux版のSQL Server 2019(15.x)に限定

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

LinuxでLanguage Extensions and 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にLanguage Extensions for Javaをインストールするには、以下のコマンドを使用します。

Tip

可能であれば、 yum clean all を実行して、インストール前にシステム上のパッケージを更新します。

# Install as root or sudo
sudo yum install mssql-server-extensibility-java

Ubuntu インストール コマンド

UbuntuでLanguage Extensions for Javaをインストールするには、以下のコマンドを使用します。

Tip

可能であれば、 apt-get update を実行して、インストール前にシステム上のパッケージを更新します。 一部のUbuntu Dockerイメージには apt-transport-https パッケージが含まれていません。 インストールするには、 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コマンドを実行します。 授業ファイルをjarに置くときは必ず使SQL Server。 jar の作成に関するヘルプについては、「クラス ファイルから Java .jar ファイルを作成する」を参照してください。

    chmod ug+rx <MyJarFile.jar>
    

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

    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. 外部スクリプトの実行を有効にします。 SQLcmd、SQL Server Management Studio (SSMS)Visual Studio Code 用の MSSQL 拡張機能など、使い慣れた SQL Server クライアント ツールを使用して、SQL Server のインスタンスに接続できます。

    EXECUTE 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ライブラリは含まれていませんが、JRE_HOME環境変数が存在することを確認するためにgrep -r JRE_HOME /etc実行できます。

インストールを確認するには、Java を起動するシステム ストアド プロシージャが実行される T-SQL スクリプトを実行します。 このタスクには、クエリ ツールが必要になります。 SQLcmd、SQL Server Management Studio (SSMS)Visual Studio Code 用の MSSQL 拡張機能など、使い慣れた SQL Server クライアント ツールを使用して、SQL Server のインスタンスに接続できます。

SQL Server と Java 言語拡張機能の完全なインストール

データベース エンジンとJava Language Extensionを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 用のパッケージを追加します。

オフライン インストール

パッケージをインストールするには、 オフラインインストール の手順に従ってください。 ダウンロードサイトを見つけ、このセクションの後半に挙げる特定のパッケージをダウンロードしてください。

Tip

いくつかのパッケージ管理ツールは、パッケージ依存関係を特定するのに役立つコマンドを提供しています。 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パッケージとデータベース エンジンパッケージをホストしています。

ダウンロード パス

Package 流通業 ダウンロード場所
mssql/extensibility-java packages レッドハット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

以下の表の統計は、指定されたコントロールグループ(cgroups)サブシステムから取得しています。

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