Oracle SERIALLY_REUSABLE pragma 패키지를 Postgre로 마이그레이션SQL - AWS 권장 가이드

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Oracle SERIALLY_REUSABLE pragma 패키지를 Postgre로 마이그레이션SQL

작성자: Vinay Paladi(AWS)

환경: PoC 또는 파일럿

‬소스:‭ Oracle Database

대상: PostgreSQL

R 타입: 리아키텍트

워크로드: Oracle, 오픈 소스

기술: 마이그레이션, 데이터베이스

AWS 서비스: AWS SCT, Amazon Aurora

요약

이 패턴은 SERIALLY_REUSABLE pragma로 정의된 Oracle 패키지를 Amazon Web Services()에서 PostgreSQL로 마이그레이션하는 접근 방식을 제공합니다 step-by-stepAWS. 이 접근 방식은 SERIALLY_REUSABLE 프래그마의 기능을 유지합니다.

PostgreSQL는 패키지의 개념과 SERIALLY_REUSABLE 프래그마를 지원하지 않습니다. Postgre 에서 유사한 기능을 얻으려면 패키지 스키마를 생성하고 스키마 내에 모든 관련 객체(예: 함수, 절차 및 유형)를 배포할 SQL수 있습니다. SERIALLY_REUSABLE pragma의 기능을 달성하기 위해 이 패턴에 제공된 예제 래퍼 함수 스크립트는 AWS Schema Conversion Tool(AWSSCT) 확장 팩 을 사용합니다.

자세한 내용은 Oracle 설명서의 SERIALLY_REUSABLE Pragma를 참조하세요.

사전 조건 및 제한 사항

사전 조건 

  • 활성 AWS 계정

  • 의 최신 버전 AWS SCT 및 필수 드라이버

  • Amazon Aurora Postgre SQL호환 버전 데이터베이스 또는 PostgreSQL 데이터베이스용 Amazon Relational Database Service(AmazonRDS)

제품 버전

  • Oracle Database 버전 10g 이상

아키텍처

소스 기술 스택

  • Oracle Database 온프레미스

대상 기술 스택

마이그레이션 아키텍처

SCT, AWS .sql 파일, 수동 변환을 AWS 사용하여 Postgre 로 이동하는 온프레미스 Oracle DB 데이터입니다SQL.

도구

AWS 서비스

기타 도구

  • pgAdmin 는 Postgre용 오픈 소스 관리 도구입니다SQL. 데이터베이스 객체를 생성, 유지 관리 및 사용하는 데 도움이 되는 그래픽 인터페이스를 제공합니다.

에픽

작업설명필요한 기술

AWS 를 설정합니다SCT.

소스 데이터베이스에 대한 AWS SCT 연결을 구성합니다. 자세한 내용은 의 소스로 Oracle Database 사용을 참조하세요AWSSCT.

DBA, 개발자

스크립트 변환.

대상 데이터베이스를 Aurora Postgre SQL-Compatible로 선택하여 Oracle 패키지를 변환AWSSCT하는 데 사용합니다.

DBA, 개발자

.sql 파일을 저장합니다.

.sql 파일을 저장하기 전에 의 프로젝트 설정 옵션을 단계당 AWS SCT 단일 파일로 수정합니다. AWS SCT 는 객체 유형에 따라 .sql 파일을 여러 .sql 파일로 구분합니다.

DBA, 개발자

코드를 변경합니다.

에서 생성한 init 함수를 열고 추가 정보 섹션의 예제와 같이 AWS SCT변경합니다. pg_serialize = 0 함수를 구현하기 위한 변수가 추가됩니다.

DBA, 개발자

변환을 테스트합니다.

init 함수를 Aurora Postgre SQL호환 데이터베이스에 배포하고 결과를 테스트합니다.

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()