기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
Oracle SERIALLY_REUSABLE 프라그마 패키지를 PostgreSQL로 마이그레이션
작성자: Vinay Paladi(AWS)
요약
이 패턴은 SERIALLY_REUSABLE 프라그마로 정의된 Oracle 패키지를 Amazon Web Services(AWS) 의 PostgreSQL로 마이그레이션하기 위한 단계별 접근 방식을 제공합니다. 이 접근 방식은 SERIALLY_REUSABLE 프라그마의 기능을 유지합니다.
PostgreSQL은 패키지 개념과 SERIALLY_REUSABLE 프라그마를 지원하지 않습니다. PostgreSQL에서 유사한 기능을 사용하려면 패키지용 스키마를 만들고 스키마 내에 모든 관련 객체(예: 함수, 프로시저, 형식) 를 배포하면 됩니다. SERIALLY_REUSABLE 프라그마의 기능을 구현하기 위해 이 패턴에서 제공되는 예제 래퍼 함수 스크립트는 AWS Schema Conversion Tool(AWS SCT) 확장 팩을 사용합니다.
자세한 내용은 Oracle 설명서의 SERIALLY_REUSABLE 프라그마
사전 조건 및 제한 사항
사전 조건
활성 상태의 AWS 계정
최신 버전의 AWS SCT 및 필수 드라이버
Amazon Aurora PostgreSQL-Compatible Edition 데이터베이스 또는 Amazon Relational Database Service(Amazon RDS) for PostgreSQL 데이터베이스
제품 버전
Oracle Database 버전 10g 이상
아키텍처
소스 기술 스택
Oracle Database 온프레미스
대상 기술 스택
Aurora PostgreSQL-Compatible
또는 Amazon RDS for PostgreSQL AWS SCT
마이그레이션 아키텍처

도구
서비스
AWS Schema Conversion Tool(AWS SCT)은 소스 데이터베이스 스키마와 대부분의 사용자 지정 코드를 대상 데이터베이스와 호환되는 형식으로 자동 변환하여 이기종 데이터베이스 마이그레이션을 지원합니다.
Amazon Aurora PostgreSQL-Compatible Edition은 PostgreSQL 배포를 설정, 운영 및 확장할 수 있는 완전 관리형 ACID 준수 관계형 데이터베이스 엔진입니다.
Amazon Relational Database Service(Amazon RDS) for PostgreSQL은 AWS 클라우드에서 PostgreSQL 관계형 데이터베이스를 설정, 운영 및 조정하는 데 도움이 됩니다.
기타 도구
pgAdmin
은 PostgreSQL을 위한 오픈 소스 관리 도구입니다. 데이터베이스 객체를 생성, 유지 관리 및 사용하는 데 도움이 되는 그래픽 인터페이스를 제공합니다.
에픽
작업 | 설명 | 필요한 기술 |
---|---|---|
AWS SCT를 설정합니다. | 소스 데이터베이스에 대한 AWS SCT 연결을 구성합니다. 자세한 내용은 Oracle Database를 AWS SCT의 소스로 사용을 참조하십시오. | DBA, 개발자 |
스크립트 변환. | AWS SCT를 사용하면 대상 데이터베이스를 Aurora PostgreSQL-Compatible로 선택하여 Oracle 패키지를 변환할 수 있습니다. | DBA, 개발자 |
.sql 파일을 저장합니다. | .sql 파일을 저장하기 전에 AWS SCT의 프로젝트 설정 옵션을 스테이지별 단일 파일로 수정합니다. AWS SCT는 객체 유형에 따라 .sql 파일을 여러 .sql 파일로 분리합니다. | DBA, 개발자 |
코드를 변경합니다. | AWS SCT에서 생성한 | DBA, 개발자 |
변환을 테스트합니다. | Aurora PostgreSQL-Compatible 데이터베이스에 | DBA, 개발자 |
관련 리소스
추가 정보
Source Oracle Code:
CREATE OR REPLACE PACKAGE test_pkg_var
IS
PRAGMA SERIALLY_REUSABLE;
PROCEDURE function_1
(test_id number);
PROCEDURE function_2
(test_id number
);
END;
CREATE OR REPLACE PACKAGE BODY test_pkg_var
IS
PRAGMA SERIALLY_REUSABLE;
v_char VARCHAR2(20) := 'shared.airline';
v_num number := 123;
PROCEDURE function_1(test_id number)
IS
begin
dbms_output.put_line( 'v_char-'|| v_char);
dbms_output.put_line( 'v_num-'||v_num);
v_char:='test1';
function_2(0);
END;
PROCEDURE function_2(test_id number)
is
begin
dbms_output.put_line( 'v_char-'|| v_char);
dbms_output.put_line( 'v_num-'||v_num);
END;
END test_pkg_var;
Calling the above functions
set serveroutput on
EXEC test_pkg_var.function_1(1);
EXEC test_pkg_var.function_2(1);
Target Postgresql Code:
CREATE SCHEMA test_pkg_var;
CREATE OR REPLACE FUNCTION test_pkg_var.init(pg_serialize IN INTEGER DEFAULT 0)
RETURNS void
AS
$BODY$
DECLARE
BEGIN
if aws_oracle_ext.is_package_initialized( 'test_pkg_var' ) AND pg_serialize = 0
then
return;
end if;
PERFORM aws_oracle_ext.set_package_initialized( 'test_pkg_var' );
PERFORM aws_oracle_ext.set_package_variable( 'test_pkg_var', 'v_char', 'shared.airline.basecurrency'::CHARACTER
VARYING(100));
PERFORM aws_oracle_ext.set_package_variable('test_pkg_var', 'v_num', 123::integer);
END;
$BODY$
LANGUAGE plpgsql;
CREATE OR REPLACE FUNCTION test_pkg_var.function_1(pg_serialize int default 1)
RETURNS void
AS
$BODY$
DECLARE
BEGIN
PERFORM test_pkg_var.init(pg_serialize);
raise notice 'v_char%',aws_oracle_ext.get_package_variable( 'test_pkg_var', 'v_char');
raise notice 'v_num%',aws_oracle_ext.get_package_variable( 'test_pkg_var', 'v_num');
PERFORM aws_oracle_ext.set_package_variable( 'test_pkg_var', 'v_char', 'test1'::varchar);
PERFORM test_pkg_var.function_2(0);
END;
$BODY$
LANGUAGE plpgsql;
CREATE OR REPLACE FUNCTION test_pkg_var.function_2(IN pg_serialize integer default 1)
RETURNS void
AS
$BODY$
DECLARE
BEGIN
PERFORM test_pkg_var.init(pg_serialize);
raise notice 'v_char%',aws_oracle_ext.get_package_variable( 'test_pkg_var', 'v_char');
raise notice 'v_num%',aws_oracle_ext.get_package_variable( 'test_pkg_var', 'v_num');
END;
$BODY$
LANGUAGE plpgsql;
Calling the above functions
select test_pkg_var.function_1()
select test_pkg_var.function_2()