ORACLE GoldenGate 11g INSERTMISSINGUPDATES v1.0
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’ 에 기술했다.