이 문서는 Windows 운영 체제에서 Oracle GoldenGate를 사용하여 Oracle 데이터베이스 간의 단방향 데이터 복제를 설정하는 과정을 상세히 설명합니다. 단방향 복제는 일반적으로 리포팅, 분석 또는 읽기 전용 애플리케이션을 위한 대상 데이터베이스의 실시간 업데이트를 유지하는 데 사용됩니다.
환경 개요
이 구성에서는 다음과 같은 환경을 가정합니다.
원본 데이터베이스 (Source DB)
- 운영 체제: Windows 10 (64비트)
- Oracle 버전: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
- Oracle GoldenGate 버전: 11.2.1.0.1
대상 데이터베이스 (Target DB)
- 운영 체제: Windows 7 (64비트)
- Oracle 버전: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
- Oracle GoldenGate 버전: 11.2.1.0.1
Oracle GoldenGate 소프트웨어 설치 및 초기 설정
GoldenGate 소프트웨어는 일반적으로 설치 프로그램(.exe)을 사용하거나 압축 해제(portable) 방식으로 설치할 수 있습니다. 여기서는 압축 해제 방식을 사용하며, 원본과 대상 서버 모두 C:\ogg 디렉토리에 압축을 해제했다고 가정합니다.
1. 환경 변수 설정
Oracle 데이터베이스의 ORACLE_HOME 및 ORACLE_SID 환경 변수가 올바르게 설정되어 있는지 확인해야 합니다. 이는 Oracle 데이터베이스와 GoldenGate가 상호 작용하는 데 필수적입니다.
C:\Users\admin> echo %ORACLE_HOME%
D:\app\admin\product\11.2.0\dbhome_1
C:\Users\admin> echo %ORACLE_SID%
orclpdb
2. GoldenGate 디렉토리 구조 생성
GoldenGate 소프트웨어 압축 해제 후, ggsci 유틸리티를 실행하여 필요한 하위 디렉토리들을 생성합니다.
C:\Users\admin> cd C:\ogg
C:\ogg> ggsci
Oracle GoldenGate Command Interpreter for Oracle
Version 11.2.1.0.1 OGGCORE_11.2.1.0.1_PLATFORMS_120423.0230
Windows x64 (optimized), Oracle 11g on Apr 23 2012 04:55:02
Copyright (C) 1995, 2012, Oracle and/or its affiliates. All rights reserved.
GGSCI (SERVER-A) 1> CREATE SUBDIRS
Creating subdirectories under current directory C:\ogg
Parameter files C:\ogg\dirprm: already exists
Report files C:\ogg\dirrpt: created
Checkpoint files C:\ogg\dirchk: created
Process status files C:\ogg\dirpcs: created
SQL script files C:\ogg\dirsql: created
Database definitions files C:\ogg\dirdef: created
Extract data files C:\ogg\dirdat: created
Temporary files C:\ogg\dirtmp: created
Stdout files C:\ogg\dirout: created
생성된 주요 디렉토리의 역할은 다음과 같습니다.
dirchk: 체크포인트 파일 저장dirdat: 트레일(Trail) 및 추출(Extract) 파일 저장dirprm: 파라미터 파일 저장dirrpt: 프로세스 보고서 파일 저장
3. GoldenGate Manager 서비스 등록
GoldenGate Manager 프로세스를 Windows 서비스로 등록하여 시스템 시작 시 자동으로 시작되도록 구성합니다. 먼저, GLOBALS 파라미터 파일을 편집하여 Manager 서비스 이름을 정의합니다.
GGSCI (SERVER-A) 2> EDIT PARAMS ./GLOBALS
파일에 다음 내용을 추가하고 저장합니다.
MGRSERVNAME GGMANAGER
ggsci를 종료하고 install addservice 명령으로 서비스를 추가합니다.
GGSCI (SERVER-A) 3> EXIT
C:\ogg> install addservice
Service 'GGMANAGER' created.
Install program terminated normally.
Oracle 데이터베이스 구성
GoldenGate 복제를 위해 Oracle 데이터베이스를 적절히 준비해야 합니다. 이는 원본 및 대상 데이터베이스 모두에 적용될 수 있습니다.
1. GoldenGate 관리 사용자 생성 및 권한 부여
GoldenGate 프로세스가 데이터베이스에 접속하고 필요한 작업을 수행할 수 있도록 전용 데이터베이스 사용자를 생성하고 적절한 권한을 부여합니다. 테스트 환경에서는 DBA 롤을 부여할 수 있지만, 운영 환경에서는 최소한의 권한만 부여하는 것이 좋습니다.
CREATE USER GGADMIN IDENTIFIED BY "GGadmin123" DEFAULT TABLESPACE USERS TEMPORARY TABLESPACE TEMP;
GRANT CONNECT, RESOURCE, DBA TO GGADMIN; -- 운영 환경에서는 DBA 대신 필요한 최소 권한 부여
ALTER USER GGADMIN QUOTA UNLIMITED ON USERS;
2. 원본 데이터베이스 아카이브 로그 모드 확인 및 활성화
GoldenGate는 변경 데이터를 캡처하기 위해 아카이브 로그 모드가 활성화되어 있어야 합니다.
SQL> ARCHIVE LOG LIST;
-- Log mode Archive Mode 여야 함
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT;
SQL> ALTER DATABASE ARCHIVELOG;
SQL> ALTER DATABASE OPEN;
-- 또는 STARTUP FORCE;
3. 데이터베이스 수준 보충 로깅 활성화
GoldenGate가 변경 데이터를 올바르게 캡처하려면 데이터베이스 수준에서 보충 로깅이 활성화되어 있어야 합니다. 먼저 현재 상태를 확인합니다.
SELECT SUPPLEMENTAL_LOG_DATA_MIN FROM V$DATABASE;
-- 결과가 'YES'가 아니라면 아래 명령으로 활성화합니다.
활성화되지 않은 경우, 다음 명령을 실행합니다.
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
4. 테이블 수준 보충 로깅 활성화
복제할 각 테이블에 대해 기본 키(PRIMARY KEY)를 기반으로 하는 보충 로깅을 활성화합니다. 여러 테이블의 경우 각 테이블에 대해 이 명령을 실행합니다.
ALTER TABLE APP_SCHEMA.EMPLOYEES ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;
ALTER TABLE APP_SCHEMA.DEPARTMENTS ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;
5. 원본 데이터베이스 휴지통 기능 비활성화
GoldenGate 복제 시 데이터 일관성을 위해 Oracle의 휴지통 기능을 비활성화하는 것이 좋습니다.
SQL> SHOW PARAMETER RECYCLEBIN;
-- 결과가 'ON'이라면 아래 명령으로 비활성화합니다.
SQL> ALTER SYSTEM SET RECYCLEBIN=OFF;
6. GoldenGate TRANDATA 추가
GoldenGate 추출 프로세스가 변경 데이터를 캡처할 수 있도록 복제할 테이블에 대한 TRANDATA 정보를 추가합니다. Wildcard(*)를 사용하여 스키마 내 모든 테이블에 적용할 수도 있습니다.
GGSCI (SERVER-A) 1> DBLOGIN USERID GGADMIN, PASSWORD GGadmin123
Successfully logged into database.
GGSCI (SERVER-A) 2> ADD TRANDATA APP_SCHEMA.EMPLOYEES
Logging of supplemental redo log data is already enabled for table APP_SCHEMA.EMPLOYEES.
GoldenGate 프로세스 그룹 구성 (원본 및 대상)
GoldenGate 복제는 원본의 Manager, Extract, Data Pump 프로세스와 대상의 Manager, Replicat 프로세스로 구성됩니다.
1. 원본 Manager(MGR) 프로세스 설정 및 시작
원본 서버에서 Manager 파라미터 파일을 편집합니다.
GGSCI (SERVER-A) 3> EDIT PARAMS MGR
다음 내용을 추가하거나 수정합니다.
PORT 7809
DYNAMICPORTLIST 7810-7815
AUTOSTART EXTRACT *
AUTORESTART EXTRACT *, RETRIES 5, WAITMINUTES 2
Manager 프로세스를 시작하고 상태를 확인합니다.
GGSCI (SERVER-A) 4> START MGR
Starting Manager as service ('GGMANAGER')...
Service started.
GGSCI (SERVER-A) 5> INFO ALL
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
2. 원본 Extract(추출) 프로세스 설정
원본 데이터베이스에서 변경 데이터를 캡처하는 Extract 프로세스를 정의합니다. Extract 파라미터 파일을 생성합니다.
GGSCI (SERVER-A) 6> EDIT PARAMS EXTLOCAL
다음 내용을 추가합니다.
EXTRACT EXTLOCAL
DYNAMICRESOLUTION
USERID GGADMIN, PASSWORD GGadmin123
EXTTRAIL C:\ogg\dirdat\lt
TABLE APP_SCHEMA.EMPLOYEES;
TABLE APP_SCHEMA.DEPARTMENTS;
Extract 프로세스를 등록하고 로컬 트레일 파일을 생성합니다.
GGSCI (SERVER-A) 7> ADD EXTRACT EXTLOCAL, TRANLOG, BEGIN NOW
EXTRACT added.
GGSCI (SERVER-A) 8> ADD EXTTRAIL C:\ogg\dirdat\lt, EXTRACT EXTLOCAL
EXTTRAIL added.
Extract 프로세스를 시작하고 상태를 확인합니다.
GGSCI (SERVER-A) 9> START EXTLOCAL
Sending START request to MANAGER ('GGMANAGER') ...
EXTRACT EXTLOCAL starting
GGSCI (SERVER-A) 10> INFO ALL
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
EXTRACT RUNNING EXTLOCAL 00:00:00 00:00:05
3. 원본 Data Pump(펌프) 프로세스 설정
Data Pump 프로세스는 로컬 트레일 파일에서 데이터를 읽어 대상 서버로 전송합니다. Data Pump 파라미터 파일을 생성합니다.
GGSCI (SERVER-A) 11> EDIT PARAMS PUMPREMOTE
다음 내용을 추가합니다. RMTHOST는 대상 서버의 IP 주소입니다.
EXTRACT PUMPREMOTE
DYNAMICRESOLUTION
USERID GGADMIN, PASSWORD GGadmin123
RMTHOST 192.168.1.101, MGRPORT 7809
RMTTRAIL C:\ogg\dirdat\rt
TABLE APP_SCHEMA.EMPLOYEES;
TABLE APP_SCHEMA.DEPARTMENTS;
Data Pump 프로세스를 등록하고 원격 트레일 파일을 생성합니다.
GGSCI (SERVER-A) 12> ADD EXTRACT PUMPREMOTE, EXTTRAILSOURCE C:\ogg\dirdat\lt
EXTRACT added.
GGSCI (SERVER-A) 13> ADD RMTTRAIL C:\ogg\dirdat\rt, EXTRACT PUMPREMOTE
RMTTRAIL added.
Data Pump 프로세스를 시작하고 상태를 확인합니다.
GGSCI (SERVER-A) 14> START PUMPREMOTE
Sending START request to MANAGER ('GGMANAGER') ...
EXTRACT PUMPREMOTE starting
GGSCI (SERVER-A) 15> INFO ALL
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
EXTRACT RUNNING EXTLOCAL 00:00:00 00:00:03
EXTRACT RUNNING PUMPREMOTE 00:00:00 00:00:10
4. 대상 Manager(MGR) 프로세스 설정 및 체크포인트 테이블 생성
대상 서버에서도 Manager 프로세스를 설정하고 시작해야 합니다. 원본 서버와 유사하게 GLOBALS 파일을 편집하고 서비스를 등록합니다.
C:\Users\admin> cd C:\ogg
C:\ogg> ggsci
GGSCI (SERVER-B) 1> CREATE SUBDIRS
-- 하위 디렉토리 생성
GGSCI (SERVER-B) 2> EDIT PARAMS ./GLOBALS
파일에 다음 내용을 추가합니다.
MGRSERVNAME GGMANAGER
CHECKPOINTTABLE GGADMIN.OGG_CHECKPOINT
ggsci를 종료하고 install addservice 명령으로 서비스를 추가합니다.
GGSCI (SERVER-B) 3> EXIT
C:\ogg> install addservice
Service 'GGMANAGER' created.
Install program terminated normally.
GoldenGate 체크포인트 정보를 저장할 테이블을 대상 데이터베이스에 생성합니다. 이는 복구 시 중복 처리나 누락을 방지하는 데 중요합니다.
GGSCI (SERVER-B) 1> DBLOGIN USERID GGADMIN, PASSWORD GGadmin123
Successfully logged into database.
GGSCI (SERVER-B) 2> ADD CHECKPOINTTABLE GGADMIN.OGG_CHECKPOINT
Successfully created checkpoint table GGADMIN.OGG_CHECKPOINT.
대상 Manager 파라미터 파일을 편집합니다.
GGSCI (SERVER-B) 3> EDIT PARAMS MGR
다음 내용을 추가하거나 수정합니다.
PORT 7809
DYNAMICPORTLIST 7810-7815
AUTOSTART REPLICAT *
AUTORESTART REPLICAT *, RETRIES 5, WAITMINUTES 2
LAGREPORTHOURS 1
LAGINFOMINUTES 3
LAGCRITICALMINUTES 5
PURGEOLDEXTRACTS C:\ogg\dirdat\rt*, USECHECKPOINTS, MINKEEPDAYS 3
5. 대상 Replicat(복제) 프로세스 설정
대상 서버에서 원격 트레일 파일을 읽어 대상 데이터베이스에 변경 사항을 적용하는 Replicat 프로세스를 정의합니다. Replicat 파라미터 파일을 생성합니다.
GGSCI (SERVER-B) 4> EDIT PARAMS REPTARGET
다음 내용을 추가합니다.
REPLICAT REPTARGET
USERID GGADMIN, PASSWORD GGadmin123
ASSUMETARGETDEFS
REPERROR DEFAULT, DISCARD
DISCARDFILE ./dirrpt/reptarget.dsc, APPEND, MEGABYTES 50
DYNAMICRESOLUTION
MAP APP_SCHEMA.EMPLOYEES, TARGET APP_SCHEMA.EMPLOYEES;
MAP APP_SCHEMA.DEPARTMENTS, TARGET APP_SCHEMA.DEPARTMENTS;
Replicat 프로세스를 등록합니다.
GGSCI (SERVER-B) 5> ADD REPLICAT REPTARGET, EXTTRAIL C:\ogg\dirdat\rt, CHECKPOINTTABLE GGADMIN.OGG_CHECKPOINT
REPLICAT added.
Manager와 Replicat 프로세스를 시작하고 상태를 확인합니다.
GGSCI (SERVER-B) 6> START MGR
Starting Manager as service ('GGMANAGER')...
Service started.
GGSCI (SERVER-B) 7> START REPTARGET
Sending START request to MANAGER ('GGMANAGER') ...
REPLICAT REPTARGET starting
GGSCI (SERVER-B) 8> INFO ALL
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
REPLICAT RUNNING REPTARGET 00:00:00 00:00:15