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 설명서의 Restrictions on external routines
Java 기반 외부 저장 프로시저 구성
외부 저장 프로시저를 구성하려면 외부 루틴으로 .jar 파일을 만들고 RDS for Db2 데이터베이스에 설치한 다음 외부 저장 프로시저로 등록하세요.
1단계: 외부 저장 프로시저 활성화
외부 저장 프로시저를 활성화하려면 DB 인스턴스와 연결된 사용자 정의 파라미터 그룹에서 db2_alternate_authz_behaviour
파라미터를 다음 값 중 하나로 설정합니다.
EXTERNAL_ROUTINE_DBADM
-DBADM
권한이 있는 모든 사용자, 그룹 또는 역할에 암시적으로CREATE_EXTERNAL_ROUTINE
권한을 부여합니다.EXTERNAL_ROUTINE_DBAUTH
-DBADM
권한이 있는 사용자가 모든 사용자, 그룹 또는 역할에CREATE_EXTERNAL_ROUTINE
권한을 부여하도록 허용합니다. 이 경우DBADM
권한이 있는 사용자를 포함하여 모든 사용자, 그룹 또는 역할에 이 권한이 암시적으로 부여되지 않습니다.
이 설정에 대한 자세한 내용은 IBM Db2 설명서의 GRANT (database authorities) statement
AWS Management Console, AWS CLI 또는 Amazon RDS API를 통해 사용자 지정 파라미터 그룹을 생성하고 수정할 수 있습니다.
사용자 지정 파라미터 그룹에서 db2_alternate_authz_behaviour 파라미터를 구성하는 방법
-
DB 인스턴스에서 사용하는 것과 다른 사용자 정의 DB 파라미터 그룹을 사용하려면 새로운 DB 파라미터 그룹을 생성합니다. 기존 보유 라이선스 사용(BYOL) 모델을 사용하는 경우 새 사용자 지정 파라미터 그룹에 IBM ID가 포함되어 있어야 합니다. 이 ID에 대한 자세한 내용은 Db2에 기존 보유 라이선스 사용을 위한 IBM ID 섹션을 참조하세요. DB 파라미터 그룹을 생성하는 것에 대한 자세한 내용은 Amazon RDS에서 DB 파라미터 그룹 생성 단원을 참조하십시오.
-
사용자 지정 파라미터 그룹에서
db2_alternate_authz_behaviour
파라미터 값을 설정합니다. 파라미터 그룹 수정에 대한 자세한 내용은 Amazon RDS에서 DB 파라미터 그룹의 파라미터 수정 섹션을 참조하세요.
사용자 지정 파라미터 그룹에서 db2_alternate_authz_behaviour 파라미터를 구성하는 방법
-
DB 인스턴스가 사용하는 것과 다른 사용자 지정 DB 파라미터 그룹을 사용하려면 create-db-parameter-group 명령을 실행하여 사용자 지정 파라미터 그룹을 생성합니다. 기존 보유 라이선스 사용(BYOL) 모델을 사용하는 경우 새 사용자 지정 파라미터 그룹에 IBM ID가 포함되어 있어야 합니다. 이 ID에 대한 자세한 내용은 Db2에 기존 보유 라이선스 사용을 위한 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
을 생성하는 방법을 보여줍니다.대상 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"
-
-
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
을 수정하는 방법을 보여줍니다.대상 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_alternate_authz_behaviour 파라미터를 구성하는 방법
-
DB 인스턴스에서 사용하는 것과 다른 사용자 정의 DB 파라미터 그룹을 사용하려면 Amazon RDS API CreateDBParameterGroup 작업을 사용하여 새로운 DB 파라미터 그룹을 생성합니다. 기존 보유 라이선스 사용(BYOL) 모델을 사용하는 경우 새 사용자 지정 파라미터 그룹에 IBM Db2 ID가 포함되어 있어야 합니다. 이 ID에 대한 자세한 내용은 Db2에 기존 보유 라이선스 사용을 위한 IBM ID 섹션을 참조하세요.
다음 필수 파라미터를 포함합니다.
-
DBParameterGroupName
-
DBParameterGroupFamily
-
Description
DB 파라미터 그룹을 생성하는 것에 대한 자세한 내용은 Amazon RDS에서 DB 파라미터 그룹 생성 단원을 참조하십시오.
-
-
RDS API ModifyDBParameterGroup 작업을 사용하여 생성한 사용자 지정 파라미터 그룹의
db2_alternate_authz_behaviour
파라미터를 수정합니다.다음 필수 파라미터를 포함합니다.
-
DBParameterGroupName
-
Parameters
파라미터 그룹 수정에 대한 자세한 내용은 Amazon RDS에서 DB 파라미터 그룹의 파라미터 수정 섹션을 참조하세요.
-
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