본문 바로가기

Oracle GoldenGate2

OGG 11.2.0.1 Configuration for Data warehousing v1.0

OGG 11.2.0.1 Configuration for Data Warehousing v1.0

 

Date

Ver

Etc.

12.09.27

1.0

 

 

 

 

 

 

 

 

 

1.    Data Warehousing

Data Warehouse 는 사용자의 의사 결정에 도움을 주기 위하여, 기간 시스템의 데이터베이스에 축적된 데이터를 공통의 형식으로 변환하여 관리하는 데이터베이스라 한다. (from Wikipedia) DW 는 복수의 소스로부터 데이터가 집중된다.

 

여기서는 복수의 소스로부터 데이터가 집중되는 구조, N:1 환경 구성에 대해 OGG 를 활용한 방법을 이야기 하고자 한다.

 

2.    OGG Configuration for DW

N:1 구조를 만들기 위한 OGG 구성을 간단히 이야기 하면 다음과 같다.

 

먼저 소스쪽 이야기를 하겠다.

 

Capture Pump 는 복제할 N 대만큼 필요하다. 다시말해 Database A B 가 있다면 A 에 대한 capture pump 가 필요하고, B 에 대해서도 capture pump 가 필요하다.

물론 위 환경에 대해 각기 manager 프로세스도 필요하다.

 

다음으로 타겟 쪽 이야기를 하자면 다음과 같다.

 

타겟측은 N:1 구성에서 1에 해당하는 것으로 데이터가 집약되는 장소이다. N 개의 소스로부터 데이터를 전달 받으며 이는 N 종류의 trail file 에 씌여진다. 더불어 이를 적용할 Replicat N 개 만큼 필요하다.

여기서 데이터 뿐만 아니라 시퀀스까지 동기화 하겠다고 하면 필요한 Replicat 수는 2N 개로 늘어난다.

( 이 문서에서는 Sequence 는 언급하지 않겠다. )

 

소스의 configuration 구성에 대해서는 리모트에 대해 trail 파일의 prefix 를 달리 가져가는 게 주의점이라 할 수 있다. 타겟의 configuration 구성에 대해서는 Replicat 이 어느 trail 파일을 읽을지 link 하는 부분이 중요하다.

 

3.    Test Environment

l  Source

Database : ‘ogg1’ ‘dg1’ 을 사용했다. 두 인스턴스는 동일한 머신에 구성되어 있다.

OGG : /u01/ogg /u01/ogg2 에 각기 설치되어 있다.

복제대상 : TEST 스키마

 

l  Target

Database : ‘ogg2’ 를 사용했다.

OGG : /u01/ogg 에 설치되어 있다.

복제타겟 : ogg1 TEST TEST1 으로, dg1 TEST TEST2 로 맵핑

 

4.    Configuration for DB

l  Common

다음을 Source#1, #2, Target 에 수행한다.

 

in SYS…

SQL> create user test identified by test;

 

SQL> grant connect, resource to test;

 

SQL> create table test.insert_test(time varchar2(6) primary key);

 

SQL> create or replace procedure test.insert_test_plsql

as

begin

insert into insert_test values(to_char(systimestamp,'HH24MISS'));

commit;

end;

/

 

위 과정을 통해 복제 대상이 되는 test 스키마를 각기 생성하였고, 이 안에 insert_test 라는 테스트용 테이블을 만들었다. 마지막으로 insert_test 테이블에 데이터를 넣는 procedure 를 만들었다.

 

프로시저는 추후 event 를 통해 각 DB 에 따라 다른 주기로 호출하도록 만들 예정이다.

 

l  Target

SQL> create user test1 identified by test;

 

SQL> grant connect, resource to test1;

 

SQL> create user test2 identified by test;

 

SQL> grant connect, resource to test2;

 

SQL> create table test1.insert_test(time varchar2(6) primary key);

 

SQL> create table test2.insert_test(time varchar2(6) primary key);

 

Target 에는 test1, test2 스키마를 생성했다.

ogg1 test test1 스키마에, dg1 test test2 스키마에 맵핑된다.

 

5.    Configurations on Source (N)

l  Source#1

<Manager>

PORT 7810

purgeoldextracts ./dirdat/*, usecheckpoints, minkeepdays 10, MINKEEPFILES 100

 

Manager 프로세스는 서비스 PORT 만 주의하면 된다.

 

하나의 소스에 OGG 를 두 개 띄울 것이기 때문에 서로 PORT 를 달리 가져간다.

ogg1 에 대한 OGG 7810 으로 셋팅했다.

 

<Capture>

extract capture

 

setenv (NLS_LANG = "KOREAN_KOREA.KO16KSC5601")

 

userid ogg, password oggtest

 

statoptions, reportfetch, reportdetail, resetreportstats

report at 00:00

reportrollover at 00:01

 

discardfile ./dirout/eredo.dec, append, megabytes 100

 

discardrollover at 00:01

 

exttrail ./dirdat/er

 

TABLE TEST.*;

 

Capture 의 경우 별도로 특이한 셋팅은 없다. capture pump 에 대해 해당 OGG 는 홈디렉토리 밑에 고유한 디렉토리를 가지고 있기 때문에 소스간에 셋팅을 달리 가져갈 부분이 없다. 이를테면 로컬에 쌓이는 trail 파일도 이 케이스이다.

 

<Pump>

extract pump

 

userid ogg, password oggtest

 

statoptions, reportfetch, reportdetail, resetreportstats

report at 00:00

reportrollover at 00:01

 

discardfile ./dirout/epump.dec, append, megabytes 100

 

discardrollover at 00:01

 

rmthost 192.168.137.202, mgrport 7810

 

rmttrail ./dirdat/og

 

TABLE TEST.*;

 

pump 에서 가장 중요한 파라미터는 rmttrail 항목이다.

rmt remote 를 의미하며, remote 즉 타겟에서 trail 파일 이름을 어떤식으로 만들 것인가를 의미한다.

 

2개의 소스와 1개의 타겟이 맵핑되어 있기 때문에 trail 파일은 서로 다르게 가져가야 한다.

 

l  Source#2

<manager>

PORT 7830

purgeoldextracts ./dirdat/*, usecheckpoints, minkeepdays 10, MINKEEPFILES 100

 

2번 소스에 대한 서비스 포트는 7830 으로 1번과 다르게 가져갔다.

 

만약 두 개의 소스가 각기 다른 머신에서 동작중이었다면, PORT 를 달리 가져갈 필요는 없다.

 

<capture>

extract capture

 

setenv (NLS_LANG = "AMERICAN_AMERICA.AL32UTF8")

setenv (ORACLE_SID = "dg1")

 

userid ogg, password ogg

 

statoptions, reportfetch, reportdetail, resetreportstats

report at 00:00

reportrollover at 00:01

 

discardfile ./dirout/eredo.dec, append, megabytes 100

 

discardrollover at 00:01

 

exttrail ./dirdat/er

 

TABLE TEST.*;

 

capture 에는 oracle_sid 를 지정하기 위한 파라미터를 사용하였다.

 

Source #1 에는 별도로 지정하지 않은 이유는 .bash_profile 에 지정되어 있는 SID ogg1 이기 때문에 별도로 지정하지 않았다.

 

<pump>

extract pump

 

setenv (ORACLE_SID = "dg1")

 

userid ogg, password ogg

 

statoptions, reportfetch, reportdetail, resetreportstats

report at 00:00

reportrollover at 00:01

 

discardfile ./dirout/epump.dec, append, megabytes 100

 

discardrollover at 00:01

 

rmthost 192.168.137.202, mgrport 7810

 

rmttrail ./dirdat/dg

 

TABLE TEST.*;

 

pump 에서 중요한 파라미터는 SID 에 대해 지정해 준 부분과, rmttrail 항목이다.

rmttrail 항목은 앞서 본 Source#1 pump 에서도 이야기 하였다.

 

l  Target

<manager>

PORT 7810

purgeoldextracts ./dirdat/*, usecheckpoints, minkeepdays 10, MINKEEPFILES 100

 

Target manager 파라미터 내용이다. 특이한 사항은 없다.

 

<replicat #1>

REPLICAT REPA

 

setenv (NLS_LANG = "KOREAN_KOREA.KO16KSC5601")

 

USERID ogg, PASSWORD oggtest

 

statoptions, reportfetch, reportdetail, resetreportstats

report at 00:00

reportrollover at 00:01

 

discardfile ./dirout/repa.dec, append, megabytes 2000

discardrollover at 00:00

 

assumetargetdefs

 

MAP TEST.*, TARGET TEST1.*;

 

discardfile 의 경로나 파일이름을 달리 가져가는 것과 ogg1 TEST 스키마 정보를 TEST1 에 맵핑하는 것이 유의할 점이다.

 

Replicat trail 파일을 연결하는 작업은 명령어를 통해 이루어진다.

 

<replicat #2>

REPLICAT REPB

 

setenv (NLS_LANG = "KOREAN_KOREA.KO16KSC5601")

 

USERID ogg, PASSWORD oggtest

 

statoptions, reportfetch, reportdetail, resetreportstats

report at 00:00

reportrollover at 00:01

 

discardfile ./dirout/repb.dec, append, megabytes 2000

discardrollover at 00:00

 

assumetargetdefs

 

MAP TEST.*, TARGET TEST2.*;

 

replicat #1 과 내용 상 동일하다.

 

6.    Additional Configurations on OGG and ORACLE

l  Source #1, #2

서플리멘탈 로깅

GGSCI> dblogin userid ogg, password oggtest

 

GGSCI> add trandata test.*

 

GGSCI> info trandata test.*

 

CAPTURE, PUMP 의 추가

GGSCI> add extract capture, tranlog, threads 1, begin now

 

GGSCI> add exttrail ./dirdat/er, extract capture, megabytes 1024

 

GGSCI> add extract pump, exttrailsource ./dirdat/er

 

GGSCI> add rmttrail ./dirdat/og, extract pump, megabytes 1024 è source#2 에서는 og dg 로 사용한다.

 

Source 에서는 add rmttrail 명령을 통해 Target trail file 이름을 어떻게 사용할지 지정한다.

Source 2개이고 Target 은 하나이기 때문에 원격에서 사용할 trail 파일은 각 소스가 다른 이름을 가져가야 한다.

 

l  Target

GGSCI> add replicat repa, exttrail ./dirdat/og, nodbcheckpoint

GGSCI> add replicat repb, exttrail ./dirdat/dg, nodbcheckpoint

 

Target 에서는 replicat 을 추가할 때 어떤 trail 파일을 사용할지 지정한다.

 

7.    Starting OGG processes and Inserting Data

l  All

Source#1, Source#2, Target 의 순서로 다음을 수행한다.

GGSCI> start mgr

 

GGSCI> start *

 

위 과정까지로 데이터를 동기화하기 위한 절차는 모두 끝났다.

다만 여기까지의 과정은 DDL Replication 을 위한 방안은 무시된 것으로 Object 를 생성하는 경우,

Source 에 수행한 DDL Target 에 수동으로 생성하는 것은 물론, 생성 시점 전후로 Extract, Replicat stop / start 하는 과정이 필요하다.

 

l  Source#1, Source#2

위 대상에 대해 data insert 하는 procedure 를 호출 할 event 를 생성한다.

 

<Source #1>

SQL>BEGIN

  DBMS_SCHEDULER.create_job (

    job_name        => 'insert_test',

    job_type        => 'PLSQL_BLOCK',

    job_action      => 'BEGIN test.insert_test_plsql; END;',

    start_date      => SYSTIMESTAMP,

    repeat_interval => 'freq=secondly; ',

    end_date        => NULL,

    enabled         => TRUE);

END;

/

 

<Source #2>

SQL>BEGIN

  DBMS_SCHEDULER.create_job (

    job_name        => 'insert_test',

    job_type        => 'PLSQL_BLOCK',

    job_action      => 'BEGIN test.insert_test_plsql; END;',

    start_date      => SYSTIMESTAMP,

    repeat_interval => 'freq=minutely;',

    end_date        => NULL,

    enabled         => TRUE);

END;

/

 

Event 생성으로 Source insert_table 에 데이터가 자동으로 입력된다.

8.    Conclusion

N:1 연결에 있어 특이할 만한 부분은 다음 정도이다.

 

-      Source OGG 를 구성, 구성상 특이점은 pump remote 에 쌓을 trail file prefix 를 다른 소스가 쌓을 trail file 과 중첩되지 않게 구성한다.

-      Target 에서는 Replicat 을 소스 수만큼 추가한다. add replicat 명령을 통해 어떤 replicat 프로세스가 어떤 trail 파일을 사용할지 지정한다.

 

9.    References

A.     데이터 웨어하우스 | http://ko.wikipedia.org/wiki/%EB%8D%B0%EC%9D%B4%ED%84%B0_%EC%9B%A8%EC%96%B4%ED%95%98%EC%9A%B0%EC%8A%A4

B.     CH7. Configuring Oracle GoldenGate for real-time data warehousing | Oracle GoldenGate Windows and UNIX Administrator's Guide 11g Release 2 Patch Set 1