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 에 대한 추출을 시작

End of Documents.

+ Recent posts