//-- 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 등을
이기종으로 변경 시 서비스의 연속성 보장
|
End of document.