適用於 Db2 的 Amazon RDS 的外部存儲程序 - Amazon Relational Database Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

適用於 Db2 的 Amazon RDS 的外部存儲程序

您可以建立外部常式,並將它們註冊到 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— 隱含地授與DBADM具有CREATE_EXTERNAL_ROUTINE權限的任何使用者、群組或角色。

  • EXTERNAL_ROUTINE_DBAUTH— 允許有權限的使用者將DBADMCREATE_EXTERNAL_ROUTINE權限授與任何使用者、群組或角色。在此情況下,不會以隱含方式授與使用者、群組或角色,即使是具有權限的使用者也不會被隱含DBADM授與。

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

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

在自訂參數群組中規劃 db2_authz_行為參數的步驟
  1. 如果您想要使用與資料庫執行個體使用的自訂資料庫參數群組不同的自訂資料庫參數群組,請建立新的資料庫參數群組。如果您使用的是自攜授權 (BYOL) 模型,請確定新的自訂參數群組包含 ID。IBM如需有關這些 ID 的資訊,請參閱IBM IDs for Bring Your Own License for Db2。如需建立資料庫參數群組的詳細資訊,請參閱在 Amazon RDS Amazon 中創建數據庫參數組

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

在自訂參數群組中規劃 db2_authz_行為參數的步驟
  1. 如果您想要使用與資料庫執行個體所使用的自訂資料庫參數群組不同的自訂資料庫參數群組,請執行create-db-parameter-group指令來建立自訂參數群組。如果您使用的是自攜授權 (BYOL) 模型,請確定新的自訂參數群組包含 ID。IBM如需有關這些 ID 的資訊,請參閱IBM IDs for Bring Your Own License for Db2

    包含下列必要選項:

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

    對於LinuxmacOS、或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. 透過執行db2_alternate_authz_behaviourmodify-db-parameter-group指令來修改自訂參數群組中的參數。

    包含下列必要選項:

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

    • --parameters— 參數名稱、值以及參數更新的應用程式方法陣列。

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

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

    對於LinuxmacOS、或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_authz_行為參數的步驟
  1. 如果您想要使用與資料庫執行個體使用的自訂資料庫參數群組不同的自訂資料庫參數群組,請使用 Amazon RDS API CreateDBParameterGroup操作建立新的資料庫參數群組。如果您使用的是自攜授權 (BYOL) 模型,請確定新的自訂參數群組包含 ID。IBM Db2如需有關這些 ID 的資訊,請參閱IBM IDs for Bring Your Own License for Db2

    包含下列必要參數:

    • DBParameterGroupName

    • DBParameterGroupFamily

    • Description

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

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

    包含下列必要參數:

    • DBParameterGroupName

    • Parameters

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

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