본문 바로가기

Oracle GoldenGate2

ORACLE GoldenGate 11g for MariaDB v1.0

 ORACLE GoldenGate 11g for MariaDB v 1.0

 

Date

Ver

Etc.

13.07.18

1.0

 

 

 

 

 

 

 

 

 

1.    ORACLE to MariaDB

이 문서에서는 ORACLE Source Target MariaDB 로 복제하는 경우에 대해 이야기 한다.

 

MariaDB (아마도 5.5 버전까지는…) MySQL 과 거의 동일한 DBMS 로 각종 MySQL Client

MariaDB 에 대해 사용가능했듯이 GoldenGate 도 마찬가지로 사용 가능하다.

 

GoldenGate for MySQL for ORACLE 과 설치과정이 동일하다.

 

2.    Environment

<Source>

ORACLE

GoldenGate for ORACLE

OGG SERVICE PORT : 7809

Character Set : KO16KSC5601

 

<Target>

MariaDB

GoldenGate for MySQL

OGG SERVICE PORT : 7809

MariaDB SERVICE PORT : 3306

Character Set : euckr

 

 

3.    Preparation

아래와 같은 준비물이 필요하다.

l  ORACLE (설치되어 있다고 가정한다.)

l  MariaDB (설치되어 있다고 가정한다.)

l  ORACLE GoldenGate for ORACLE

l  ORACLE GoldenGate for MySQL

 

GoldenGate ORACLE 혹은 MariaDB 와 동일한 그룹으로 별도의 유저에 구성한다.

 

4.    Mapping ORACLEs Datatypes to Marias

ORACLE 의 다음 데이터 타입에 대응하는 MariaDB 의 데이터 타입은 다음과 같다.

 

l  NUMBER à BIGINT

l  DATE à DATETIME

l  VARCHAR2 à VARCHAR

l  CLOB à LONGTEXT

 

러프하게 이야기해서 위와 같다는 이야기고 사실은 데이터 길이에 따라 다양해진다.

각 데이터 타입에 대해 부연하면 다음과 같다.

 

NUMBER 타입의 경우 데이터 길이에 따라 TINYINT, DECIMAL, BIGINT 를 가질 수 있다.

BIGINT 의 경우 가장 긴 숫자 데이터 타입인데 오라클에 비해 표현 범위가 작다.

흔하지 않지만 정말 긴 숫자 데이터를 쓰고 이 길이가 MariaDB 의 표현 범위를

넘어간다면 MariaDB 의 사용을 재고해야 할 것이다.

 

DATE 타입의 경우 DATE 로 어느 범주까지 표현하냐에 따라 MariaDB 의 데이터 타입을

선택해야 한다.

MariaDB datetime 은 연,,,,,초 를 표현가능하다.

여기에 타임존 정보가 필요하다면 다른 타입을 사용해야 한다.

 

varchar2 의 경우 varchar 에 대응되는데 데이터 길이에 유념해야 한다.

/*+ MariaDB String data type 의 가용 길이는 사용 캐릭터셋에 따라 유동적이다. */

 

CLOB 의 경우도 MariaDB LONGTEXT 로 지원 가능한 사이즈를 넘어가는 관계로

데이터 길이에 대한 사전조사가 필요하다.

 

 

5.    GoldenGate for Oracle (Source)

 

OGG> create subdirs 을 수행 후 파라미터 편집을 진행한다.

 

<GLOBALS>

checkpointtable ggs.ggtchkpt

 

<MGR>

port 7809

PURGEOLDEXTRACTS /ogg/dirdat/* , USECHECKPOINTS, MINKEEPHOURS 24

DOWNCRITICAL

DOWNREPORTMINUTES 30   

LAGREPORTMINUTES 5

LAGINFOMINUTES 10

LAGCRITICALMINUTES 60   

AUTORESTART ER *, RETRIES 3, WAITMINUTES 1, RESETMINUTES 10

SYSLOG NONE

 

<EXTRACT>

extract e_ctest

userid ogg, password oggtest

 

exttrail ./dirdat/ct

EOFDELAYCSECS 30

FLUSHCSECS 30

FETCHOPTIONS NOUSESNAPSHOT

REPORTCOUNT EVERY 10 MINUTES, RATE

report at 23:59

reportrollover at 00:00

statoptions, reportfetch, reportdetail, resetreportstats

sqlexec "alter session set recyclebin=off"

THREADOPTIONS MAXCOMMITPROPAGATIONDELAY 60000 IOLATENCY 60000

 

TRANLOGOPTIONS RAWDEVICEOFFSET 0

TRANLOGOPTIONS LOGRETENTION DISABLED

BR BROFF

 

TABLE OGGTEST.CTEST;

 

<PUMP>

EXTRACT p_ctest

PASSTHRU

RMTHOST 192.168.174.161 , MGRPORT 7809

report at 23:59

reportrollover at 00:00

statoptions, reportfetch, reportdetail, resetreportstats

FLUSHCSECS 30

EOFDELAYCSECS 30

RMTTRAIL ./dirdat/ct

REPORTCOUNT EVERY 10 MINUTES, RATE

 

TABLE OGGTEST.CTEST;

 

파라미터의 추가는 다음과 같이 실시한다.

 

edit param {extract name | pump name}

 

이후 위의 내용을 붙여넣고 다음을 수행한다.

 

a.    OGG> start mgr

b.    ORACLE > GoldenGate 가 사용할 user 를 생성

c.    ORACLE > sys role_setup.sql, marker_setup.sql 을 수행

d.    OGG> add extract e_ctest, tranlog, begin now

e.    OGG> add exttrail ./dirdat/ct, extract e_ctest

f.      OGG> add extract p_ctest, exttrailsource ./dirdat/ct

g.    OGG> add rmttrail ./dirdat/ct, extract p_ctest

 

6.    GoldenGate for MariaDB (Target)

OGG> create subdirs 을 수행 후 파라미터 편집을 진행한다.

 

<GLOBALS>

Source MGR 과 동일하다.

 

<MGR>

Source MGR 과 동일하다.

 

<REPLICAT>

replicat r_ctest

targetdb oggtest, userid maria, password maria

 

SOURCEDEFS ./dirprm/tab2.def

 

INSERTUPDATES

 

SQLEXEC "SET NAMES euckr"

discardfile ./dirout/repl.dsc,append

 

map oggtest.ctest, target oggtest.ctest;

 

Replicat 내용도 Source 와 마찬가지로 edit param {replicat name} 명령으로 위 내용을 붙여넣는다.

 

이후 다음을 수행한다.

 

a.    OGG> start mgr

b.    Maria> chkpt_mysql_create.sql 을 수행

c.    OGG> add replicat r_ctest, exttrail ./dirdat/ct

 

 

Source, Target 에 위 과정을 전부 완료하면 다음의 명령어에 대해 결과가 리턴 될 것이다.

 

OGG> info all

 

소스의 경우 manager e_ctest, p_ctest 정보가 출력 될 것이고,

타겟의 경우 manager r_ctest 정보가 출력 될 것이다.

 

manager 를 제외하고 전부 stopped 상태일텐데 다음과 같이 정지 된 프로세스를 기동한다.

 

OGG> start *

 

7.    CONFIGURATIONS FOR MariaDB

ORACLE 에 구성하는 GoldenGate 는 타겟이 이기종 DBMS (MariaDB) 라고 해서 별도로 셋팅해 준 구성은 없다.

 

전체적인 구성에서 MariaDB 를 위한 특별한 셋팅은 Target GoldenGate for MySQL 에만 있다.

OGG 구성 중에 REPLICAT 에만 해당된다.

 

n  targetdb oggtest, userid maria, password maria

n  SOURCEDEFS ./dirprm/tab2.def

n  SQLEXEC "SET NAMES euckr"

 

targetdb MariaDB 의 위치를 가리킨다.

dsn 에 해당하는 부분으로 database@address 형태로 쓸 수 있다.

 

targetdb 에 사용하는 옵션들에 대해서는 대소문자 구분을 하기에

MariaDB  에서의 database, table 이름을 명확히 기입해야 한다.

 

다시 targetdb 의 옵션으로 돌아가 database MariaDB 에서의 database 를 의미한다.

/*+ 다만 이렇게 가정하면 Consolidation 환경에서 서로 다른 인스턴스에 무엇을 기준으로 접근하냐란

문제가 발생한다. */

 

일단 한 서버에 하나의 인스턴스가 구성되어 있는 환경에서 database 항목에 MariaDB database

지정하여 접속했다.

 

address 를 생략하게 되면 (@ 와 같이 생략 됨) localhost 를 의미하게 된다.

/*+ address 를 쓴다는 의미는 remote MariaDB 에 대해서도 접근가능하지 않을까 추측한다. */

 

SOURCEDEFS 는 반드시 지정해 사용해야 한다.

소스의 테이블에 대해 Definition 을 파일로 저장하여 이용하는 방법이다.

 

defgen 명령을 통해 타겟이 되는 테이블에 대해 정의를 파일로 저장하며 그 방법은 다음과 같다.

 

-- 파라미터 내용

defsfile /ogg/tab2.def,purge

userid ogg, password oggtest

table oggtest.ctest;

 

# defgen PARAMFILE ./dirprm/tab2.prm

 

SQLEXEC MariaDB Client Character set 을 조정하기 위해 사용하였다.

 

Source : KO16KSC5601 를 사용하고 있고, Target : euckr 을 셋팅했다.

Source 측 캐릭터셋은 완성형 한글이다. 때문에 Target 에 조합형 캐릭터셋 (대표적으로 utf8)

사용하게 되면 한글 데이터가 깨져 동기가 깨질 수 있다.