本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
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 參數
-
如果您想要使用與資料庫執行個體正在使用的自訂資料庫參數群組不同的自訂資料庫參數群組,請建立新的資料庫參數群組。如果您使用自帶授權 (BYOL) 模型,請確定新的自訂參數群組包含 IBM IDs。如需這些 IDs的詳細資訊,請參閱 IBM 自攜 Db2 授權 (BYOL) 的 IDs 。如需建立資料庫參數群組的詳細資訊,請參閱在 Amazon RDS Amazon 中創建數據庫參數組。
-
在自訂
db2_alternate_authz_behaviour
參數群組中設定 參數的值。如需修改參數群組的詳細資訊,請參閱 修改 Amazon RDS 中資料庫參數群組中的參數。
在自訂參數群組中設定 db2_alternate_authz_behaviour 參數
-
如果您想要使用不同於資料庫執行個體使用的自訂資料庫參數群組,請執行 create-db-parameter-group命令來建立自訂參數群組。如果您使用自帶授權 (BYOL) 模型,請確定新的自訂參數群組包含 IBM IDs。如需這些 IDs的詳細資訊,請參閱 IBM 自攜 Db2 授權 (BYOL) 的 IDs 。
包含下列必要選項:
-
--db-parameter-group-name
– 您要建立之參數群組的名稱。 -
--db-parameter-group-family
– Db2 引擎版本和主要版本。有效值為db2-se-11.5
和db2-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"
-
-
執行 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 參數
-
如果您想要使用不同於資料庫執行個體使用的自訂資料庫參數群組,請使用 Amazon RDS API CreateDBParameterGroup操作建立新的資料庫參數群組。如果您使用自帶授權 (BYOL) 模型,請確定新的自訂參數群組包含 IBM Db2 IDs。如需這些 IDs的詳細資訊,請參閱 IBM 自攜 Db2 授權 (BYOL) 的 IDs 。
包含下列必要參數:
-
DBParameterGroupName
-
DBParameterGroupFamily
-
Description
如需建立資料庫參數群組的詳細資訊,請參閱在 Amazon RDS Amazon 中創建數據庫參數組。
-
-
使用 RDS API ModifyDBParameterGroup操作修改自訂
db2_alternate_authz_behaviour
參數群組中的 參數。包含下列必要參數:
-
DBParameterGroupName
-
Parameters
如需修改參數群組的詳細資訊,請參閱 修改 Amazon RDS 中資料庫參數群組中的參數。
-
步驟 2:使用外部常式安裝 .jar 檔案
建立 Java 常式後,請建立 .jar 檔案,然後執行 db2 "call sqlj.install_jar('file:
將其安裝在 RDS for Db2 資料庫上。file_path
',jar_ID
)"
下列範例示範如何建立 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
usingmaster_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
usingmaster_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:驗證外部預存程序
使用下列步驟來測試在上一個步驟中註冊的範例外部預存程序。
驗證外部預存程序
-
在下列範例中建立類似
TEST.TEST_TABLE
的資料表。db2 "create table TEST.TEST_TABLE(C1 char(6), C2 date)"
-
呼叫新的外部預存程序。呼叫會傳回 狀態
0
。db2 "call TESTSP.MYJAVASP('test')" Return Status = 0
-
查詢您在步驟 1 中建立的資料表,以驗證預存程序呼叫的結果。
db2 "SELECT * from TEST.TEST_TABLE"
查詢會產生類似下列範例的輸出:
C1 C2 ------ ---------- test 02/05/2024