[OGG] Goldengate 와 expdp 를 활용한 Zero Down-Time Oracle DB Migration 간략 절차

View Comments

//-- 2012.04.18. 초안작성
//-- 2012.05.07. 수정 

 

1. CDC 제품을 활용한 Oracle DB 실시간 Migration 개념

 

  Source 시스템을 운영하는 동안 Source DB 을 백업 받아서 Target 시스템을 구축하고 구축하는 동안 Source 시스템에 유입된 변경 데이터를 정합성에 어긋남이 없이 Oracle GoldenGate 을 이용하여 작업을 하게 됩니다.

 

 

1.      GoldenGate 변경 데이터 추출 시작

2.      Source DB 백업

3.      백업 데이터를 Target DB 에 적용

4.      추출된 변경 데이터 Target DB에 적용

5.      APP 에서 기존 Source 시스템에서부터 신규 Target 시스템으로의 Connection 을 변경

 

Zero Down-Time Migration 에서 Source DB Backup Target DB Recovery 그리고  Oracle GoldenGate 을 이용한 데이터 복제는 아래와 같은 방법으로 진행됩니다.

 

 

본 간략 절차 사례에서는, 소규모 Size Oracle DB exp/imp dump 를 이용해 Target DB 로 옮겨 실시간 DB 동기화를 구성하는 방법으로 Zero Down-Time Migration 을 구현해 보았습니다.

 

2. Zero Down-Time Migration 실례 (간략 절차)

 

 

Source DB

Target DB

Step 1

CDC(Change Data Capture)를 위한 Oracle Golgdngate 설치 (DB 무 중단)

Step 2

Goldengate 변경 분 추출 Process (extract) 시작

 

Step 3

SCN 기반 데이터 추출 (expdp)

 

Step 4

 

추출된 데이터 DB 에 적재 (impdp)

Step 5

 

Goldengate 변경 분 반영 Process (replicat) 시작

Step 6

CDC(Change Data Capture) 기반, DB 동기화(sync) 중인 상태

 

2-A. Change Data Capture 를 위한 Oracle Golgdngate 설치

 

  Oracle 사의 CDC 제품인 Goldengate 제품을 설치합니다. 설치를 위한 Requirement Installation 과정은 이 문서에서는 생략하겠습니다.

 

2-B. Source DB 에서 Goldengate 변경 분 추출 Process (extract) 시작

 

가.   GGSCI 에서 해당 extract pump 를 시작해 Data 변경분을 추출 시작하기

 

GGSCI> info all

Program     Status      Group       Lag           Time Since Chkpt

MANAGER     RUNNING                                           

EXTRACT     STOPPED     EXTORCL     00:00:02      00:00:07   

EXTRACT     STOPPED     PMPORCL     00:00:04      00:00:03

GGSCI> start *ORCL

GGSCI> info all

Program     Status      Group       Lag           Time Since Chkpt

MANAGER     RUNNING                                          

EXTRACT     RUNNING     EXTORCL     00:00:02      00:00:01   

EXTRACT     RUNNING     PMPORCL     00:00:01      00:00:02

GGSCI>

 

    역시, 이 문서가 Goldengate 제품 자체에 대한 문서는 아니기 때문에, 자세한 내용들은 생략하겠습니다.

 

2-C. Source DB 에서 SCN 기반 데이터 추출 (expdp)

 

가.   Long Transaction 유무를 확인하고, SCN 을 추출해 둡니다.

 

SQL> select min(start_time) from v$transaction ;

 

MIN(START_TIME)

----------------------------------------

                                             ---> 현재 수행중인 Transaction 이 없음

SQL> col a format 99999999999999999999

SQL> select dbms_flashback.get_system_change_number a from dual ;

 

                    A

---------------------

       12478584165405                       ---> 추출 시점의 SCN 값 입니다.

 

SQL> select min(start_time) from v$transaction ;

 

MIN(START_TIME)

----------------------------------------

---> 현재 수행중인 Transaction 이 없음

SQL>

 

v$transaction 에 수행 중인 transaction 이 있더라도 상관 없습니다. 다만 수행중인 Transaction start_time 을 비교해서, 계속 변경되고 있는지 기존에 수행 중인 Transaction 이 종료 되고, 새로운 transaction 이 시작되었는지 확인 할 필요는 있습니다.

 

나.   Export dump 를 사용해, Source DB 해당 data 를 추출

 

Oracle ] expdp userid=\"system/password_of_system as sysdba\" job_name = 120418_boro_pm_exp dumpfile = 120418_boro_pm_exp.dmp logfile = 120418_boro_pm_exp.log schemas = SEI_PM flashback_scn = 12478584165405

 

    Oracle 10g 이상에서는 exp/imp 보다 속도 등이 개선된 exp dump가 지원됩니다. 이 사례에서는 특정한 DB User (SEI_PM) 의 모든 DB Data 120418_boro_pm_exp.dmp 이라는 OS File 로 추출한 것이고, flashback_scn 값을 앞서 dbms_flashback 을 통해 추출한 값으로 입력합니다.

    Dmp file 이 생성되는 기본 위치는 $ORACLE_BASE/admin/SID/dpdump 입니다.

 

    File 생성이 완료되면, Target DB dmp file 을 전송합니다. 보통은 compress ftp 를 이용합니다.

 

2-D. Target DB 로 추출된 데이터 DB 에 적재 (impdp)

 

가.   보통, 아래와 같이 간단히 DB에 적재할 수 있습니다. 해당 DB Schema 를 먼저 만들어 주어도 import 에 문제가 없습니다.

 

Oracle ] impdp userid=\"system/password_of_system as sysdba\" job_name = 120418_boro_pm_imp dumpfile = 120418_boro_pm_exp.dmp logfile = 120418_boro_pm_impdp.log

 

나.   다만, 여러 개의 Source DB 에서 1개의 Target DB DB Data 병합하는 경우, temp schema 를 통해 필요한 Data 만 적재할 수도 있습니다. 아래의 Query 를 참조하세요

 

2-D.-1. Temp Schema 를 사전에 생성합니다.


SQL> drop user tmp_sei_pm cascade ;

SQL> create user tmp_sei_pm identified by password_of_tmp_sei_pm default tablespace TMP_SEI_PM temporary tablespace TEMP_FIELD ;

SQL> grant resource, connect, dba to tmp_sei_pm ;

 

2-D.-2. Source DB 에서 추출한 Data Temp Schema 로 임시로 적재합니다


Oracle ] impdp userid=\"system/password_of_system as sysdba\" job_name = 120418_boro_pm_imp dumpfile = 120418_boro_pm_exp.dmp logfile = 120418_boro_pm_impdp.log remap_schema=sei_pm:tmp_sei_pm

    마찬가지로, 기본 위치는 $ORACLE_BASE/admin/SID/dpdump 입니다

 

2-D.-3. 임시로 적재된 Data 에서, 필요한 Data 만을 실 사용할 Schema 로 적재

 

실제 사용할 Schema 로 적재할 때는, 해당 시나리오에 따라, 특정 코드값의 Data 만을 삭제 하거나, 특정 코드값의 Data 를 제외하고 삭제, 특정 코드값에 해당하는 rows 만을 insert 하는 경우 등이 있겠습니다. 이 때 사용될 Query 들은 아래와 같습니다.

 

SQL> create table SEI_PM.PM_P_AREA as select * from TMP_SEI_PM.PM_P_AREA where job_no = 'SC2222' ;

SQL> delete SEI_PM.PM_P_AREA   where job_no <> 'SC2222' ;

SQL> insert into SEI_PM.PM_P_AREA         select * from TMP_SEI_PM.PM_P_AREA       where job_no = 'SC2222' ;

SQL> delete SEI_PM.PM_P_BM      where job_no = 'SC2222' ;

 

2-E. Target DB 에서 Goldengate 변경 분 반영 Process (replicat) 시작

 

GGSCI> info all

Program     Status      Group       Lag           Time Since Chkpt

MANAGER     RUNNING                                           

REPLICAT     STOPPED     R_ORCL11     00:00:02      00:00:07   

REPLICAT     STOPPED     R_ORCL12     00:00:04      00:00:03

GGSCI> start replicat r_orcl11, aftercsn 12478584165405

GGSCI> start replicat r_orcl12, aftercsn 12478584165405

GGSCI> info all

Program     Status      Group       Lag           Time Since Chkpt

MANAGER     RUNNING                                          

REPLICAT     RUNNING     R_ORCL11     00:00:02      00:00:01   

REPLICAT     RUNNING     R_ORCL12     00:00:01      00:00:02

GGSCI>

 

3. CDC 제품(Oracle Goldengate)을 활용한 Zero Down-Time Migration 활용 사례들

 

      Oracle GoldenGate 을 운영하기 위해서 초기 데이터 구축을 위해서 사용

  - Source DB 에서 Target DB 로 데이터를 동일하게 일치 시키는 Initial Loading 작업

  - OGG을 이용한 조회 시스템, ODS/DW, 비상 시스템, 타 시스템 연계 시 사용

      System/DB 업그레이드 시 연속적인 서비스를 진행하기 위해서 사용

  - System 증설 또는 DB 버전 Upgrade 시 서비스 연속성 보장

      주 시스템의 PM 작업 (Planned Outage, Unplanned Outage) 시 사용

  - 주 시스템에 대해서 장시간 작업을 진행하기 위하여 임시 시스템에서 서비스의 연속성 보장

  - 주 시스템의 작업 완료 후 임시 시스템으로부터 주 시스템으로 서비스의 연속성 보장

      주 시스템/DB 을 이기종으로 변경하기 위해서 사용

  - 주 시스템의 H/W 또는 OS, DB 등을 이기종으로 변경 시 서비스의 연속성 보장


원문 : http://datacloud.tistory.com/6

End of document.

Comments (+add yours?)

Tracbacks (+view to the desc.)

[OGG] Goldengate 11gR1 CDC 제품에서 Supplemental Logging 설정

View Comments

1. (CDC 제품에서 일반적으로) Supplemental Logging 이 필요한 이유

   복제의 원본이 되는 "소스DB"에서 Update Query 등이 수행될 때, Update Query 등으로 실제 변경이 발생된 column 뿐 아니라, 나머지 Column 들의 정보를 함께 Archive Log 에 남기기 위해서는  Supplemental Logging 이 활성화 되어야만 합니다.


   
    SQL> select * from emp;   
      
         EMPID        SAL    
    ---------- ----------            
            10     100000     

    SQL> update emp set sal=150000;      

    1 row updated.
 
    SQL>


<< 해설 >>

    The EMP table has a primary key defined on the EMPID column.
    --> If supplemental logging is turned on for primary key columns, then any update to EMP logs the EMPID column.

    --> Without supplemental logging, We can find following data in redo/Archive log :     

        update "SCOTT"."EMP" set "SAL" = '150000' where "SAL" = '100000' and ROWID ='AAABOaAABAAANZ/AAA';     

    --> But, with the log group test_always defined above :     

        update "SCOTT"."EMP" set "SAL" = '150000' where "EMPID" = '10' and "SAL" ='100000' and ROWID = 'AAABOaAABAAANZ/AAA';    


2. Supplemental Logging 개요 (Level 및 방법)

   Database-Level 과 Table-Level 로 나눌 수 있습니다.
    --> Oracle Documents : http://docs.oracle.com/cd/E11882_01/server.112/e22490/logminer.htm#SUTIL1582

   일반적으로,

   Database-Level 로 설정하는 경우, 해당 DB Instance 의 모든 Table 들에 대해, 자동으로 Supplemental Logging 이 됩니다.
   따라서, 기존 대비 많은 양의 Rodo log switch 가 발생되고 (Archive Log 량이 증가), log switch 에 따른 overhead 가 증가됩니다.

   Table-Level 로 설정하는 경우, 각 대상 table 들에 대해서 각각 alert 해 주어야 하는 불편함이 있지만
   Database-Level 설정 대비, overhead 가 감소되어 운영 부담이 줄어드는 장점이 있습니다.  


  2-A. Database-Level Supplemental Logging
 
    -- 최소 단위 (MIN) 으로 설정하는 방법

SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA ;
SQL> ALTER SYSTEM SWITCH LOGFILE


    -- 확인하는 방법

SQL> select SUPPLEMENTAL_LOG_DATA_MIN S_MIN, SUPPLEMENTAL_LOG_DATA_PK S_PK, SUPPLEMENTAL_LOG_DATA_UI S_UI,
      2  SUPPLEMENTAL_LOG_DATA_FK S_FK, SUPPLEMENTAL_LOG_DATA_ALL S_ALL from v$database ;

    S_MIN            S_PK   S_UI   S_FK   S_ALL
    ---------------- ------ ------ ------ ------
    YES              NO     NO     NO     NO

SQL


    -- PK/UK 정보를 추가로 남기기 위해서 설정하는 방법

SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY, UNIQUE KEY) COLUMNS ;
SQL> ALTER SYSTEM SWITCH LOGFILE


    -- 확인하는 방법

SQL> select SUPPLEMENTAL_LOG_DATA_MIN S_MIN, SUPPLEMENTAL_LOG_DATA_PK S_PK, SUPPLEMENTAL_LOG_DATA_UI S_UI,
      2  SUPPLEMENTAL_LOG_DATA_FK S_FK, SUPPLEMENTAL_LOG_DATA_ALL S_ALL from v$database ;

    S_MIN            S_PK   S_UI   S_FK   S_ALL
    ---------------- ------ ------ ------ ------
    YES              YES    YES    NO     NO

SQL>



  2-B. Table-Level Supplemental Logging

   Table 전체(모든 Column)를 지정하는 방법과 Table 의 특정 Column 들만 지정하는 방법이 있습니다.

   Table 전체(모든 Column)를 지정하면, 해당 table 의 모든 column 에 Supplemental Logging 이 활성화 됩니다.
   해당 table 의 column 이 추가되면, 자동으로 추가된 column 에 Supplemental Logging 이 활성화 됩니다.

   Table 의 특정 Column 들만 지정하면, 해당 table 의 지정된 column 들에 Supplemental Logging 이 활성화 됩니다.
   해당 table 의 column 이 추가되면, 추가된 column 들은 자동으로 Supplemental Logging 되지 않습니다.
   추가로 alter 를 수행하여, 새로운 column 에 Supplemental Logging 을 활성화 해야만 합니다

    -- Table 의 전체 Column 을 지정하는 방법

SQL> ALTER TABLE SAPP.T1121_B ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS ;
SQL> ALTER TABLE SAPP.T1121_B DROP SUPPLEMENTAL LOG DATA (ALL) COLUMNS ;

    -- 확인하는 방법 : 하기 참조

    -- Table 의 특정 Column 을 지정하는 방법

SQL> ALTER TABLE SAPP.T1121_B ADD SUPPLEMENTAL LOG GROUP GGS_T1121_B_1 (AA, AA_2) ;
SQL> ALTER TABLE SAPP.T1121_B DROP SUPPLEMENTAL LOG GROUP GGS_T1121_B_1


    -- 확인하는 방법 : 하기 참조


  2-C. Table-Level Level Supplemental Logging 설정 및 조회 방법

    -- GGSCI 에서 add trandata 수행

GGSCI> add trandata sapp.t1121_b

    -- SQL Plus 에서 add supplemental log 수행

SQL> alter table sapp.t1121_b add supplemental log group ggs_t1121_b_1 (AA, AA_2) ;

Table altered.

SQL>


    -- 결과 조회 (column 단위 Logging)

SQL> select LOG_GROUP_NAME, TABLE_NAME, COLUMN_NAME, POSITION from dba_log_group_columns where table_name = 'T1121_B' ;

LOG_GROUP_NAME    TABLE_NAME    COLUMN_NAME           POSITION
--------------- --------------- -------------------- ----------
GGS_T1121_B_1    T1121_B     AA             1
GGS_T1121_B_1    T1121_B     AA_2             2

SQL> select * from dba_log_groups where table_name = 'T1121_B' ;

OWNER                   LOG_GROUP_NAME    TABLE_NAME      LOG_GROUP_TYPE         ALWAYS      GENERATED
------------------------------ ---------------   --------------- ------------------- ----------- --------------
SAPP                   GGS_T1121_B_1     T1121_B     USER LOG GROUP         CONDITIONAL USER NAME
SAPP                   GGS_T1121_B_74844 T1121_B     USER LOG GROUP         ALWAYS      USER NAME

SQL>


    -- SQL Plus 에서 모든 Column 에 대한 Logging 수행

SQL> ALTER TABLE SAPP.T1121_B add SUPPLEMENTAL LOG DATA (ALL) COLUMNS ;

Table altered.

SQL> select * from dba_log_groups where table_name = 'T1121_B' ;

OWNER                   LOG_GROUP_NAME    TABLE_NAME      LOG_GROUP_TYPE         ALWAYS      GENERATED
------------------------------ ---------------   --------------- ------------------- ----------- --------------
SAPP                   GGS_T1121_B_1     T1121_B     USER LOG GROUP         CONDITIONAL USER NAME      << alter table (col1, col2) 로 한 것
SAPP                   GGS_T1121_B_74844 T1121_B     USER LOG GROUP         ALWAYS      USER NAME      << ggsci 에서 add trandata 로 건 것
SAPP                   SYS_C0011504      T1121_B     ALL COLUMN LOGGING  ALWAYS      GENERATED NAME << dba 가 all column 으로 설정한 것

SQL>


3. OGG 제품에서 Supplemental Logging 설정 Review

  3-A. 일반적인 복제(1:1) 요건을 충족하기 위한 Logging 설정 시

   OGG 설치 단계중에서 CDC 대상 Table 에 대한 Add TranData 작업은 Table Level 의 Supplemental logging 처리이며,
   Log Group Name 은 기본적으로 OGG_[Table Name]_[Object ID] 가 됩니다.

   즉

SQL> ALTER TABLE [Table Owner].[Table Name] ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;

   이 아니라 아래의 DDL 이 수행된 결과입니다.

SQL> ALTER TABLE [Table Owner].[Table Name] ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY, UNIQUE INDEX) COLUMNS;

   추가로, Add TranData 작업을 하기 위해서는,  Database-Level Supplemental logging 의 SUPPLEMENTAL_LOG_DATA_MIN 이 YES 이여야만 합니다.


  3-B. Historial Table 을 모든 Column 을 기준으로 남기기 위한 Logging 설정 시

   특정 Table 에 대해서 Table 의 모든 column 에 대하여 Supplemental logging 처리를 위해서 다음과 같이 수행한다.

SQL> ALTER TABLE [Table Owner].[TABLE Name] ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;


   특정 Table 에 대해서 특정 column 에 대해서 Supplemental logging 처리를 위해서 다음과 같이 수행한다. 

SQL> ALTER TABLE [Table Owner].[Table Name] ADD SUPPLEMENTAL LOG GROUP [LOG Group Name] (column1, column2, ...); 


   S사의 사례처럼, Historial Table 을 모든 Column 을 기준으로 남기기 위해서

SQL> ALTER TABLE [Table Owner].[TABLE Name] ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;

   을 수행하는 경우,

   Database-Level Supplemental logging 의 SUPPLEMENTAL_LOG_DATA_MIN 이 YES 이여야만 합니다.
   Add TranData 작업은 불필요 합니다. (Add TranData 작업을 하게 되면, 중복해서 Logging 설정됨)
      
   
4. S사 환경에서, 향후(2012.01.26 이후) 복제대상으로 새로운 Table 이 추가시 절차 (간략 흐름도)

  4-A. 추가 Table 에 대한 SUPPLEMENTAL Logging

    - DBA 가 해당 table 에 대한 ALTER TABLE [Table Owner].[TABLE Name] ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS; 수행

      cf> GGSCI> add trandata owner.table 은 수행하지 않는다.

  4-B. 추가 Table 을 OGG Configuration 에 반영
 
    - 해당 extract, pump 및 replicat 에 해당 table mapping 을 반영
    - 소스서버#] defgen 으로 새로운 table layout 을 추출해, 타켓서버에 반영

  4-C. OGG 에서 복제 반영을 시작

    - (필요시 pump 및) Replicat 을 restart 하여, 복제를 반영할 준비 완료 후
    - Extract 를 restart 하여, 새로운 table 에 대한 추출을 시작

원문 : http://datacloud.tistory.com/2
End of Documents.

Comments (+add yours?)

Tracbacks (+view to the desc.)

OGG_FLAT FILE 생성

View Comments

1. 목표: Source에서 Target으로 변경 데이터를 Flat file로 생성

 

2. 주요 parameter

2-1. Extfile

l  Extract - Pump Extract Group이나 Replicat Group에서 읽을 수 있는 Local File 지정

l  Replicat – 배치 실행을 생성하는 specialrun을 사용할 때 Local file 지정

      

2-2. rmtfile

l  추출된 데이터를 remote system file로 지정한다. 배치 processing에 사용가능

l  반드시 rmthost parameter와 함께 사용해야 한다.

 

2-3. formatxml, formatsql, formatascii,

l  Xml, sql, ascii 형식으로 데이터를 저장한다.

l  Replicat process에 의해 진행된다면 사용할 수 없다.

l  Replicat는 기본 형식을 지원한다.

 

3. 과정

3-1. Initial Load 환경에서 Test 진행

-- source system

extract eee

userid lovelybin, password ********

rmthost 210.108.181.24, mgrport 4111

FORMATASCII, NONAMES, DELIMITER '|', SQLLOADER

rmtfile ./dirdat/m.txt, purge

--rmttask replicat, group r01

table lovelybin.test;

 

-- Target System

replicat r01

setenv (ORACLE_SID="ortest")

assumetargetdefs

extfile ./dirdat/m.txt, purge

--exttrail ./dirdat/m.txt

userid lovelybin, password ********

discardfile ./dirrpt/r01.dsc, purge

map lovelybin.test, target lovelybin.test;


 - extract에서 rmtfile parameter Target /dirdat/m.txt 생성 성공

입력된 data 확인

 

 - rmtfile로 Target쪽에 떨어뜨린 file을 extfile Target DB에 반영하려 했으나 반영되지 않음

 

 - Source Target log 확인 결과 Data Insert 되었다고 나온다.

Extract log

 

Replicat log

 

 

3-2. Online change Synchronization test

 - Online change Synchronization환경 역시 Target 쪽에 flat file을 생성할 수는 있으나 DB에 반영되지는 않는다. Initial Load 과정과 마찬가지로 rmtfile만 추가하여 target 쪽에 file을 생성한다.

 

3-2-1 Extra Group 추가

GGSCI> ADD EXTRACT e02, TRANLOG, BEGIN NOW, THREADS 1

 

3-2-2 extract parameter

-- source system

extract e02

userid lovelybin, password ********

rmthost 210.108.181.24, mgrport 4111

FORMATASCII, NONAMES, DELIMITER '|', SQLLOADER

rmtfile ./dirdat/rr, purge

table lovelybin.test;

 

3-2-3. replicat parameter

-- Target System

replicat r01

setenv (ORACLE_SID="ortest")

assumetargetdefs

extfile ./dirdat/m.txt, purge

userid lovelybin, password ********

discardfile ./dirrpt/r01.dsc, purge

map lovelybin.test, target lovelybin.test;

* Trail을 통해 flatfile을 반영하려 했지만 Target DB에 반영되지 않음 *




Comments (+add yours?)

Tracbacks (+view to the desc.)

Oracle GoldenGate Guide 2 - Oracle to Oracle 단방향 동기화

View Comments


Oracle
 to Oracle 단방향 동기화



OGG_Guide_v0.2.docx



# 본 가이드는 실습 위주로 작성되었으며 좀더 자세한 내용은 첨부된 문서파일에 있습니다.



서로 다른 Layout을 가진 Table의 동기화

@ 두 table의 DDL 동기화





목  차

1. Different Layout DML Synchronization

1-1. Environment

1-2. Preparation. 6

1-2-1. Installation. 6

1-2-2. Configuration. 6

1-2-3 Source System.. 6

1-2-4 Target System.. 7

1-3. Change Data Capture 8

1-3-1 Change Capture 구성... 8

1-3-2. Change Delivery 구성... 10

1-4. Generate Activity and Verify Results 12

1-4-1. Generate Database Operation. 12

1-4-2. Verify change capture and delivery. 12

2. DDL Synchronization.. 13

2-1. Environment 13

2-1-1. Architecture. 13

2-1-2. 지원 범위... 13

2-2. Preparation. 14

2-2-1. Installation. 15

2-2-2. DDL Objects Install 15

2-3. DDL Capture 16

2-3-1. Extract 16

2-3-2. Replicat 17

2-3-3. Result 17








 1. Different Layout DML Synchronization

 

1-1. Environment

* 환경과 Architecture는 첨부된 manual에 기술되어 있음

1-2. Preparation

 

1-2-1. Installation

 

Ø  Environment

  - 테스트를 위해 두 개의 Oracle DB instance로 실습환경을 구성하였다.

 

구분

Hostname

OS Version

OS Account

DB SID

DB Version

DB Schema

Source

mwtech

GNU / LINUX

lovelybin

orcl

Oracle v11.2

mw_addr

Target

mwtech

GNU / LINUX

lovelybin

ortest

Oracle v11.2

mw_addr

 

Ø  Install

 - ggs ggt에 각각 GG의 압축을 풀어 설치한다.

 - Source system target system 모두 하위 디렉토리를 생성한다.

 

Shell> ./ggsci

GGSCI> CREATE SUBDIRS

 

1-2-2. Configuration

 - DML에 의해 변경된 데이터의 동기화를 위한 로그파일의 활성화

 

Supplement Log

SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;

 

Redo Log

SQL> ALTER SYSTEM SWITCH LOGFILE;

 

1-2-3 Source System

Ø  Manager process 구성

 - Source 시스템에 Manager parameter file을 만들고 사용할 포트를 설정한다

GGSCI > edit params mgr

 

--Source port 3030

 

 

 

Ø  Table 생성

 

SQL> insert into mw_addr values('책임','이원혁','726','rheesid@penta.co.kr');

SQL> insert into mw_addr values('책임','김은하','784','silver@penta.co.kr');

SQL> insert into mw_addr values('전임','전승엽','889','seraphmate@penta.co.kr');

SQL> insert into mw_addr values('전임','신희승','759','zzang10003@penta.co.kr');

 

Ø  supplemental logging 추가

 - GGSCI Source DB에 접속 후 2개의 테이블에 대한 추가 로깅 설정

 

GGSCI > add trandata lovelybin.mw_addr

 

 

1-2-4 Target System

 

Ø  Manager process 구성

GGSCI > edit params mgr

 

--Target

Port 3031

 

 

 

Ø  Table 생성

Target 시스템에 table 생성

- Target SystemSource Table과 다른 Layout으로 구성한다.

- row의 번호를 가져오는 row_id commit된 시간을 찍는 commit_ts 컬럼을 추가한다.

 

 1-3. Change Data Capture

 

1-3-1 Change Capture 구성

 - 변경된 데이터 감지를 위한 Capture Process를 구성한다

 

Ø  Extra Group 추가

 

GGSCI> ADD EXTRACT EXTCDC01, TRANLOG, BEGIN NOW, THREADS 1

 

 - Extract Group 정보 확인

 

GGSCI > info extract extcdc01

 

  - Extract Parameter 설정

 

GGSCI > edit params extcdc01

--Source System Extract

extract extcdc01

 

--Login Infomation

userid lovelybin, password ********

 

--write to trailfile

exttrail ./dirdat/01

 

BR BROFF

 

DISCARDFILE ./dirout/extcdc10.dsc, append, purge

 

--Table List

table lovelybin.mw_addr, tokens (tk_rowid = @getenv("ORARECORD","ROWID"),tk_commit_ts=@g

etenv("GGHEADER","COMMITTIMESTAMP"));

 

Ø  EXTTRAIL 정의

 - extract에서 변경될 데이터를 추출하기 위한 exttrail을 추가한다.

GGSCI > ADD EXTTRAIL ./dirdat/01, EXTRACT EXTCDC01, MEGABYTES 10

 

Ø  PUMP 추가

 - exttrail에서 변경된 데이터를 읽어오기 위한 pump를 추가한다.

GGSCI > add extract pmp01, exttrail ./dirdaat/01, begin now

 

 - pump parameter 설정

GGSCI > edit params pmp01

--Pump Parameter

extract pmp01

 

passthru

 

--remote host

rmthost 210.108.181.24, mgrport 3031

-- rmttrail ./dirdat/11

rmttrail ./dirtest/11

 

--table definition

table lovelybin.mw_addr;

 

 

 - DATA PUMP USING CASE

l  네트워크와 Target 장애에 대한 보호

l  데이터 필터링 또는 전송의 단계적 구현

l  여러 Source로부터 Target으로 데이터 통합

l  하나의 Source를 복수의 Target으로 동기화

 

Ø  RMTTRAIL 추가

 - PUMP에 있는 DATA를 가져오기 위한 RMTTRAIL을 추가한다.

GGSCI > ADD RMTTRAIL ./dirdat/11, EXTRACT PMP01

 

Ø  DEFGEN 설정

GGSCI > EDIT PARAMS DEFGEN

Defsfile ./dirdef/tbdef.def, purge

Userid lovelybin password ********

Table lovelybin.mw_addr;


1-3-2. Change Delivery 구성

 

 - 변경된 데이터를 감지하여 Target System으로 전달하기 위한 설정을 한다.

 

Ø  Checkpoint table 설정

 

 - 변경된 데이터를 어디까지 읽어 들였는지 확인하기 위하여 Checkpoint table을 설정한다.

 - Target System Checkpoint table을 추가하기 위해 GLOBAL Parameter 파일을 설정한다.

GGSCI> EDIT PARAMS ./GLOBALS

checkpointtable lovelybin.ggschkpt

 

 - Target System DB에 접속해 Replicat Checkpoint table을 생성한다.

GGSCI> DBLOGIN USERID lovelybin, PASSWORD ********

GGSCI> ADD CHECKPOINTTABLE

 

Ø  Replicat 추가

 

 - Target System Replicat Group을 추가한다.

GGSCI> ADD REPLICAT repcdc01, EXTTRAIL ./dirdat/11

 

 - Replicat Parameter 설정

 - colmap을 이용해 Target table column을 설정한다.

GGSCI> EDIT PARAMS REPCDC01

 --Target System Replicat

replicat repcdc01

 

--configuration

setenv (ORACLE_SID="ortest")

 

--Login Infomation

userid lovelybin, password ********

 

sourcedefs ./dirdef/tbdef.def

 

discardfile ./dirrpt/repcdc01.dsc, append, purge

 

map lovelybin.mw_addr, target lovelybin.mw_addr, colmap (usedefaults, row_id = @token("t

k_rowid"), commit_ts=@token("tk_commit_ts")), keycols (row_id);

 

 


 

1-4. Generate Activity and Verify Results

 

1-4-1. Generate Database Operation

 

Ø  Execute DML

 - Source System DB에 접속해서 다음과 같이 DATA를 추가한다.

SQL > insert into mw_addr values(‘전임’,’심은영’,’758’,’eyshim@penta.co.kr’);

  

1-4-2. Verify change capture and delivery

 

Ø  Result

 - Target Table에 추가된 row_id commit_ts의 값을 활인할 수 있다.

SQL > select * from mw_addr;








2. DDL Synchronization

 

2-1. Environment

 

2-1-1. Architecture

 

위 그림은 Source 오라클 데이터베이스에서 시스템 이벤트 로그에 의해 트리거 된 DDL의 변경 캡쳐를 나타낸다. DDL Operation들은 Target 오라클 데이터베이스로 복제된다.

  

2-1-2. 지원 범위

 

Ø  Supported Oracle objects and operations for DDL replication

GoldenGate Oracle 9i 이후 버전에 대하여 DDL을 지원한다. 그 이전 버전에서는 DDL이 지원되지 않는다. 아래의 objects에 대해서 2 MB 이내의 모든 DDL operation을 지원한다.

*clusters

tables

*triggers

functions

tablespaces

types

indexes

roles

views

packages

sequences

materialized views

procedure

synonyms

users

 

Ø  Non-supported Oracle objects and operations for DDL replication

 - Oracle-reserved schemas

아래의 schema name들은 Oracle 소유의 schema들이기 때문에, 반드시 GoldenGateDDL 설정에서 제외되어야 한다. GoldenGate는 이 schema들에 대한 DDL은 무시한다.

Schema Name

Schema Name

ANONYMOUS

AURORA

$JIS

$UTILITY

$AURORA

$ORB

$UNAUTHENTICATED

CTXSYS

DBSNMP

DMSYS

DSSYS

EXFSYS

MDSYS

ODM

ODM_MTR

OLAPSYS

ORDPLUGINS

ORDSYS

OSE$HTTP$ADMIN

OUTLN

PERFSTAT

PUBLIC

REPADMIN

SYS

SYSMAN

SYSTEM

TRACESVR

WKPROXY

WKSYS

WMSYS

XDB

 

Ø  Oracle Recycle bin

DDL replication을 수행하기 위해서는 반드시 Oracle recycle binOFF로 설정되어야 한다. Recycle bin이 활성화되어 있을 경우, GoldenGate DDL tigger session이 내포된 recycle bin에 의해 tigger 실패를 야기할 수 있는 DDL operation를 받을 수 있게 된다.

 

 

2-2. Preparation

 

2-2-1. Installation

 

Ø  Environment

  - 테스트를 위해 두 개의 Oracle DB instance로 실습환경을 구성하였다.

 

구분

Hostname

OS Version

OS Account

DB SID

DB Version

DB Schema

Source

mwtech

GNU / LINUX

lovelybin

orcl

Oracle v11.2

mw_team

Target

mwtech

GNU / LINUX

lovelybin

ortest

Oracle v11.2

mw_team

 

 - 이번 실습은 동일한 Layout을 가진 table을 대상으로 하였다.

 

Ø  Install

 - ggs ggt에 각각 GG의 압축을 풀어 설치한다.

 - Source system target system 모두 하위 디렉토리를 생성한다.

 

Shell> ./ggsci

GGSCI> CREATE SUBDIRS

 

2-2-2. DDL Objects Install

OGG DDL SUPPORT DDL OPERATION TRACKING하는 데이터베이스 오브젝트의 설치를 필요로 하는데, 이것은 TRIGGER MARKER, HISTORY TABLE, USER ROLE 등 여러 가지 다른 오브젝트들을 포함하기 위해서이다. DDL OPERATION TRIGGER ACTIVATE 시키고, MARKER HISTORY TABLE에 정보를 쓰게 되고, 다른 오브젝트들은 상태를 확인하고 TRACING을 할 수 있도록 하거나 성능을 향상시킨다.

 

A.     수행 중인 extract replicat를 모두 정지한다

GGSCI > info all

GGSCI > stop *

 

B.     DDL Object를 위한 스크립트의 실행

SQL > @marker_setup

SQL > @ddl_setup

SQL > @role_setup

SQL > @ddl_enable    (DDL trigger 실행)

*note : step을 따라하는 중에 OGG Schema를 입력하라고 나오면, 앞에서 입력한 <owner/schema>를 입력한다.

 

C.     GLOBAL file의 설정

GGSCI > edit params ./GLOBALS

--GoldenGate GLOBALS parameter file

 

GGSCHEMA lovelybin;

GGSCI > stop mgr

GGSCI > quit

Sh > ./ggsci

GGSCI > start mgr

 

D.     Recyclebin 설정

Recyclebin의 상태를 확인하고 반드시 ‘OFF’로 설정한다.

SQL > show parameter recyclebin

SQL > alter system set recyclebin = off scope=spfile;

 

E.      Schema Owner에 권한 설정

SQL > grant GGS_GGSUSER__ROLE, RESOUCE, DBA to lovelybin;

 

 

2-3. DDL Capture

 

2-3-1. Extract

 

A.     Supplemental logging 설정과 extract 추가

GGSCI > dblogin userid lovelybin, password ********

GGSCI > add trandata lovelybin.mw_team

GGSCI > add extract ext02, tranlog, begin now

GGSCI > add rmttrail ./dirdat/rt, extract ext02

 

B.     Parameter 설정

GGSCI > edit params ext02

extract ext02

userid lovelybin, password ********

rmthost 210.108.181.24, mgrport 3031

rmttrail ./dirdat/rt

 

DDL INCLUDE MAPPED

DDLOPTIONS ADDTRANDATA, REPORT

 

table lovelybin.mw_team;

 

C.     Extract 실행

GGSCI > start ext02

GGSCI > info ext02

 

 

2-3-2. Replicat

 

A.     Replicat 생성

GGSCI > add replicat rep02, exttrail ./dirdat/rt, checkpointtable lovelybin.ggcpt

GGSCI > info rep02

 

B.     Parameter 설정

GGSCI > edit params rep02

replicat rep02

SETENV (ORACLE_SID="ortest")

 

userid lovelybin, password ********

 

assumetargetdefs

discardfile ./dirrpt/rep02.dsc, purge

 

DDL INCLUDE MAPPED

DDLOPTIONS REPORT

DDLERROR DEFAULT ABEND

 

map lovelybin.mw_team, target lovelybin.mw_team;

 

C.     Replicat 실행

 

GGSCI > start rep02

GGSCI > info rep02

 

 

2-3-3. Result

 

A.     Mw_team table age 라는 column을 추가한다.

SQL > alter table mw_team add ( age varchar2(10) );

 

B.     Source system에 추가된 column의 모습

 




C.     Target system에도 동일하게 반영된 모습을 확인할 수 있다.

 

 





# 본 가이드는 실습 위주로 작성되었으며 좀더 자세한 내용은 첨부된 문서파일에 있습니다.




Comments (+add yours?)

Tracbacks (+view to the desc.)

Oracle GoldenGate Guide 1 - Oracle to Oracle 단방향 동기화

View Comments


Oracle to Oracle 단방향 동기화


OGG_Guide_v0.1.docx


# 본 가이드는 실습 위주로 작성되었으며 좀더 자세한 내용은 첨부된 문서파일에 있습니다.



동일한 Layout을 가진 Table의 Initial Load와 동기화





0 사전 준비

 - 단방향 동기화 테스트를 위해 두 개의 Oracle DB instance로 실습환경을 구성하였다.

           orcl -> source system

           ortest -> target system

 

0.1 Installation

0.1.1 Environment

 - Application : Oracle Database 11g, GoldenGate 11g

 

0.1.2 Install

 - ggsource ggtarget에 각각 GG의 압축을 풀어 설치한다.

 - Source system target system 모두 하위 디렉토리를 생성한다.

Shell> ./ggsci

GGSCI> CREATE SUBDIRS

 

0.2 Configuration

 - DML에 의해 변경된 데이터의 동기화를 위한 로그파일의 활성화

0.2.1 Supplement Log

SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;

 

0.2.2 Redo Log

SQL> ALTER SYSTEM SWITCH LOGFILE;

 




1 Prepare the Environment

1.1 Source 시스템 환경 준비

1.1.1 Source에서의 Manager process 구성

 - Source 시스템에 Manager parameter file을 만들고 사용할 포트를 설정한다

GGSCI> edit param mgr

-------------------------------------------

port 6001


1.1.2 Source Table을 만들고 데이터를 적재한다.

 - GoldenGate 11g에 예제로 포함된 Tcustmer, Tcustord 두 개의 table로 실습을 진행하였다.

 

1.1.3 supplemental logging 추가

 - GGSCI Source DB에 접속 후 2개의 테이블에 대한 추가 로깅 설정

GGSCI> dblogin userid lovelybin, password ********

GGSCI> add trandata lovelybin.tcustmer

GGSCI> add trandata lovelybin.tcustord

 

  

1.2 Target 시스템 환경 구성

 

1.2.1 Target에서의 Manager process 구성

 

 - Manager가 사용할 Port 설정 

GGSCI> edit param mgr

-------------------------------------------

port 6002

 

1.2.2 Table 생성

Target 시스템에 table 생성

- Target System Table만 생성하고 Data는 넣지 않는다.

 




2 Initial Data Load

 - 초기 데이터를 적재를 위한 장단점을 지닌 BackUp/Restore 또는 Export/Import와 같은 기술이 있다. 그 대신에 어플리케이션이 활성 상태일 동안 초기 데이터 적재를 수행하기 위해 GG를 사용할 것이다. 이번 장에서는 소스 테이블에서 데이터를 가져오기 위한 Extracting 사용과 타깃 시스템에 Replicat을 하기 위해 직접 데이터 전송을 보여준다

2.1 Initial Data Capture

2.1.1 extract 추가

 - 초기 데이터 capture를 위한 extract를 생성

GGSCI> add extract eini01, sourceistable

  

2.1.2 Parameter 설정


 GGSCI> edit param eini01

 --extract parameter

extract eini01

userid lovelybin, password ********

rmthost 210.108.181.24, mgrport 6002

rmttask replicat, group rini01

table lovelybin.tcustmer;

table lovelybin.tcustord;



2.2 Initial Data Delivery

2.2.1 Replicat 추가

 - Target system에 초기 데이터 로드를 위한 배치 작업을 추가한다.

GGSCI> add replicat rini01, specialrun


2.2.2 Parameter 설정

 * Target System이 바라볼 DB SETENV 명령을 통해 바꿔준다.

 GGSCI> edit param rini01

 --replicat parameter

replicat rini01

setenv (ORACLE_SID="ortest")

--Identical Table 

assumetargetdefs

userid lovelybin, password ********

discardfile ./dirrpt/rini01.dsc, purge

map lovelybin.*, target lovelybin.*;


2.2.3 초기 적재 process 실행

Source system에서 다음과 같이 실행한다.

GGSCI> START EXTRACT EINI01

 GGSCI> VIEW REPORT EINI01


 



3 Change Data Capture

 - 로그 기반의 Oracle 데이터 Capture의 경우, Capture Process Oracle Redo log 또는 Archive log에서 직접 변경 데이터를 capture하고, GoldenGate remote trails인 큐에 변경 사항을 저장하도록 구성된다.

3.1 change capture 구성

 - 변경된 데이터 감지를 위한 Capture Process를 구성한다

3.1.1 Extra Group 추가

GGSCI> ADD EXTRACT EORA01, TRANLOG, BEGIN NOW, THREADS 1

 

 - 추가된 Extract Group을 확인한다.

GGSCI> info eora01



3.1.2 Extract Parameter 설정

 GGSCI> edit param eora01

 --extract group parameter

extract eora01

userid lovelybin, password ********

rmthost 210.108.181.24, mgrport 6002

rmttrail ./dirdat/01

table lovelybin.tcustmer;

table lovelybin.tcustord;


3.1.3 Trail 정의

 - 변경될 데이터를 Target System을 저장하기 위한 Trail을 추가한다.

ADD RMTTRAIL ./dirdat/01, EXTRACT EORA01, MEGABYTES 5

 

 - 생성된 Trail의 정보

INFO RMTTRAIL *

 

3.1.4 Capture Process 구동

START EXTRACT EORA01

 

3.2 Change Delivery 구성

 - 변경된 데이터를 감지하여 Target System으로 전달하기 위한 설정을 한다.

3.2.1 Checkpoint table 설정

 - 변경된 데이터를 어디까지 읽어 들였는지 확인하기 위하여 Checkpoint table을 설정한다.

 - Target System Checkpoint table을 추가하기 위해 GLOBAL Parameter 파일을 설정한다.

GGSCI> EDIT PARAMS ./GLOBALS

 ---------------------------------------------------------------------------------------------------

        checkpointtable lovelybin.ggschkpt

 

 - Target System DB에 접속해 Replicat Checkpoint table을 생성한다.

GGSCI> DBLOGIN USERID ggtarget1, PASSWORD welcome1

GGSCI> ADD CHECKPOINTTABLE

 

3.2.2 Replicat Group 추가

Target System Replicat Group을 추가한다. Source에서 설정한 Trail과 동일한 파일명으로 한다.

GGSCI> ADD REPLICAT RORA01, EXTTRAIL ./dirdat/01

 

3.2.3 Replicat Parameter 설정

GGSCI> EDIT PRARAM RORA01

 --replicat parameter

replicat rora01

setenv (ORACLE_SID="ortest")

--Identical Table 

assumetargetdefs

userid lovelybin, password ********

discardfile ./dirrpt/rini01.dsc, purge

map lovelybin.tcustmer, target lovelybin.tcustmer;

map lovelybin.tcustord, target lovelybin.tcustord;

3.2.4 Replicat Process 구동

START REPLICAT RORA01

 

GGSCI> INFO REPLICAT RORA01

 

 


 



4 Generate Activity and Verify Results

 

4.1 Generate Database Operation

4.1.1 Execute DML

 - GoldenGate 예제로 있는 스크립트를 통해 Source DB의 내용을 변경한다.

 

4.2 Verify change capture and delivery

4.2.1 Result of Source System

Tcustmer

Tcustord

 

 - Target System으로 변경 데이터 전송

GGSCI> SEND EXTRACT EORA01, REPORT

GGSCI> VIEW REPORT EORA01

 

4.2.2 Result of Target System

 - Log 파일을 통한 변경 확인

GGSCI> SEND REPLICAT RORA01, REPORT

GGSCI> VIEW REPORT RORA01

 

 - DB Link를 통한 변경 데이터 확인

SQL> (select * from tcustmer minus select * from tcustmer@ortest_link)

  2  UNION ALL

  3  (select * from tcustmer@ortest_link minus select * from tcustmer);

 

no rows selected

 

 



# 실습에 관한 좀 더 자세한 사진은 첨부문서에 있습니다.




Comments (+add yours?)

Tracbacks (+view to the desc.)

Newer Entries Older Entries