데이터베이스 연구실.log

RAC와 단일 DB 간 복제

실습 RAC CDB에서 단일 CDB의 PDB로 보내는 구성과 소스, 타깃 준비, 통합 캡처 및 예상 결과

PASSTHRUACCESSRULEDBA_CAPTURERACIntegrated ExtractCDBPDBREGISTER EXTRACT

#핵심 요약

실습에서는 두 인스턴스 RAC의 PDB를 소스, 단일 인스턴스 CDB의 PDB를 타깃으로 사용함

RAC 한 노드에 Integrated Extract, Pump를 두고 타깃에는 별도 Manager, Replicat을 둠

초기 데이터는 양쪽에 같은 EMP 구조와 14행을 직접 준비한 뒤 이후 변경을 비교함

별도 구성 초안은 설치, 복제 결과를 예상 결과로 명시하며 실제 수행 완료 기록이 아님

#개념과 동작 원리

항목 소스 RAC 타깃 단일 DB
컨테이너 애플리케이션 EMP는 소스 PDB에 배치 적용 대상은 타깃 PDB
계정 CDB 루트에서 등록할 공통 관리 사용자와 대상 테이블 소유자 준비 PDB 적용 계정, 체크포인트 생성 권한, 대상 DML 권한 준비
로깅 ARCHIVELOG, FORCE LOGGING, 최소 보충 로깅과 테이블 TRANDATA 이 단방향 실습에서는 소스와 같은 로깅 작업을 타깃에 나열하지 않음
파라미터 ENABLE_GOLDENGATE_REPLICATION과 STREAMS_POOL_SIZE를 SID='*'로 설정 ENABLE_GOLDENGATE_REPLICATION 확인
연결 PDB용 접속과 CDB 루트용 접속 구분 타깃 PDB 접속과 Manager, Collector 포트 준비
이름 지정 PDB.스키마.테이블의 3단계 소스 이름 타깃 PDB에 연결한 뒤 스키마.테이블 지정

실습에서는 CDB 소스에서 Integrated Extract를 사용하며 DB 로그마이닝 서버가 두 리두 스레드의 변경을 통합한다고 설명함 단일 노드 설치는 실습 구성이며 해당 노드 장애 시 Extract 자동 이전을 검증한 고가용성 구성은 아님 두 문서의 19.3, 19.26 언급과 별도 초안의 RU 미적용 설명을 한 환경의 실행 버전으로 합치지 않았음 실제 VERSION_FULL, OPatch 출력은 확인 불가

#필수 명령어 또는 SQL

소스 CDB$ROOT SQL*Plus (SYSDBA)조회만 함
SELECT inst_id, instance_name, version_full
  FROM gv$instance
 ORDER BY inst_id;
SELECT log_mode, force_logging, supplemental_log_data_min
  FROM v$database;
SELECT inst_id, name, value
  FROM gv$parameter
 WHERE name IN ('enable_goldengate_replication', 'streams_pool_size')
 ORDER BY inst_id, name;

결과 해석: 실습 준비 상태는 ARCHIVELOG, YES, YES이며 두 인스턴스의 복제 파라미터 확인을 요구함 후속 준비표의 셋 다 YES 표현은 LOG_MODE와 맞지 않음

소스 CDB$ROOT SQL*Plus (SYSDBA)객체 또는 설정을 변경함
ALTER SYSTEM SET enable_goldengate_replication = TRUE SCOPE = BOTH SID = '*';
ALTER SYSTEM SET streams_pool_size = 256M SCOPE = BOTH SID = '*';
ALTER DATABASE FORCE LOGGING;
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;

결과 해석: 실습에서는 설정 후 양 인스턴스 값을 조회하도록 하며 해당 값이 모든 환경의 권장 크기인지는 확인 불가

소스 PDB에 DBLOGIN한 GGSCI객체 또는 설정을 변경함
ADD TRANDATA <SCHEMA>.emp
소스 CDB 루트에 DBLOGIN한 GGSCI객체 또는 설정을 변경함
REGISTER EXTRACT EXT1 DATABASE CONTAINER (<PDB_NAME>)
ADD EXTRACT EXT1, INTEGRATED TRANLOG, BEGIN NOW
ADD EXTTRAIL ./dirdat/lt, EXTRACT EXT1, MEGABYTES 200

결과 해석: 설치, 동기화 실습의 주석은 보충 로깅 활성화와 Extract 등록을 제시하며 별도 구성 초안은 이를 수행 예정 절차로 분류함

소스 EXT1 파라미터의 캡처 부분객체 또는 설정을 변경함
EXTTRAIL ./dirdat/lt
LOGALLSUPCOLS
UPDATERECORDFORMAT COMPACT
TRANLOGOPTIONS INTEGRATEDPARAMS (MAX_SGA_SIZE 200, PARALLELISM 1)
TABLE <PDB_NAME>.<SCHEMA>.emp;
타깃 PDB에 연결하는 REP1 파라미터의 매핑 부분객체 또는 설정을 변경함
MAP <PDB_NAME>.<SCHEMA>.emp, TARGET <SCHEMA>.emp;

결과 해석: Pump는 로컬 lt를 PASSTHRU로 타깃 rt에 전달하고 Replicat은 타깃 PDB에서 해당 EMP에 적용함

소스·타깃 각각의 GGSCI조회만 함
INFO ALL
소스 GGSCI조회만 함
INFO EXTRACT EXT1
STATS EXTRACT EXT1, TOTAL
타깃 GGSCI조회만 함
STATS REPLICAT REP1, TOTAL

결과 해석: 실습에서는 Oracle Integrated Redo Logs 체크포인트와 두 인스턴스에서 각각 만든 UPDATE, INSERT, DELETE의 타깃 반영을 확인하도록 함 초기 14행에서 1행 추가, 1행 삭제 후 14행이라는 값은 실습 예시이며 현재 환경에서 재현한 결과가 아님

#설치, Manager, Pump, Replicat

파일 (<NODE1> /home/oracle/oraInst_ogg.loc)객체 또는 설정을 변경함
inventory_loc=/home/oracle/oggInventory
inst_group=dba
oracle 계정 셸 (<NODE1>, 타깃은 -invPtrLoc 없이 같은 명령)객체 또는 설정을 변경함
mkdir -p /u01/app/oracle/goldengate/19c
cd /home/oracle/fbo_ggs_Linux_x64_shiphome/Disk1
./runInstaller -silent -waitforcompletion   INSTALL_OPTION=ORA19c   SOFTWARE_LOCATION=/u01/app/oracle/goldengate/19c   -invPtrLoc /home/oracle/oraInst_ogg.loc   START_MANAGER=false

결과 해석:

<NODE1>은 Grid 중앙 인벤토리와 섞이지 않게 OGG 전용 인벤토리를 쓰고, 타깃은 기존 /etc/oraInst.loc를 씀
양쪽 모두 Successfully Setup Software.로 끝났음

.bash_profile의 LD_LIBRARY_PATH에 $ORACLE_HOME/lib가 빠지거나 순서가 틀리면 libnnz19.so 로딩 오류가 남

타깃 GGSCI (EDIT PARAMS MGR)객체 또는 설정을 변경함
PORT 7809
DYNAMICPORTLIST 7810-7820
ACCESSRULE, PROG *, IPADDR *, ALLOW
AUTORESTART REPLICAT *, RETRIES 5, WAITMINUTES 1
PURGEOLDEXTRACTS ./dirdat/*, USECHECKPOINTS, MINKEEPDAYS 3
소스 GGSCI (EDIT PARAMS PMP1)객체 또는 설정을 변경함
EXTRACT PMP1
RMTHOST <TARGET_HOST>, MGRPORT 7809
RMTTRAIL ./dirdat/rt
PASSTHRU
TABLE <PDB_NAME>.<SCHEMA>.emp;
타깃 GGSCI (타깃 PDB에 DBLOGIN)객체 또는 설정을 변경함
ADD CHECKPOINTTABLE <OGG_USER>.ggs_checkpoint
-- EDIT PARAMS REP1
REPLICAT REP1
USERID <OGG_USER>@<TARGET_PDB_ALIAS>, PASSWORD <PASSWORD>
MAP <PDB_NAME>.<SCHEMA>.emp, TARGET <SCHEMA>.emp;

ADD REPLICAT REP1, EXTTRAIL ./dirdat/rt, BEGIN NOW, CHECKPOINTTABLE <OGG_USER>.ggs_checkpoint
START REPLICAT REP1

결과 해석:

PMP1이 타깃 Manager(7809)에 붙어야 하므로 타깃 Manager를 먼저 띄우고, ACCESSRULE이 없으면 PMP1 접속이 거부될 수 있다고 수업 자료는 적음

PASSTHRU는 DB에 다시 접속하지 않고 트레일만 넘기므로 Pump 파라미터에 USERID가 없음

소스 DB의 캡처 상태는 SELECT capture_name, status FROM dba_capture로 보며 실습에서는 OGG$CAP_EXT1 ENABLED였음

타깃 $OGG_HOME/dirdat에 rt000000000이 생겼는지 보고, 없으면 PMP1 전송을 점검함

이후 패치 때는 소스 GGSCI에서 STOP EXTRACT * → STOP MGR, 패치(datapatch 포함) 뒤 START MGR → START EXTRACT * 순서임

#두 인스턴스 변경 확인

소스 작업 접속 인스턴스 타깃 결과
UPDATE emp SET sal = 9999 WHERE empno = 7788 <INSTANCE1> 7788 SAL 9999
INSERT INTO emp VALUES (9001, 'RACTEST', ...) <INSTANCE2> 9001 생김
DELETE FROM emp WHERE empno = 7934 <INSTANCE2> 7934 사라짐

실습 기록: 10~20초 뒤 타깃에서 위 결과가 보였고 건수는 14 + 1 - 1 = 14, STATS REPLICAT REP1, TOTAL은 inserts 1, updates 1, deletes 1이었음
<INSTANCE2> 변경은 thread 2 리두에 기록되지만 두 thread가 공유 저장소에 있어 <NODE1>의 Integrated Extract가 SCN 순서로 합쳐 읽음

#사용 조건과 주의사항

소스에서 타깃 Manager와 Collector로 연결하는 경로와 PDB READ WRITE, 문자셋을 확인하는 것이 실습 준비 범위임 실습 Manager의 ACCESSRULE, PROG *, IPADDR *, ALLOW(모든 주소 허용)와 방화벽 전체 비활성화는 실습 조건이며, 운영에서는 소스 주소로 좁힘 설치 디렉터리는 /u01/app/oracle/goldengate/19c임

SEO_HKabsumveritas@gmail.comBuilt with Claude Code & Codex

마지막 갱신 개인 학습 기록이며 운영 환경 적용 전 공식 문서 확인 필요

두 글자 이상 입력, 위아래 화살표로 이동하고 Enter로 열기