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 설명서의 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 파라미터를 구성하는 방법
  1. DB 인스턴스에서 사용하는 것과 다른 사용자 정의 DB 파라미터 그룹을 사용하려면 새로운 DB 파라미터 그룹을 생성합니다. 기존 보유 라이선스 사용(BYOL) 모델을 사용하는 경우 새 사용자 지정 파라미터 그룹에 IBM ID가 포함되어 있어야 합니다. 이 ID에 대한 자세한 내용은 Db2에 기존 보유 라이선스 사용을 위한 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 명령을 실행하여 사용자 지정 파라미터 그룹을 생성합니다. 기존 보유 라이선스 사용(BYOL) 모델을 사용하는 경우 새 사용자 지정 파라미터 그룹에 IBM ID가 포함되어 있어야 합니다. 이 ID에 대한 자세한 내용은 Db2에 기존 보유 라이선스 사용을 위한 IBM ID 섹션을 참조하세요.

    다음 필수 옵션을 포함합니다.

    • --db-parameter-group-name – 생성하려는 파라미터 그룹의 이름입니다.

    • --db-parameter-group-family – Db2 엔진 에디션 및 메이저 버전입니다. 유효 값은 db2-se-11.5db2-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"
  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을 수정하는 방법을 보여줍니다.

    대상 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 파라미터를 구성하는 방법
  1. DB 인스턴스에서 사용하는 것과 다른 사용자 정의 DB 파라미터 그룹을 사용하려면 Amazon RDS API CreateDBParameterGroup 작업을 사용하여 새로운 DB 파라미터 그룹을 생성합니다. 기존 보유 라이선스 사용(BYOL) 모델을 사용하는 경우 새 사용자 지정 파라미터 그룹에 IBM Db2 ID가 포함되어 있어야 합니다. 이 ID에 대한 자세한 내용은 Db2에 기존 보유 라이선스 사용을 위한 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