OGG 11g for Flat File v1.0
13.04.12 |
v1.0 |
|
|
|
|
|
|
|
1. OGG for Flat File
Flat File 은 다음과 같은 구분자로 나뉘어지는 정형화 된 데이터를 의미한다.
I|A|TEST.FOR_FLATFILE|2013-04-10:11:08:06.000000|1837|2013/04/10 11:08:06|2013-04-10:11:08:06|884
위 Flat File 의 경우 구분자로 ‘|’ 를 사용하였다.
GoldenGate 는 Trail file 의 Format 으로 Flat File (Ascii format) 을 지원한다.
여기서는 Flat File 형태의 Trail File 을 남기기 위한 내용을 다루겠다.
2. Environment
ORACLE 서버를 이용하여 GoldenGate Source 와 Target 을 구성하였다.
Source 에서 Capture 후 Target 에 전송할 때 Ascii 형태의 Trail File 을 쌓는다.
Source 에는 mgr, capture, pump 를 구성하고 Target 에는 mgr 만 구성한다.
n Source
--- mgr.prm port 7801
--- flat.prm extract flat userid ogg, password ogg
EOFDELAYCSECS 30 FLUSHCSECS 30 FETCHOPTIONS NOUSESNAPSHOT REPORTCOUNT EVERY 10 MINUTES, RATE
GETUPDATEBEFORES NOCOMPRESSDELETES NOCOMPRESSUPDATES
report at 23:59 reportrollover at 00:00 statoptions, reportfetch, reportdetail, resetreportstats sqlexec "alter session set recyclebin=off" THREADOPTIONS MAXCOMMITPROPAGATIONDELAY 60000 IOLATENCY 60000 --TRANLOGOPTIONS EXCLUDEUSER GGSC, EXCLUDEUSERID 229 --DDL INCLUDE MAPPED, OBJTYPE 'TABLE' --DDLOPTIONS REPORT --DDLERROR _SKIPDDL 2692602 --TRANLOGOPTIONS RAWDEVICEOFFSET 0 --TRANLOGOPTIONS LOGRETENTION DISABLED BR BROFF
exttrail ./dirdat/fl
---flatpump.prm EXTRACT flatpump userid ogg, password ogg
report at 23:59 reportrollover at 00:00 statoptions, reportfetch, reportdetail, resetreportstats FLUSHCSECS 30 EOFDELAYCSECS 30 REPORTCOUNT EVERY 10 MINUTES, RATE
NOBINARYCHARS FORMATASCII, OP, TS, NONAMES, NOQUOTE, PLACEHOLDERS, NULLISSPACE, NOTRANSTMTS, DELIMITER '|'
RMTHOST 172.18.174.120 , MGRPORT 7802 RMTTRAIL ./dirdat/fp
TABLE test.for_flatfile;
---add process add ext flat, TRANLOG, BEGIN NOW add exttrail ./dirdat/fl, extract flat, megabytes 1024
add extract flatpump, exttrailsource ./dirdat/fl add rmttrail ./dirdat/fp, extract flatpump, megabytes 20
|
n Target
port 7802 |
3. Trail File
NOBINARYCHARS
FORMATASCII, OP, TS, NONAMES, NOQUOTE, PLACEHOLDERS, NULLISSPACE, NOTRANSTMTS, DELIMITER '|'
첫 줄은 바이너리 문자열을 NULL 로 종결되는 문자로 취급할지 여부를 컨트롤한다.
두 번째 줄이 핵심 내용인데, FORMATASCII 는 ASCII 포맷 형태로 취급한다는 뜻이다. DELIMITER 는 구분자를 어떤 걸 사용할지 정한다.
4. Replicat
위 구성을 통해 Target 에서는 다음과 같이 ascii format 의 flat file 을 얻을 수 있다.
I|A|TEST.FOR_FLATFILE|2013-04-10:11:08:06.000000|1837|2013/04/10 11:08:06|2013-04-10:11:08:06|884
I|A|TEST.FOR_FLATFILE|2013-04-10:11:08:06.000000|1838|2013/04/10 11:08:06|2013-04-10:11:08:06|895
I|A|TEST.FOR_FLATFILE|2013-04-10:11:08:06.000000|1839|2013/04/10 11:08:06|2013-04-10:11:08:06|991
I|A|TEST.FOR_FLATFILE|2013-04-10:11:08:06.000000|1840|2013/04/10 11:08:06|2013-04-10:11:08:06|455
위 데이터는 Target 에 쌓인 Trail 파일의 실제 내용이다.
Flat file 의 format 을 사용하면 실제 파일 내용을 위와같이 열람가능하다.
여기까지는 OGG 를 통해 쉽게 구성이 가능하다.
여기까지라 함은 데이터 적재가 필요한 타겟 (NoSQL) 의 로컬 시스템까지 트레일 파일을 쌓기까지이다.
쌓여진 Trail 파일을 실제 적재하는 부분부터는 (즉 Replicat 역할) 사용자 개발이 필요한 부분이다.
참고로 위 Trail File 의 내용은 아래 테이블에서 추출 된 내용이다.
ID DTTM DTTM_DATE NUM
---------- ------------------- ------------ ----------
1840 2013/04/10 11:08:06 10-APR-13 455
1839 2013/04/10 11:08:06 10-APR-13 991
1838 2013/04/10 11:08:06 10-APR-13 895
1837 2013/04/10 11:08:06 10-APR-13 884
I|A|TEST.FOR_FLATFILE|2013-04-10:11:08:06.000000|1837|2013/04/10 11:08:06|2013-04-10:11:08:06|884
I|A|TEST.FOR_FLATFILE|2013-04-10:11:08:06.000000|1838|2013/04/10 11:08:06|2013-04-10:11:08:06|895
I|A|TEST.FOR_FLATFILE|2013-04-10:11:08:06.000000|1839|2013/04/10 11:08:06|2013-04-10:11:08:06|991
I|A|TEST.FOR_FLATFILE|2013-04-10:11:08:06.000000|1840|2013/04/10 11:08:06|2013-04-10:11:08:06|455
5. Conclusions
Flat File 의 경우 타겟에서의 적재를 위해서는 개발이 필요하다.
GoldenGate 에서 지원하는 건 Trail File 로 쌓는 과정까지이다.
위 구성에서는 Trail File 을 Target 에 전송하는 걸 전제로 이야기 했다.
이때 사용하는 GoldenGate 는 Source 와 Target 2copy 가 된다.
반면 ASCII 포맷의 Trail File 을 Source 쪽에서 생성하는 방법이 있다.
다만 이 경우에는 pump 를 통해 전송하는 것이 불가하다.
전송을 시도하면 다음과 같은 에러가 발생한다.
2013-04-10 10:52:25 ERROR OGG-01028 Incompatible record (101) in ./dirdat/fl000000, rba 0 (getting header)
결국 Source 레벨에서 ASCII FORMAT 으로 TRAIL FILE 을 쌓는다는 건 OGG 를 통한 전송을 하지 않겠다는 이야기이다.
더불어 이 경우에는 Source 에만 OGG 를 사용하게 되는 것이다.
6. References
ORACLE GoldenGate for Flat File | E17342-01