기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
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 온프레미스
대상 기술 스택
Aurora Postgre SQL-Compatible
또는 Amazon RDS for PostgreSQL AWS SCT
마이그레이션 아키텍처
도구
AWS 서비스
AWS Schema Conversion Tool(AWS SCT)는 소스 데이터베이스 스키마와 사용자 지정 코드의 대부분을 대상 데이터베이스와 호환되는 형식으로 자동 변환하여 이종 데이터베이스 마이그레이션을 지원합니다.
Amazon Aurora Postgre SQL-Compatible Edition은 PostgreSQL 배포를 설정, 운영 및 확장하는 데 도움이 되는 완전 관리형 ACID규정 준수 관계형 데이터베이스 엔진입니다.
Amazon Relational Database Service(Amazon RDS) for PostgreSQL는 AWS 클라우드에서 PostgreSQL 관계형 데이터베이스를 설정, 운영 및 확장하는 데 도움이 됩니다.
기타 도구
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, 개발자 |
코드를 변경합니다. | 에서 생성한 | DBA, 개발자 |
변환을 테스트합니다. |
| 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()