Oracle to PostgreSQL (SCT + DMS)
Oracle 데이터베이스를 AWS 기반 PostgreSQL로 마이그레이션 하기 | Amazon Web Services
Oracle 데이터베이스를 AWS 기반 PostgreSQL로 마이그레이션 하기 | Amazon Web Services
이 블로그 게시물에서는 Oracle 데이터베이스를 AWS 기반의 PostgreSQL로 마이그레이션하는 방법을 소개합니다. 데이터베이스 마이그레이션에서 가장 중요한 두 가지 요소는 스키마 변환과 데이터
aws.amazon.com
AWS SCT(AWS schema conversion tool) : 스키마 분석
- 대상 엔진 선택을 위한 데이터베이스 마이그레이션 진단 보고서 제공
- 기존 데이터베이스 스키마를 다른 데이터베이스 엔진으로 변환
즉, 소스 데이터베이스 스키마 및 코드를 대상 데이터베이스와 호환되는 형식으로 자동으로 변환
* 스키마 : 데이터 베이스에서 자료의 구조, 자료의 표현 방법, 자료 간의 관계를 형식 언어로 정의한 구조 - 수동 변환이 필요한 부분을 알려주는 코드 브라우저
- 테이블의 SQL 편집 및 업데이트 기능
- mapping view를 통해 mapping 규칙을 설정(테이블의 위치를 이동하거나 이름 변경 가능)
DMS (Database Migration Service)
- 데이터베이스 및 데이터웨어하우스를 빠르고 안전하게 마이그레이션 또는 복제하는 서비스
- 동일 또는 서로 다른 데이터베이스 간 복제
- 마이그레이션 중 어플리케이션 서비스 유지
복제 인스턴스 (Replication Instance)
- 원본과 대상 간의 실제 데이터 마이그레이션 수행
- 마이그레이션 중에 트랜잭션 로그도 캐시
엔드포인트
- 복제 인스턴스가 데이터베이스에 연결할 때 사용됨
- 소스 데이터베이스 엔드포인트와 타겟 데이터베이스 엔드포인트 필요
마이그레이션 태스크
- 데이터 마이그레이션을 수행할 작업을 생성
- 마이그레이션 방식
- 전체 로드
- 전체 로드 및 지속적 변경 사항 복제
- 데이터 변경 사항만 복제
- 특정 테이블만 마이그레이션하거나 이름을 변경하는 등 세부적으로 제어 가능
1. 마이그레이션 시작
2. DMS는 소스 데이터 스토어에 있는 테이블의 데이터를 타겟 데이터 스토어에 있는 테이블로 로드
3. 전체 로드가 진행되는 동안 로드 중인 테이블에 적용된 변경 사항은 복제 서버에 캐시
4. 전체 로드가 완료되면 DMS는 캐시 된 변경 사항을 적용하기 시작
5. 변경 사항이 적용되면 DMS는 진행 중인 복제 단계의 트랜잭션으로써 변경 사항을 수집하기 시작
6. 지속적 복제 단계가 시작되면 트랜잭션의 백로그는 일반적으로 원본과 대상 데이터베이스 사이에서 일부 지연 시간을 유발
7. 마이그레이션은 트랜잭션 백로그를 통해 진행된 후 일정한 상태에 도달
8. 이 시점에서 애플리케이션을 종료하고 남은 트랜잭션을 대상에 적용하고 애플리케이션을 불러옴
* 트랜잭션 : 데이터베이스의 상태를 변화시키기 위해 수행하는 작업의 단위
AWS SCT + DMS
SCT
- sct 설치 및 jdbc 파일 다운로드하여 sct에서 경로 설정
- source, target DB 연결
- Mapping view → create mapping
- Migration fules의 schemas는 대문자로 작성
- Main view → 변환을 원하는 schema 및 table 선택 → convert schema
- 오류가 난 테이블 확인 가능(느낌표)
- 수정이 필요하다면 sql 수정 가능
- target DB 목록에서 Apply to database
Installing, verifying, and updating AWS SCT - AWS Schema Conversion Tool
Installing, verifying, and updating AWS SCT - AWS Schema Conversion Tool
Download the latest version of the driver available. The following table includes the lowest version of database driver supported by AWS SCT.
docs.aws.amazon.com
DMS
- 복제 인스턴스 생성
- 엔드 포인트 source와 target 2가지 생성
- 데이터베이스 마이그레이션 태스크 생성 및 실행
- 선택 규칙
- 변환하거나 제외할 테이블 선택
- 변환 규칙 추가
- 스키마를 넣어야 할 곳이나 문자 변환 설정
- trigger 백업 후 제거하고 진행하는 것을 추천
- 선택 규칙
- cdc를 이용하려면 오라클에서 archivelog mode가 켜져있어야 함!
Migrating Data to AWS Using the AWS Schema Conversion Tool: A Preview
Oracle to PostgreSQL 이관 방법 정리
- ora2pg
- Perl 설치 필수
- 데이터베이스 스키마와 데이터를 스캔하고 추출한 다음 데이터베이스를 채우는 데 사용할 수 있는 PostgreSQL 호환 SQL 스크립트를 생성.
- DB에서 얼마나 많은 기능을 사용하고 있는지 확인 필요
- 인덱스 및 파티션/서브파티션이 있다면 어려울 수도
- 주의 사항
- ora2pg 유사 플러그인 : ora_migrator
- EDB - EPAS(EDB PostgreSQL Advanced server)
- • PostgreSQL을 이용한 상용 제품
- 오라클의 데이터 타입, 스키마 오브젝트, SQL 구문, 오라클 함수 및 패키지를 지원하여 오라클 DB와 호환성 제공
- 어플리케이션 수정을 최소화하여 시스템 구축이 용이
- Azure Database for PostgreSQL
- postgreSQL 기반으로 하는 마이크로소프트 클라우드의 관계형 데이터베이스
- ora2pg 이용
- 마이그레이션 회사
- CYBERTEC
- 클라우드 postgreSQL은 아닌 거 같음
- CYBERTEC
- Google Cloud
- ora2pg 이용
SwissSQL여러 데이터베이스에서 저장 프로시저, SQL, 스키마 및 데이터를 마이그레이션 할 수 있는 포괄적인 데이터베이스 마이그레이션 솔루션 제공30일 무료 평가판 사용 가능
PPAS(postgresql plus advance server) - 다우기술,2015
주의 사항
1. DUAL
오라클에서 사용하는 DUAL 은 제외하고 사용한다.
SELECT 1 FROM DUAL 과 같이 DUAL 을 사용할 수 없다.
EX> SELECT 1 로만 작성하면 된다.
2. SYSDATE
NOW() 함수를 사용한다.
EX> SELECT TO_CHAR(NOW(), 'YYYY-MM-DD')
3. NVL
COALESCE 함수를 사용한다
SELECT COALESCE(USER_ID, 0) FROM USER_INFO
4. SEQUENCE (시퀀스)
오라클 시퀀스 문법은 시퀀스명.NEXTVAL
PostgreSQL 에서는 NEXTVAL('시퀀스명') 으로 사용한다.
5. ROWNUM
오라클(Oracle)에서 사용하는 ROWNUM 을 PostgreSQL에서 사용하는 방법
▶ WHERE 절에서 사용
SELECT USER_ID FROM USER_INFO LIMIT 3
▶ SELECT 절에서 사용
SELECT (ROW_NUMBER() OVER()) AS ROWNUM , USER_ID FROM USER_INFO
==> ROW_NUMBER() OVER() 함수를 통하여 ROWNUM을 생성한다.
6. DECODE
PostgreSQL에서는 DECODE 함수를 제공하지 않는다.
CASE문으로 변경한다.
CASE WHEN REG_TYPE = '003' THEN ITEM_TYPE ='QM' ELSE ITEM_TYPE ='GN' END
7. 데이터 형변환
컬럼 혹은 값에 ::[변환할 데이터타입] 을 붙여서 변환
EX> SELECT '1'::int
8. OUTER JOIN
▶ 오라클
SELECT D.DNAME, E.EMP_NO FROM DEPT D, EMP E
WHERE D.DEPT_NO = E.DEPT_NO(+)
▶ PostgreSQL
SELECT D.DNAME, E.EMP_NO
FROM DEPT D
LEFT OUTER
JOIN EMP E ON D.DEPT_NO = E.DEPT_NO;
PostgreSQL에서는 ANSI SQL 표준을 사용(오라클에서도 정상 동작)
RIGHT OUTER JOIN, FULL OUTER JOIN도 사용 가능.
9. MERGE INTO의 경우는 쿼리문을 분리하여 처리로직으로 변경해준다.변경방법은 아래 두가지중에 하나를 선택해도 되고 다른 방법을 써도 된다.
9-1 조건이 맞는지(MATCHED)에 대한 SELECT문을 실행시켜서 결과값이 있으면 UPDATE문을 실행시켜 주고 결과값이 없으면 INSERT문을 실행시켜준다.
9-2 UPDATE문을 실행해서 UPDATE가 일어나면 그대로 가고 UPDATE가 일어나지 않으면 INSERT문을 실행시킨다.
10. START WITH CONNET BY 문은 WITH를 사용한 RECURSIVE 쿼리로 변경
출처:
https://handam.tistory.com/232
How To Migrate Data From Oracle To PostgreSQL Using Ora2pg - Database Tutorials