[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.)

Newer Entries Older Entries