본문 바로가기

공부 이야기/데이터베이스

OCI - golden gate : Migration CDC

oracle 에서 update, insert 등의 DML 작업(또는 트랜잭션)을 하면 redo 로그에 남게 된다.

redo 로그를 남기는 이유는 rollback을 수행하거나 commit이 이뤄지지 않은 장애 상황에서 변경 전 데이터로 돌려놓기 위함이다.

오라클은 별도로 flashback 기능을 수행하는데 rollback 데이터가 소실된 경우 이를 재현하는 기능이다.

redo-log archive file에서 수행한다.

 

redo log 관련해서는 백그라운드 프로세서 중 하나인 LGWR가 이를 처리한다.

별도의 프로세서에서 수행하기 때문에 데이터베이스 전체 서버의 성능의 최적화와 기능의 확장성을 보장해준다.

 

구체적으로 Redo Log Buffer에 있는 변경된 레코드의 이전 정보가 저장된 후, LGWR가 Redo File에 저장하는데, 

LGWR은 다음 네 가지 상황에 Redo Log Buffer에 있는 데이터를 Redo File에 저장한다.

1) 트랜잭션의 커밋

2) Redo Log Buffer의 1/3 이상 채워졌을 때

3) Redo Log Buffer의 변경된 레코드가 1MB을 넘어섰을 때

4) DBWR가 Dirty Block을 Data file에 저장하기 직전

 

redo log의 상태는 크게 3가지로 구분된다.

current : 현재 LGWR이 log를 기록하고 있는 상태

active : log 기록 중이지는 않지만 dirty block이 캐시 메모리에 남아 있는 상태로 언제든지 log에 기록이 될 수 있다.

inactive : 메모리에도 없는 상태로 물리적인 행위를 수행할 수 있다. golden gate는 이 때 CDC 작업을 수행하는 것이다.

로그의 위치는 $ORACLE_BASE/oradata/$SID/ 디렉토리에 redo01.log 형태로 저장되어 관리된다.

 

한편, redo 파일은 log switch를 통해서 관리할 수 있다.

switch 명령어를 통해 현재 redo 파일의 상태를 current에서 active 상태로 전환한 후, 새로운 redo 파일을 생성한다.

이로 인해, 체크포인트 시점을 잡아줄 수 있다.

 

Golden Gate는 commit이 완료된 데이터를 대상으로 target system에 복제를 수행한다.

active, current 와 같이 실행 중인 데이터는 별도로 처리한다.

 

1. Extract : Redo file에 접근해서 commit이 완료된 데이터를 가져온다.

2. Trail File : Extract 단계에서 수집한 데이터를 저장하는 공간이다. Target system으로 바로 보내지 않는다.

3. Pump : 복제를 수행할 프로세스로 N개 이상의 프로세스로 병렬 수행이 가능하다.

 

단방향 모델이 아닌 양방향 모델, 혹은 감시 서버를 추가하면 Auto Failover, Load Balancing 등의 HA를 구현할 수 있다.