본문 바로가기

Oracle GoldenGate2

ORACLE GoldenGates 11g INSERTMISSINGUPDATES v1.0

ORACLE GoldenGate 11g INSERTMISSINGUPDATES v1.0

 

Date

Ver

Etc.

13.07.25

1.0

 

 

 

 

 

 

 

 

 

1.    INSERTUPDATES & INSERTMISSINGUPDATES

INSERTUPDATES REPLICAT 에서 사용할 수 있는 파라미터이다.

UPDATE 구문을 INSERT 로 바꿔 수행한다.

 

INSERTMISSINGUPDATES INSERTUPDATES 와 마찬가지로 REPLICAT 에서

사용할 수 있는 파라미터이다.

 

다만 두 파라미터가 다른 점으로 INSERTUPDATES 는 무조건적으로 UPDATE -> INSERT 변환을

하지만 INSERTMISSINGUPDATES 는 타겟에 데이터가 없는 경우 INSERT 를 한다.

 

INSERTMISSINGUPDATES 를 사용하면 존재하지 않는 데이터에 대해 발생하는 에러를 회피할 수 있다.

이를 테면 존재하지 않는 데이터에 대해 UPDATE 를 시도하면 다음과 같은 에러가

GoldenGate 에서 발생하고 Process abended 된다.

 

WARNING OGG-01004  Aborted grouped transaction on 'tmall.ctest', Database error 1403 (No data found).

 

2.    TEST (ENVIRONMENT)

<SOURCE>

ORACLE

GoldenGate for ORACLE

TABLE CTEST (ID NUMBER(12), TXT VARCHAR2(30))

 

<TARGET>

MariaDB

GoldenGate for MariaDB

TABLE CTEST (ID DECIMAL(12,0), TXT VARCHAR(30))

 

3.    TEST (OUTLINE)

l  PK가 있는 경우

l  PK가 없는 경우

 

4.    TEST

<PK가 있는 경우>

Source : (1, ‘안녕’)

Target : NULL

 

Source DML : (1,’안녕’) -> (1,’안녕하세요’)

TARGET Result : (1,’안녕하세요’)

 

<PK가 없는 경우>

Source : (1, ‘안녕’)

Target : NULL

 

Source DML : (1,’안녕’) -> (1,’안녕하세요’)

TARGET Result : (1,’안녕하세요’)

 

PK 유무를 떠나 잘 복제되는 걸 확인했다.

다만 PK 가 없는 경우 데이터가 동일함을 보장할 수 없다.

 

5.    RANGE OF REPLICATED DATA

INSERTMISSINGUPDATES 파라미터를 통한 복제범위는 LOB(CLOB) 과 같은

서플리멘탈 로깅의 대상이 되지 못하는 데이터 타입을 제외하고 전부 가능하다.

 

실제로 어느 컬럼까지 복제가 가능하냐에 대해서는 PK 가 없는 경우 전 컬럼에 대해 서플리멘탈 로깅이

실시되므로 전부 복제된다.

 

하지만 PK 가 있는 경우에는 UPDATE SET 절과 PK 의 키 컬럼이 복제되고 나머지 값에 대해서는

NULL 이 복제된다.

 

이 부분은 OGG REDO LOG (ARCHIVED LOG) 를 마이닝하며,

REDO LOG 에 어떤 내용이 쓰이는지를 생각하면 명확하다.

 

자세한 내용은 문서 ‘ORACLE GoldenGates 11g INSERTUPDATES v1.1’ 에 기술했다.