본문 바로가기

기술

Postgresql 마이그레이션도구 Ora2Pg 소개

기존 오라클 DB에서 Postgresql로 데이터를 마이그레이션 하기위해 사용하는 Ora2Pg에 대해서 소개하고자 합니다.

Postgresql의 상용버전인 PPAS(Postgresql Plus Advance Server)는 별도의 마이그레이션 툴킷을 제공하고 있고

Postgresql용 마이그레이션 도구로는 SwissSQL이라는 상용툴이 있습니다.

Ora2Pg는 오픈소스 마이그레이션 도구로써 http://ora2pg.darold.net 에서 현재 8.13 버전까지 릴리즈가 되어 있습니다.

이번 포스트에서는 Ora2Pg를 설치하고 간단하게 설정하는 법에 대해서 설명하겠습니다.

 

1. 설치 및 환경 설정

Ora2Pg는 Perl로 작성이 되어 있기때문에 반드시 Perl이 설치되어 있어야 합니다. 또 한, 오라클 접속 드라이브를 설치해야 하기 

때문에 Ora2Pg가 설치된 곳에는 Oracle 서버 혹은 클라이언트가 반드시 설치되어 있어야 합니다. Ora2Pg는 윈도우와 리눅스

두가지 플랫폼에서 사용 할 수 있지만 본 포스팅에서는 리눅스 기준으로 설명하도록 하겠습니다.(사실 윈도우도 크게 다르지 않습

니다. 저는  CentOS에 yum 을 통해 Perl을 설치하였습니다.

Perl설치가 끝나면 몇 가지 Perl 모듈을 설치해야 합니다. 모듈은 cpan을 통해 설치 할 수 있으며 cpan으로 모듈을 설치 하는 방법

은 구글링을 통해 쉽게 찾을 수 있으므로 본 포스트에서는 언급하지 않겠습니다. 아래는 설치해야할 모듈들 입니다.

  • DBD::Oracle
  • DBI::Oracle
  • DBD::Pg
  • Compress:Zlib

모듈 설치시 대소문자를 구분하기 때문에 정확하게 입력을 하셔야 설치가 됩니다. 여기까지가 끝났으면 .bash_profile을 열어서

Oracle이 설치된 경로를 환경변수로 설정해야 합니다. 제가 설정했던 .bash_profile은 아래와 같습니다.

 ORACLE_BASE=/oracle;
 ORACLE_HOME=/oracle/app;
 ORACLE_SID=orcl;
 LD_RUN_PATH=$ORACLE_HOME/lib;
 LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/local/lib:/usr/pgsql-9.1/lib:/root/nicejin/lib_pg;
 C_INCLUDE_PATH=/usr/pgsql-9.1/include;
 CPLUS_INCLUDE_PATH=/usr/pgsql-9.1/include:/root/nicejin/lib_pg:/root/nicejin;


export ORACLE_BASE
export ORACLE_HOME
export ORACLE_SID
export LD_RUN_PATH
export LD_LIBRARY_PATH
export C_INCLUDE_PATH
export CPLUS_INCLUDE_PATH

Perl 설치와 Oracle 환경 변수 설정이 끝났으니 Ora2Pg를 설치해 봅시다. http://ora2pg.darold.net 에서 Ora2Pg를 다운 받아

압축을 풀고 아래와 같이 설치 합니다.

 perl MakeFile.PL
 make && make install

설치가 끝나면  /etc/ora2pg/에 ora2pg.conf 파일이 생성됩니다. 마이그레이션 할 항목 및 환경 설정을 하기위해 사용되는 파일로

타겟인 Oracle DB의 주소, 스키마, exoprt 할 타입( TABLE,DATA 등), 인덱스나 제약조건을 추출시 Drop 할건지 여부 등 다양한

옵션등을 지정 할 수 있습니다.  아래는 제가 설정했던 ora2pg.conf 파일입니다.

####################  Ora2Pg Configuration file   #####################

# Support for including common config file that may containt any
# of the following configuration directives.
#IMPORT common.conf

# Set this directive to a file containing PL/SQL Oracle Code like function,
# procedure or a full package body to prevent Ora2Pg from connecting to an
# Oracle database end just apply his convertion tool to the content of the
# file. This can only be used with the following export type: PROCEDURE,
# FUNCTION or PACKAGE. If you don't know what you do don't use this directive.
#INPUT_FILE dump.sql

# Set the Oracle home directory
ORACLE_HOME /oracle/app

# Set Oracle database connection (datasource, user, password)
# Your SID should be declared on your tnsnames.ora file
ORACLE_DSN  dbi:Oracle:host=xxx.xxx.xxx.xxx;sid=orcl
ORACLE_USER system
ORACLE_PWD  xxxxxxx

# Set this to 1 if you connect as simple user and can not extract things
# from the DBA_... tables. It will use tables ALL_... This will not works
# with GRANT export, you should use an Oracle DBA username at ORACLE_USER
USER_GRANTS     0

# Trace all to stderr
DEBUG       1

# Export Oracle schema to PostgreSQL schema
EXPORT_SCHEMA   1

# Oracle schema/owner to use
SCHEMA      hr

......................

# Type of export. Values can be the following keyword:
#   TABLE       Export tables
#   PACKAGE     Export packages
#   DATA        Export datas from table as INSERT statement
#   COPY        Export datas from table as COPY statement
#   VIEW        Export views
#   GRANT       Export grants
#   SEQUENCE    Export sequences
#   TRIGGER     Export triggers
#   FUNCTION    Export functions
#   PROCEDURE   Export procedures
#   TABLESPACE  Export tablespace (PostgreSQL >= 8 only)
#   TYPE        Export user defined Oracle types
#   PARTITION   Export range or list partition (PostgreSQL >= v8.4)
TYPE        TABLE

......................

 

type 을 export 하는 기능은 환경설정말고 ora2pg를 실행할때 인자로 줄 수 있습니다.

자세한 설명은 설치 파트에서 설명해 드리겠습니다.

2. 실행

Ora2Pg는 변환된 SQL문을 Postgrsql 서버에 바로 삽입하거나 SQL문 형태로 파일로 변환 합니다.

ora2pg.conf 안에

#PG_DSN    
#PG_USER       
#PG_PWD    

세가지 항목에 #을 제거하고 DB 주소 ID,패스워드를 입력하면 됩니다.  이 항목을 설정하지 않으면 변환된 SQL문을 파일로 만들어

줍니다. 제가 설정한 ora2pg.conf에는 export 할 내용을 TABLE로만 잡아 두었는데 DATA로 출력하고 싶을 경우 아래와 같이 인자

를 주면 됩니다.

ora2pg -t DATA -o DATA.sql

이렇게 명령을 주면 TABLE 관련 SQL문이 담긴 output.sql 파일과 데이타만 담긴 DATA.sql파일이  출력이 됩니다.

이번 포스팅은 여기서 마치고 다음 포스팅에서는 ora2pg.conf의 옵션 설명 및 실행 방법에 대해 좀더 자세히 설명 드리겠습니다.

 

'기술' 카테고리의 다른 글

블록체인 환경에서 난수 생성 - 1  (0) 2019.04.22
RANDAO  (0) 2019.04.15
블록체인에서의 난수 생성  (0) 2019.03.28
탈중앙화(Decentralization)에 관하여  (0) 2019.02.25
블록체인에 대한 단상  (0) 2019.02.20