확장 기능을 사용하여 Oracle 네이티브 함수를 PostgreSQL로 마이그레이션 - 권장 가이드

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

확장 기능을 사용하여 Oracle 네이티브 함수를 PostgreSQL로 마이그레이션

작성자: Pinesh Singal(AWS)

환경: PoC 또는 파일럿

소스: 데이터베이스: 관계형

대상: Amazon RDS PostgreSQL

R 유형: 리아키텍트

워크로드: Oracle, 오픈 소스

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

AWS 서비스: Amazon EC2, Amazon RDS

요약

이 마이그레이션 패턴은 및 확장을 PostgreSQL () 네이티브 내장 코드로 수정하여 오라클용 Amazon RDS 데이터베이스 인스턴스를 PostgreSQL용 Amazon RDS 또는 Amazon Aurora PostgreSQL 호환 에디션 데이터베이스로 마이그레이션하기 위한 step-by-step 지침을 제공합니다. aws_oracle_ext orafce psql 이렇게 하면 처리 시간이 절감됩니다.

이 패턴은 트랜잭션 수가 많은 수 테라바이트의 Oracle 소스 데이터베이스에 대해 다운타임이 없는 오프라인 수동 마이그레이션 전략을 설명합니다.

마이그레이션 프로세스는 aws_oracle_extorafce 확장 기능과 함께 AWS Schema Conversion Tool(AWS SCT)을 사용하여 Amazon RDS for Oracle 데이터베이스 스키마를 Amazon RDS for PostgreSQL 또는 Aurora PostgreSQL-Compatible 데이터베이스 스키마로 변환합니다. 그런 다음 코드를 PostgreSQL이 지원하는 네이티브 psql 내장 코드로 수동으로 변경합니다. 이는 확장 호출이 PostgreSQL 데이터베이스 서버의 코드 처리에 영향을 미치며 모든 확장 코드가 PostgreSQL 코드와 완전히 호환되지 않거나 호환되지 않기 때문입니다.

이 패턴은 주로 AWS SCT와 확장 기능 aws_oracle_extorafce를 사용하여 SQL 코드를 수동으로 마이그레이션하는 데 중점을 둡니다. 이미 사용된 확장 기능을 네이티브 PostgreSQL(psql) 내장 기능으로 변환합니다. 그런 다음 확장 기능에 대한 모든 참조를 제거하고 그에 따라 코드를 변환합니다.

사전 조건 및 제한 사항

사전 조건

  • 활성 상태의 AWS 계정. 

  • 운영 체제(Windows 또는 Mac) 또는 Amazon EC2 인스턴스(가동 및 실행 중) 

  • Orafce

제한 사항

aws_oracle_ext 또는 orafce 확장 기능을 사용하는 모든 Oracle 함수를 네이티브 PostgreSQL 함수로 변환할 수 있는 것은 아닙니다. PostgreSQL 라이브러리로 컴파일하려면 수동 재작업이 필요할 수 있습니다.

AWS SCT 확장 기능 사용의 한 가지 단점은 실행 및 결과 가져오기 성능이 느리다는 것입니다. 첨부 문서의 성능 비교 검사 섹션에 설명된 대로 세 코드(aws_oracle_ext, orafcepsql 기본값) 간에 Oracle SYSDATE 함수를 PostgreSQL NOW() 함수로 마이그레이션하는 간단한 PostgreSQL EXPLAIN 계획(명령문의 실행 계획)을 통해 비용을 이해할 수 있습니다.

제품 버전

  • 소스: Amazon RDS for Oracle 데이터베이스 10.2 이상(10.x용), 11g(11.2.0.3.v1 이상) 및 Enterprise Edition, Standard Edition, Standard Edition 1 및 Standard Edition 2의 경우 최대 12.2, 18c, 19c(이상)

  • 대상: Amazon RDS for PostgreSQL 또는 Aurora PostgreSQL-Compatible 데이터베이스 9.4 이상(9.x용), 10.x, 11.x, 12.x, 13.x 및 14.x(이상)

  • AWS SCT: 최신 버전(이 패턴은 1.0.632에서 테스트됨)

  • Oracle: 최신 버전(이 패턴은 3.9.0에서 테스트됨)

아키텍처

소스 기술 스택  

  • 버전 12.1.0.2.v18의 Amazon RDS for Oracle 데이터베이스 인스턴스

대상 기술 스택  

  • 버전 11.5의 Amazon RDS for PostgreSQL 또는 Aurora PostgreSQL-Compatible 데이터베이스 인스턴스

데이터베이스 마이그레이션 아키텍처

다음 다이어그램은 소스 Oracle과 대상 PostgreSQL 데이터베이스 간의 데이터베이스 마이그레이션 아키텍처를 나타냅니다. 아키텍처에는 AWS 클라우드, Virtual Private Cloud(VPC), 가용 영역, 프라이빗 서브넷, Amazon RDS for Oracle 데이터베이스, AWS SCT, Amazon RDS for PostgreSQL 또는 Aurora PostgreSQL-Compatible 데이터베이스, Oracle용 확장 기능(aws_oracle_extorafce), 구조화된 쿼리 언어(SQL) 파일이 포함됩니다.

프로세스는 다음 목록에 설명되어 있습니다.
  1. Amazon RDS for Oracle DB 인스턴스(소스 DB)를 시작합니다.

  2. aws_oracle_extorafce 확장 팩과 함께 AWS SCT를 사용하여 소스 코드를 Oracle에서 PostresQL로 변환할 수 있습니다.

  3. 변환 과정에서 PostgreSQL이 지원하는 마이그레이션된 .sql 파일이 생성됩니다.

  4. 변환되지 않은 Oracle 확장 코드를 PostgreSQL(psql) 코드로 수동으로 변환합니다.

  5. 수동 변환은 PostgreSQL이 지원하는 변환된 .sql 파일을 생성합니다.

  6. 이 .sql 파일을 Amazon RDS for PostgreSQL DB 인스턴스(대상 DB)에서 실행합니다.

도구

도구

서비스

  • AWS SCT - AWS Schema Conversion Tool(AWS SCT)은 기존 데이터베이스 스키마를 한 데이터베이스 엔진에서 다른 데이터베이스 엔진으로 변환합니다. 관계형 OLTP(Online Transactional Processing) 스키마 또는 데이터 웨어하우스 스키마를 변환할 수 있습니다. 변환된 스키마는 Amazon RDS for MySQL DB 인스턴스, Amazon Aurora DB 클러스터, Amazon RDS for PostgreSQL DB 인스턴스 또는 Amazon Redshift 클러스터에 적합합니다. 변환된 스키마는 Amazon EC2 인스턴스에서 데이터베이스와 함께 사용하거나 Amazon S3 버킷에 데이터로 저장할 수 있습니다.

    AWS SCT는 소스 데이터베이스의 데이터베이스 스키마를 대상 Amazon RDS 인스턴스와 호환되는 형식으로 자동 변환할 수 있는 프로젝트 기반 사용자 인터페이스를 제공합니다. 

    AWS SCT를 사용하여 Oracle 소스 데이터베이스에서 위에 나열된 대상 중 하나로 마이그레이션할 수 있습니다. AWS SCT를 사용하면 스키마, 뷰, 저장된 프로시저 및 함수 등의 소스 데이터베이스 객체 정의를 내보낼 수 있습니다. 

    이 외부 스키마를 사용하여 Amazon RDS for PostgreSQL 또는 Amazon Aurora PostgreSQL-Compatible Edition 데이터베이스에 연결할 수 있습니다. 

    이 패턴에서는 AWS SCT를 사용하여 확장 기능 aws_oracle_extorafce를 사용해 Oracle 코드를 PostgreSQL로 변환 및 마이그레이션하고 확장 코드를 psql 기본 또는 네이티브 내장 코드로 수동으로 마이그레이션합니다.

  • AWS SCT 확장 팩은 객체를 대상 데이터베이스로 변환할 때 필요한 소스 데이터베이스의 함수를 에뮬레이션하는 애드온 모듈입니다. AWS SCT 확장 팩을 설치하려면 먼저 데이터베이스 스키마를 변환해야 합니다.

    데이터베이스 또는 데이터 웨어하우스 스키마를 변환할 때 AWS SCT는 대상 데이터베이스에 추가 스키마를 추가합니다. 이 스키마는 변환된 스키마를 대상 데이터베이스에 쓸 때 필요한 소스 데이터베이스의 SQL 시스템 함수를 구현합니다. 이 추가 스키마를 확장 팩 스키마라고 합니다.

    OLTP 데이터베이스의 확장 팩 스키마는 소스 데이터베이스에 따라 이름이 지정됩니다. Oracle 데이터베이스의 경우 확장 팩 스키마는 AWS_ORACLE_EXT입니다.

기타 도구

  • Orafce – Orafce는 Oracle 호환 함수, 데이터 유형 및 패키지를 구현하는 모듈입니다. 누구나 사용할 수 있도록 Berkeley Source Distribution (BSD) 라이선스가 있는 오픈 소스 도구입니다. 이 orafce 모듈은 많은 Oracle 함수가 PostgreSQL에 구현되어 있기 때문에 Oracle에서 PostgreSQL로 마이그레이션하는 데 유용합니다.

코드

AWS SCT 확장 코드 사용을 방지하기 위해 일반적으로 사용되고 Oracle에서 PostgreSQL로 마이그레이션된 코드 목록은 첨부 문서를 참조하십시오.

에픽

작업설명필요한 기술

Oracle 데이터베이스 인스턴스를 생성합니다.

Amazon RDS 콘솔에서 Amazon RDS for Oracle 또는 Aurora PostgreSQL-Compatible 데이터베이스 인스턴스를 생성합니다.

일반 AWS, DBA

보안 그룹 구성

인바운드 및 아웃바운드 보안 그룹 구성

일반 AWS

데이터베이스를 생성합니다.

필요한 사용자 및 스키마로 Oracle 데이터베이스를 생성합니다.

일반 AWS, DBA

객체를 생성합니다.

객체를 생성하고 스키마에 데이터를 삽입합니다.

DBA
작업설명필요한 기술

PostgreSQL 데이터베이스 인스턴스를 생성합니다.

Amazon RDS 콘솔에서 Amazon RDS for PostgreSQL 또는 Amazon Aurora PostgreSQL 데이터베이스 인스턴스를 생성합니다.

일반 AWS, DBA

보안 그룹 구성

인바운드 및 아웃바운드 보안 그룹 구성

일반 AWS

데이터베이스를 생성합니다.

필요한 사용자 및 스키마를 사용하여 PostgreSQL 데이터베이스를 생성합니다.

일반 AWS, DBA

확장 기능을 확인합니다.

PostgreSQL 데이터베이스에 aws_oracle_extorafce가 올바르게 설치 및 구성되어 있는지 확인합니다.

DBA

PostgreSQL 데이터베이스를 사용할 수 있는지 확인합니다.

PostgreSQL 데이터베이스가 가동되고 실행 중인지 확인합니다.

DBA
작업설명필요한 기술

AWS SCT를 설치합니다.

AWS SCT의 최신 버전을 설치합니다.

DBA

AWS SCT를 구성합니다.

Oracle(ojdbc8.jar) 및 PostgreSQL(postgresql-42.2.5.jar)용 자바 데이터베이스 연결 (JDBC) 드라이버를 사용하여 AWS SCT를 구성합니다.

DBA

AWS SCT 확장 팩 또는 템플릿을 활성화합니다.

AWS SCT 프로젝트 설정에서 Oracle 데이터베이스 스키마의 aws_oracle_extorafce 확장 기능을 사용하여 내장된 함수 구현을 활성화합니다.

DBA

스키마를 변환합니다.

AWS SCT에서 스키마 변환을 선택하여 스키마를 Oracle에서 PostgreSQL로 변환하고 .sql 파일을 생성합니다.

DBA
작업설명필요한 기술

코드를 수동으로 변환합니다.

첨부 문서에 설명된 대로 확장 지원 코드의 각 줄을 psql 기본 내장 코드로 수동으로 변환합니다. 예를 들면 AWS_ORACLE_EXT.SYSDATE() 또는 ORACLE.SYSDATE()NOW()로 변경합니다.

DBA

코드 유효성 검사

(선택 사항) PostgreSQL 데이터베이스에서 임시로 실행하여 각 코드 줄을 검증합니다.

DBA

PostgreSQL 데이터베이스에서 객체를 생성합니다.

PostgreSQL 데이터베이스에서 객체를 생성하려면 AWS SCT에서 생성되고 이전 두 단계에서 수정된 .sql 파일을 실행합니다.

DBA

관련 리소스

추가 정보

자세한 내용은 첨부 문서의 코드를 수동으로 변환하기 위한 세부 명령어(구문 및 예제 포함)를 따르십시오.

첨부

이 문서와 관련된 추가 콘텐츠에 액세스하려면 attachment.zip 파일의 압축을 풉니다.