설치 전제조건과 초기 구성
소스와 타깃 준비, 복제 계정 및 Manager, Extract, Pump, Replicat 초기 구성과 서비스명 및 권한 쟁점
#핵심 요약
실습에서는 Oracle 19c 소스, 타깃 DB를 DBCA로 준비하고 리스너, 접속, 저장 공간을 확인함
양쪽 DB의 ARCHIVELOG, FORCE LOGGING, 최소 Supplemental Logging과 ENABLE_GOLDENGATE_REPLICATION을 확인, 설정함
복제 계정을 만든 뒤 Manager, EXT1, PMP1, REP1 순서로 구성하며 대상 테이블은 양쪽에 준비함
#개념과 동작 원리
| 준비 단계 | 환경과 권한 설정 |
|---|---|
| DB 준비 | 파일시스템, non-CDB, AL32UTF8, 아카이브 활성화 조건으로 두 DB 생성 |
| 접속 확인 | local_listener, 서비스 등록, tnsnames.ora와 tnsping, 리스너 상태 확인 |
| 소프트웨어 설치 | 압축 해제, oraInst.loc 준비, ORA19c 옵션의 silent 설치, START_MANAGER=false |
| 환경변수 | OGG_HOME, PATH, LD_LIBRARY_PATH에 설치 홈과 Oracle 라이브러리 반영 |
| DB 설정 | 아카이브, 강제 로깅, 보충 로깅과 GoldenGate 복제 파라미터 점검 |
| 소스 계정 | CREATE SESSION과 조회, LogMining, 관리 패키지 권한을 나열하며 CAPTURE 관리 권한 프로시저도 대안으로 제시 |
| 타깃 계정 | DBA와 관리 패키지 권한을 나열하며 APPLY 관리 권한 프로시저도 대안으로 제시 |
| 대상 객체 | SCOTT 테이블을 양쪽에 준비하고 EMP, DEPT 기본키 설정 |
DBCA 준비 문서 중 하나는 생성 DB명과 TNS의 SERVICE_NAME이 일치하지 않으며 수업 자료도 확인 필요로 표시함 실제 적용할 DB명, 서비스명은 확인 불가이며 그 값을 임의로 맞춘 설정은 제공하지 않음 소스 DBLOGIN에는 ORA-26944, OGG-25108 권한 경고와 로그인 성공이 함께 기록되어 있어 권한 구성이 모두 정상이라고 판정할 수 없음 권한 목록과 관리 권한 프로시저의 동등성, 최소 권한 여부도 확인 불가
#필수 명령어 또는 SQL
archive log list;
show parameter spfile
show parameter enable_goldengate_replication
select log_mode, force_logging, supplemental_log_data_min
from v$database;결과 해석: 사전 점검 수업 자료에는 Archive Mode, Automatic archival Enabled와 최소 보충 로깅 YES가 제시됨
alter system set enable_goldengate_replication=true scope=both;
alter database force logging;
alter database add supplemental log data;결과 해석: 최소 보충 로깅의 확인 출력은 YES이며 다른 설정 변경의 전체 출력은 기재 없음
| 구성 순서 | 설정, 등록 항목 |
|---|---|
| Manager | CREATE SUBDIRS 후 MGR에 PORT 7809, DYNAMICPORTLIST 7810-7820, 자동 재시작과 체크포인트 기반 트레일 정리 설정 |
| EXT1 | EXTTRAIL에 로컬 트레일 지정, TABLE scott.* 지정, ADD SCHEMATRANDATA 후 TRANLOG, BEGIN NOW로 등록 |
| PMP1 | EXTTRAILSOURCE로 로컬 트레일 등록, RMTHOST, MGRPORT와 RMTTRAIL로 상대 전송 경로 설정 |
| REP1 | 타깃 DBLOGIN, 체크포인트 테이블 생성, MAP scott., TARGET scott. 설정 후 원격 트레일과 체크포인트 테이블로 등록 |
ADD SCHEMATRANDATA scott
ADD EXTRACT EXT1, TRANLOG, BEGIN NOW
ADD EXTTRAIL ./dirdat/lt, EXTRACT EXT1, MEGABYTES 500
ADD EXTRACT PMP1, EXTTRAILSOURCE ./dirdat/lt
ADD RMTTRAIL ./dirdat/rt, EXTRACT PMP1, MEGABYTES 500결과 해석: 실습에서는 등록 후 기동한 EXT1의 RUNNING 상태를 제시하며 각 ADD 명령의 출력은 기재 없음
ADD CHECKPOINTTABLE <SCHEMA>.ggs_checkpoint
ADD REPLICAT REP1, EXTTRAIL ./dirdat/rt, BEGIN NOW, CHECKPOINTTABLE <SCHEMA>.ggs_checkpoint결과 해석: 실습에서는 이후 INFO ALL에서 REP1 RUNNING을 제시하며 이 등록문 자체의 출력은 기재 없음
#설치와 파라미터 파일 (실습 전체 흐름)
inventory_loc=/home/oracle/oraInventory
inst_group=oinstallunzip <OGG_ZIP>
mkdir -p /u01/app/oracle/goldengate/19c
cd fbo_ggs_Linux_x64_shiphome/Disk1/
./runInstaller -silent \
INSTALL_OPTION=ORA19c \
SOFTWARE_LOCATION=/u01/app/oracle/goldengate/19c \
-invPtrLoc /home/oracle/oraInst.loc \
START_MANAGER=false
# .bash_profile
export OGG_HOME=/u01/app/oracle/goldengate/19c
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$OGG_HOME:$LD_LIBRARY_PATH
export PATH=$OGG_HOME:$PATH
which ggsci결과 해석:
실습 기록: silent 설치는 Successfully Setup Software.로 끝났음
Silent 설치에는 인벤토리 위치를 알려 주는 oraInst.loc가 필요함
CREATE USER <OGG_USER> IDENTIFIED BY <PASSWORD>
DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp QUOTA UNLIMITED ON users;
GRANT CREATE SESSION TO <OGG_USER>;
EXEC DBMS_GOLDENGATE_AUTH.GRANT_ADMIN_PRIVILEGE('<OGG_USER>', 'CAPTURE'); -- 타깃은 'APPLY'결과 해석:
실습은 프로시저 대신 소스에 CREATE SESSION, ALTER SESSION, SELECT ANY DICTIONARY, SELECT ANY TABLE, FLASHBACK ANY TABLE, LOGMINING, DBMS_FLASHBACK 실행, V_$DATABASE, V_$LOG, V_$LOGFILE, V_$ARCHIVED_LOG, V_$LOGMNR_CONTENTS 조회 권한과 DBMS_XSTREAM_GG_ADM, DBMS_CAPTURE_ADM, DBMS_APPLY_ADM, DBMS_XSTREAM_ADM 실행 권한을 하나씩 줬고, 타깃에는 DBA와 같은 패키지 권한을 줬음
수업 자료는 XStream 관련 권한이 없으면 ADD SCHEMATRANDATA가 실패한다고 적음
프로시저 하나로 줄 때는 역할을 지정하지 않는 GRANT_ADMIN_PRIVILEGE('<OGG_USER>') 형식도 함께 제시됨
PORT 7809
DYNAMICPORTLIST 7810-7820
AUTORESTART EXTRACT *, RETRIES 5, WAITMINUTES 1
AUTORESTART REPLICAT *, RETRIES 5, WAITMINUTES 1
PURGEOLDEXTRACTS ./dirdat/*, USECHECKPOINTS, MINKEEPDAYS 3EXTRACT EXT1
USERID <OGG_USER>@<SOURCE_ALIAS>, PASSWORD <PASSWORD>
EXTTRAIL ./dirdat/lt
TABLE scott.*;
EXTRACT PMP1
USERID <OGG_USER>@<SOURCE_ALIAS>, PASSWORD <PASSWORD>
RMTHOST <TARGET_HOST>, MGRPORT 7809
RMTTRAIL ./dirdat/rt
TABLE scott.*;
REPLICAT REP1
USERID <OGG_USER>@<TARGET_ALIAS>, PASSWORD <PASSWORD>
MAP scott.*, TARGET scott.*;CREATE SUBDIRS
START MGR
INFO MGR
START EXTRACT EXT1
START EXTRACT PMP1
START REPLICAT REP1
INFO ALL
STATS EXTRACT EXT1
STATS REPLICAT REP1결과 해석:
| 구성 요소 | 역할 |
|---|---|
| Pump(PMP1) | Extract의 한 종류라 EXTRACT로 선언하며, 리두가 아니라 EXT1이 만든 로컬 트레일(lt)을 읽어 상대 서버 Manager 포트로 보냄 |
RMTTRAIL |
상대 서버에 쌓일 원격 트레일 |
| 체크포인트 테이블 | Replicat이 어디까지 반영했는지 기록해, 프로세스가 죽었다 살아나도 이어서 적용함 |
MAP ..., TARGET ... |
소스 테이블을 타깃 테이블로 연결 |
STATS |
프로세스별 INSERT, UPDATE, DELETE 처리 건수, 양쪽 건수로 누락 여부를 봄 |
실습 기록: START MGR 뒤 INFO MGR은 Manager is running (IP port TCP:<HOST>.7809 ...), INFO EXTRACT EXT1은 Status RUNNING과 Log Read Checkpoint(Oracle Redo Logs, Seqno 8)였고, 마지막 INFO ALL에서 MANAGER, EXT1, PMP1, REP1이 모두 RUNNING, Lag 00:00:00이었음
소스에서 UPDATE dept SET dname = 'SEOUL' WHERE deptno = 10, COMMIT 뒤 10~20초 안에 타깃에서 같은 값이 보였음(소스 → EXT1 → lt → PMP1 → rt → REP1 → 타깃)
커밋된 트랜잭션만 복제됨
#사용 조건과 주의사항
BEGIN NOW 등록 이전 데이터의 초기 적재 절차는 이 설치 본문에 기재 없음
df-h 표기는 공백 누락으로 의심됨