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)。如需詳細資訊,請參閱 Db2 資料庫產品的 Java 軟體支援

您的 Java 程式只能在 /tmp目錄中建立檔案,Amazon RDS 不支援啟用這些檔案的可執行檔或設定使用者 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 文件中的外部常式限制

設定以 Java 為基礎的外部預存程序

若要設定外部預存程序,請使用外部常式建立 .jar 檔案,將其安裝在 RDS for Db2 資料庫上,然後將其註冊為外部預存程序。

步驟 1:啟用外部預存程序

若要啟用外部預存程序,請在與資料庫執行個體相關聯的自訂參數群組中,將 參數設定為下列db2_alternate_authz_behaviour其中一個值:

  • EXTERNAL_ROUTINE_DBADM – 隱含授與具有CREATE_EXTERNAL_ROUTINE許可DBADM授權的任何使用者、群組或角色。

  • EXTERNAL_ROUTINE_DBAUTH – 允許DBADM有權將CREATE_EXTERNAL_ROUTINE許可授予任何使用者、群組或角色的使用者。在此情況下,不會隱含授予此許可給任何使用者、群組或角色,甚至是具有DBADM授權的使用者。

如需此設定的詳細資訊,請參閱 IBM Db2 文件中的 GRANT (資料庫授權單位) 陳述式。

您可以使用 AWS Management Console、 AWS CLI或 Amazon RDS API 來建立和修改自訂參數群組。

在自訂參數群組中設定 db2_alternate_authz_behaviour 參數
  1. 如果您想要使用與資料庫執行個體正在使用的自訂資料庫參數群組不同的自訂資料庫參數群組,請建立新的資料庫參數群組。如果您使用自帶授權 (BYOL) 模型,請確定新的自訂參數群組包含 IBM IDs。如需這些 IDs的詳細資訊,請參閱 IBM 自攜 Db2 授權 (BYOL) 的 IDs 。如需建立資料庫參數群組的詳細資訊,請參閱在 Amazon RDS Amazon 中創建數據庫參數組

  2. 在自訂db2_alternate_authz_behaviour參數群組中設定 參數的值。如需修改參數群組的詳細資訊,請參閱 修改 Amazon RDS 中資料庫參數群組中的參數

在自訂參數群組中設定 db2_alternate_authz_behaviour 參數
  1. 如果您想要使用不同於資料庫執行個體使用的自訂資料庫參數群組,請執行 create-db-parameter-group命令來建立自訂參數群組。如果您使用自帶授權 (BYOL) 模型,請確定新的自訂參數群組包含 IBM IDs。如需這些 IDs的詳細資訊,請參閱 IBM 自攜 Db2 授權 (BYOL) 的 IDs

    包含下列必要選項:

    • --db-parameter-group-name – 您要建立之參數群組的名稱。

    • --db-parameter-group-family – Db2 引擎版本和主要版本。有效值為 db2-se-11.5db2-ae-11.5

    • --description – 此參數群組的描述。

    如需建立資料庫參數群組的詳細資訊,請參閱在 Amazon RDS Amazon 中創建數據庫參數組

    下列範例示範如何為參數群組系列 建立名為 MY_EXT_SP_PARAM_GROUP的自訂參數群組db2-se-11.5

    對於 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 中資料庫參數群組中的參數

    下列範例示範如何透過將 的值設定為 db2_alternate_authz_behaviour MY_EXT_SP_PARAM_GROUP來修改參數群組EXTERNAL_ROUTINE_DBADM

    對於 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. 如果您想要使用不同於資料庫執行個體使用的自訂資料庫參數群組,請使用 Amazon RDS API CreateDBParameterGroup操作建立新的資料庫參數群組。如果您使用自帶授權 (BYOL) 模型,請確定新的自訂參數群組包含 IBM Db2 IDs。如需這些 IDs的詳細資訊,請參閱 IBM 自攜 Db2 授權 (BYOL) 的 IDs

    包含下列必要參數:

    • DBParameterGroupName

    • DBParameterGroupFamily

    • Description

    如需建立資料庫參數群組的詳細資訊,請參閱在 Amazon RDS Amazon 中創建數據庫參數組

  2. 使用 RDS API ModifyDBParameterGroup操作修改自訂db2_alternate_authz_behaviour參數群組中的 參數。

    包含下列必要參數:

    • DBParameterGroupName

    • Parameters

    如需修改參數群組的詳細資訊,請參閱 修改 Amazon RDS 中資料庫參數群組中的參數

步驟 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 PROCEDUREdb2 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