PostgreSQL · 2026-04-20

Oracle에서 PostgreSQL로 데이터 마이그레이션 핵심 점검

Oracle에서 PostgreSQL로 이전할 때 필요한 전반적 절차와 체크포인트, ora2pg 사용법과 oracle 함수 postgres 변환 예시를 포함한 마이그레이션 전략

작성일 : 2026-04-20 ㆍ 작성자 : 관리자
post
목차

소개

데이터베이스 마이그레이션은 단순한 데이터 복사가 아니다. 설계, 데이터 타입, 함수와 트리거, 성능 특성까지 검토해야 한다. 이 문서에서는 oracle to postgres 마이그레이션 관점에서 전체 흐름을 설명하고, ora2pg 사용법과 oracle 함수 postgres 변환 사례를 통해 실무에서 흔히 마주치는 문제를 해결하는 방법을 제시한다.

사전 준비와 계획

환경 분석

다음 항목을 체크한다.

  • 스키마 구조와 객체 수량
  • 데이터 크기와 주요 쿼리 패턴
  • 사용된 Oracle 고유 기능(예: 패키지, 시퀀스, 옵티마이저 힌트)
  • 연동 애플리케이션의 의존성

우선순위 설정

핵심 테이블과 트랜잭션 경로를 먼저 마이그레이션한다. 리포팅용 조회나 배치성 데이터는 후순위로 둔다. 검증 가능한 작은 단위로 진행하면 리스크를 줄일 수 있다.

도구 선택: ora2pg 사용법 개요

ora2pg는 Oracle 스키마와 데이터를 PostgreSQL 호환 SQL로 변환하는 오픈소스 툴이다. 설정 파일로 세부 옵션을 제어하고, DDL 생성과 데이터 덤프를 모두 지원한다.

기본 설치 및 실행 예

sudo apt-get install ora2pg
# 설정 파일 경로 지정 후 분석 실행
ora2pg -c /etc/ora2pg/ora2pg.conf -t SHOW_VERSION

주요 설정 항목은 ORACLE_DSN, ORACLE_USER, ORACLE_PWD, PG_DSN 등이다. 변환할 객체 타입은 TYPES, EXCLUDE, INCLUDE로 조정할 수 있다.

권장 설정 예

ORACLE_DSN dbi:Oracle:host=oracle_host;sid=ORCL;port=1521
ORACLE_USER app_user
ORACLE_PWD app_pwd
PG_DSN dbi:Pg:dbname=targetdb;host=pg_host;port=5432
EXPORT_SCHEMA 1
DATA_LIMIT 10000

스키마와 데이터 타입 매핑

타입 매핑은 마이그레이션 성공의 핵심이다. 대표 매핑을 미리 정의해두면 변환 후 수작업을 줄일 수 있다.

  • VARCHAR2(n) → VARCHAR(n)
  • NUMBER(p,s) → NUMERIC(p,s) 또는 INTEGER(정수 범위에 따라)
  • DATE → TIMESTAMP 또는 DATE(시간 정보 필요 여부에 따라)
  • BLOB → BYTEA

주의할 점은 Oracle의 NUMBER 무정밀형과 PostgreSQL의 동작 차이다. 비즈니스 요구에 따라 NUMERIC으로 고정하는 편이 안전하다.

프로시저와 함수 변환

oracle 함수 postgres 변환 작업은 난이도가 높다. PL/SQL 고유 문법, 커서 처리, 패키지 구조를 PostgreSQL의 PL/pgSQL로 바꿔야 한다. 우선순위를 두고 빈도 높은 함수부터 변환한다.

변환 원칙

  • NVL → COALESCE로 변환
  • SYSTIMESTAMP/SYSDATE → CURRENT_TIMESTAMP 또는 now()
  • ROWNUM 기반 로직 → LIMIT/ROW_NUMBER 으로 재작성
  • 패키지는 개별 함수로 분리하거나 Schemes로 대체

간단한 변환 사례

-- Oracle PL/SQL
CREATE OR REPLACE FUNCTION get_total(p_id NUMBER) RETURN NUMBER IS
  v_total NUMBER;
BEGIN
  SELECT NVL(SUM(amount),0) INTO v_total FROM payments WHERE user_id = p_id;
  RETURN v_total;
END;
/

-- PostgreSQL PL/pgSQL 변환 예
CREATE OR REPLACE FUNCTION get_total(p_id integer) RETURNS numeric AS $$
DECLARE
  v_total numeric;
BEGIN
  SELECT COALESCE(SUM(amount),0) INTO v_total FROM payments WHERE user_id = p_id;
  RETURN v_total;
END;
$$ LANGUAGE plpgsql;

시퀀스와 트리거 처리

Oracle의 시퀀스와 트리거 구성은 PostgreSQL에서도 유사하지만 문법 차이가 있다. 시퀀스 사용은 그대로 옮기되 트리거에서는 TG_OP, NEW, OLD 처리 방식에 맞춰 재작성한다.

성능 고려 사항

인덱스 전략과 실행계획이 변경된다. 다음 사항을 검토한다.

  • 통계 수집: ANALYZE를 통해 통계 확보
  • 파티셔닝: 큰 테이블은 파티셔닝 재설계 검토
  • 인덱스 재검증: 복합 인덱스 순서와 부분 인덱스 활용

오라클에서 쓰던 힌트는 PostgreSQL에서 무시된다. 실행계획을 비교하고 쿼리를 리팩토링해야 할 수 있다.

테스트 전략과 커트오버

테스트는 반복적이고 단계적으로 수행한다. 단위 테스트, 통합 테스트, 성능 테스트를 거친다. 데이터 정합성 검증을 자동화하면 오류를 조기 발견할 수 있다.

  • 샘플 데이터로 변환 검증
  • 증분 복제으로 동기화 테스트
  • 최종 커트오버는 짧은 다운타임 계획

체크리스트

  • 스키마 매핑 검토 완료
  • ora2pg로 DDL/데이터 변환 테스트 성공
  • 핵심 기능의 함수/프로시저 변환 및 검증 완료
  • 성능 테스트 통과 및 인덱스 재조정
  • 백업과 롤백 계획 수립

마무리

마이그레이션은 기술적 작업과 조직적 조정이 함께 필요하다. ora2pg 사용법을 숙지하고, oracle 함수 postgres 변환을 위한 샘플을 만들어 두면 전환 리스크를 크게 줄일 수 있다. 단계별 검증과 자동화된 테스트가 성공의 핵심이다.

oracle to postgres 마이그레이션 ora2pg 사용법 oracle 함수 postgres 변환 PostgreSQL 마이그레이션 데이터 타입 매핑 시퀀스 트리거 변환 성능 튜닝 테스트 전략