ORACLE GoldenGate 11g for MariaDB v 1.0
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 ORACLE’s Datatypes to Maria’s
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) 을
사용하게 되면 한글 데이터가 깨져 동기가 깨질 수 있다.