Amazon RDS for Db2 の外部ストアドプロシージャ - Amazon Relational Database Service

Amazon RDS for Db2 の外部ストアドプロシージャ

外部ルーチンを作成し、外部ストアドプロシージャとして Amazon RDS for Db2 データベースに登録できます。現在、RDS for Db2 は外部ストアドプロシージャ用の Java ベースのルーチンのみをサポートしています。

Java ベースの外部ストアドプロシージャ

Java ベースの外部ストアドプロシージャは、外部ストアドプロシージャとして RDS for Db2 データベースに登録する外部 Java ルーチンです。

Java ベースの外部ストアドプロシージャの制限

外部ルーチンを開発する前に、次の制限を考慮してください。

外部ルーチンを作成するには、Db2 が提供する Java 開発キット (JDK) を必ず使用してください。詳細については、「Java software support for Db2 database products」を参照してください。

Java プログラムは /tmp ディレクトリにのみファイルを作成でき、Amazon RDS はこれらのファイルに対する実行権限や Set User ID (SUID) 権限の有効化をサポートしていません。また、Java プログラムはソケットシステム呼び出し、または次のシステム呼び出しを使用することはできません。

  • _sysctl

  • acct

  • afs_syscall

  • bpf

  • capset

  • chown

  • chroot

  • create_module

  • delete_module

  • fanotify_init

  • fanotify_mark

  • finit_module

  • fsconfig

  • fsopen

  • fspick

  • get_kernel_syms

  • getpmsg

  • init_module

  • mount

  • move_mount

  • nfsservctl

  • open_by_handle_at

  • open_tree

  • pivot_root

  • putpmsg

  • query_module

  • quotactl

  • reboot

  • security

  • setdomainname

  • setfsuid

  • sethostname

  • sysfs

  • tuxcall

  • umount2

  • uselib

  • ustat

  • vhangup

  • vserver

Db2 の外部ルーチンに関するその他の制限については、「IBM Db2 Documentation」の「Restrictions on external routines」を参照してください。

Java ベースの外部ストアドプロシージャの設定

外部ストアドプロシージャを設定するには、外部ルーチンで.jar ファイルを作成して RDS for Db2 データベースにインストールし、外部ストアドプロシージャとして登録します。

ステップ 1: 外部ストアドプロシージャの有効化

外部ストアドプロシージャを有効にするには、DB インスタンスに関連付けられているカスタムパラメータグループで、db2_alternate_authz_behaviour パラメータを次のいずれかの値に設定します。

  • EXTERNAL_ROUTINE_DBADMDBADM 権限を持つユーザー、グループ、またはロールに暗黙的に CREATE_EXTERNAL_ROUTINE 権限を付与します。

  • EXTERNAL_ROUTINE_DBAUTHDBADM 権限を持つユーザーが任意のユーザー、グループ、またはロールに CREATE_EXTERNAL_ROUTINE 権限を付与することを許可します。この場合、DBADM 権限を持つユーザーも含め、ユーザー、グループ、またはロールに暗黙的にこの権限が付与されることはありません。

この設定の詳細については、IBM Db2 ドキュメントの「GRANT (database authorities) statement」を参照してください。

AWS Management Console、AWS CLI、または Amazon RDS API を使用して、カスタムパラメータグループを作成および変更することができます。

カスタムパラメータグループで db2_alternate_authz_behaviour パラメータを設定するには
  1. DB インスタンスが使用しているものとは異なるカスタム DB パラメータグループを使用する場合は、新しい DB パラメータグループを作成します。Bring-Your-Own-License (BYOL) モデルを使用している場合は、新しいカスタムパラメータグループに IBM ID が含まれていることを確認してください。これらの ID の詳細については、「Db2 の Bring Your Own License の IBM ID」を参照してください。DB パラメータグループの作成の詳細については、「Amazon RDS での DB パラメータグループの作成」を参照してください。

  2. カスタムパラメータグループで db2_alternate_authz_behaviour パラメータに値を設定します。パラメータグループの変更の詳細については、「Amazon RDS の DB パラメータグループのパラメータの変更」を参照してください。

カスタムパラメータグループで db2_alternate_authz_behaviour パラメータを設定するには
  1. DB インスタンスが使用しているものとは異なるカスタム DB パラメータグループを使用する場合は、create-db-parameter-group コマンドを実行して、カスタムパラメータグループを作成します。Bring-Your-Own-License (BYOL) モデルを使用している場合は、新しいカスタムパラメータグループに IBM ID が含まれていることを確認してください。これらの ID の詳細については、「Db2 の Bring Your Own License の IBM ID」を参照してください。

    次の必須パラメータを含めます。

    • --db-parameter-group-name - 作成するパラメータグループの名前。

    • --db-parameter-group-family - Db2 エンジンエディションとメジャーバージョン。有効な値は、db2-se-11.5 および db2-ae-11.5 です。

    • --description - このパラメータグループの説明。

    DB パラメータグループの作成の詳細については、「Amazon RDS での DB パラメータグループの作成」を参照してください。

    次の例は、db2-se-11.5 パラメータグループファミリーの MY_EXT_SP_PARAM_GROUP カスタムパラメータグループを作成する方法を示しています。

    Linux、macOS、Unix の場合:

    aws rds create-db-parameter-group \ --region us-east-1 \ --db-parameter-group-name MY_EXT_SP_PARAM_GROUP \ --db-parameter-group-family db2-se-11.5 \ --description "test db2 external routines"

    Windows の場合:

    aws rds create-db-parameter-group ^ --region us-east-1 ^ --db-parameter-group-name MY_EXT_SP_PARAM_GROUP ^ --db-parameter-group-family db2-se-11.5 ^ --description "test db2 external routines"
  2. modify-db-parameter-group コマンドを実行して、カスタムパラメータグループの db2_alternate_authz_behaviour パラメータを変更します。

    次の必須パラメータを含めます。

    • --db-parameter-group-name – 作成したパラメータグループの名前。

    • --parameters – パラメータ名、値、およびパラメータ更新用のアプリケーションメソッドの配列。

    パラメータグループの変更の詳細については、「Amazon RDS の DB パラメータグループのパラメータの変更」を参照してください。

    次の例は、db2_alternate_authz_behaviour の値を EXTERNAL_ROUTINE_DBADM に設定して、MY_EXT_SP_PARAM_GROUP パラメータグループを変更する方法を示しています。

    Linux、macOS、Unix の場合:

    aws rds modify-db-parameter-group \ --db-parameter-group-name MY_EXT_SP_PARAM_GROUP \ --parameters "ParameterName='db2_alternate_authz_behaviour',ParameterValue='EXTERNAL_ROUTINE_DBADM',ApplyMethod=immediate"

    Windows の場合:

    aws rds modify-db-parameter-group ^ --db-parameter-group-name MY_EXT_SP_PARAM_GROUP ^ --parameters "ParameterName='db2_alternate_authz_behaviour',ParameterValue='EXTERNAL_ROUTINE_DBADM',ApplyMethod=immediate"
カスタムパラメータグループで db2_alternate_authz_behaviour パラメータを設定するには
  1. DB インスタンスが使用しているものとは異なるカスタム DB パラメータグループを使用する場合は、Amazon RDS API CreateDBParameterGroup オペレーションを使用して、新しい DB パラメータグループを作成します。Bring-Your-Own-License (BYOL) モデルを使用している場合は、新しいカスタムパラメータグループに IBM Db2 ID が含まれていることを確認してください。これらの ID の詳細については、「Db2 の Bring Your Own License の IBM ID」を参照してください。

    以下の必須パラメータを含めます。

    • DBParameterGroupName

    • DBParameterGroupFamily

    • Description

    DB パラメータグループの作成の詳細については、「Amazon RDS での DB パラメータグループの作成」を参照してください。

  2. RDS API ModifyDBParameterGroup オペレーションを使用して、作成したカスタムパラメータグループの db2_alternate_authz_behaviour パラメータを変更します。

    以下の必須パラメータを含めます。

    • DBParameterGroupName

    • Parameters

    パラメータグループの変更の詳細については、「Amazon RDS の DB パラメータグループのパラメータの変更」を参照してください。

ステップ 2: 外部ルーチンで.jar ファイルをインストールする

Java ルーチンを作成したら、.jar ファイルを作成して db2 "call sqlj.install_jar('file:file_path',jar_ID)" を実行し、RDS for Db2 データベースにインストールします。

次の例は、Java ルーチンを作成して、RDS for Db2 データベースにインストールする方法を示しています。この例には、プロセスのテストに使用できる簡単なルーチンのサンプルコードが含まれています。この例では、次を前提としています。

  • Java コードは Db2 がインストールされたサーバー上でコンパイルされていること。IBM が提供する JDK を使用してコンパイルしない場合、原因不明のエラーが発生する可能性があるため、このベストプラクティスに従ってください。

  • サーバーの RDS for Db2 データベースがローカルでカタログ化されていること。

次のコード例を使用してこのプロセスを試す場合は、コード例をコピーして、MYJAVASP.java という名前のファイルに保存します。

import java.sql.*; public class MYJAVASP { public static void my_JAVASP (String inparam) throws SQLException, Exception { try { // Obtain the calling context's connection details. Connection myConn = DriverManager.getConnection("jdbc:default:connection"); String myQuery = "INSERT INTO TEST.TEST_TABLE VALUES (?, CURRENT DATE)"; PreparedStatement myStmt = myConn.prepareStatement(myQuery); myStmt.setString(1, inparam); myStmt.executeUpdate(); } catch (SQLException sql_ex) { throw sql_ex; } catch (Exception ex) { throw ex; } }

次のコマンドは Java ルーチンをコンパイルします。

~/sqllib/java/jdk64/bin/javac MYJAVASP.java

次のコマンドは.jar ファイルを作成します。

~/sqllib/java/jdk64/bin/jar cvf MYJAVASP.jar MYJAVASP.class

次のコマンドは、MY_DB2_DATABASE という名前のデータベースに接続して、.jar ファイルをインストールします。

db2 "connect to MY_DB2_DATABASE user master_username using master_password" db2 "call sqlj.install_jar('file:/tmp/MYJAVASP.jar','MYJAVASP')" db2 "call sqlj.refresh_classes()"

ステップ 3: 外部ストアドプロシージャを登録する

RDS for Db2 データベースに.jar ファイルをインストールしたら、db2 CREATE PROCEDURE コマンドまたは db2 REPLACE PROCEDURE コマンドを実行してストアドプロシージャとして登録します。

次の例は、データベースに接続し、前のステップで作成した Java ルーチンをストアドプロシージャとして登録する方法を示しています。

db2 "connect to MY_DB2_DATABASE user master_username using master_password" create procedure TESTSP.MYJAVASP (in input char(6)) specific myjavasp dynamic result sets 0 deterministic language java parameter style java no dbinfo fenced threadsafe modifies sql data program type sub external name 'MYJAVASP!my_JAVASP';

ステップ 4: 外部ストアドプロシージャを検証する

次の手順を使用して、前のステップで登録したサンプル外部ストアドプロシージャをテストします。

外部ストアドプロシージャを検証するには
  1. 次の例の TEST.TEST_TABLE ようなテーブルを作成します。

    db2 "create table TEST.TEST_TABLE(C1 char(6), C2 date)"
  2. 新しい外部ストアドプロシージャを呼び出します。呼び出しは 0 のステータスを返します。

    db2 "call TESTSP.MYJAVASP('test')" Return Status = 0
  3. ステップ 1 で作成したテーブルをクエリして、ストアドプロシージャ呼び出しの結果を確認します。

    db2 "SELECT * from TEST.TEST_TABLE"

    クエリは次の例のような出力を生成します。

    C1 C2 ------ ---------- test 02/05/2024