데이터베이스 연구실.log

테이블과 컬럼 매핑

같은 이름의 컬럼 연결, 소스 컬럼 제외와 이름이 다른 컬럼의 매핑

MAPCOLMAPUSEDEFAULTSCOLSEXCEPTTRANDATA

#핵심 요약

실습에서는 소스 EMP_HR 8개 컬럼과 타깃 EMP_HR 6개 컬럼을 준비하며 타깃에는 SAL, COMM이 없음

남은 컬럼의 이름과 자료형을 맞추면 기본 연결을 사용하고, 타깃 컬럼명을 바꾼 뒤에는 COLMAP을 지정함

타깃에서 컬럼을 제외하는 것과 Extract에서 COLSEXCEPT로 제외하는 것은 동작이 다름

#개념과 동작 원리

설정 테이블 및 컬럼 연결 동작
MAP 소스, TARGET 타깃 복제할 소스 테이블과 적용 테이블 연결
기본 컬럼 연결 같은 이름의 컬럼을 연결하며 USEDEFAULTS로 명시 가능하다고 설명
COLSEXCEPT Extract에서 SAL, COMM을 전달 대상에서 제외하는 예제
COLMAP 타깃 이름이 달라졌을 때 타깃컬럼 = 소스컬럼으로 연결
ADD TRANDATA 실습용 신규 테이블의 보충 로깅 준비

실습에서는 12.2 이상 트레일의 소스 메타데이터와 Replicat의 타깃 정의 조회를 이용한다고 설명하며 이 버전 경계는 확인 불가 기본 실습은 새 변경만 전달하며 기존 EMP 데이터의 초기 적재는 하지 않음 기본키는 EMPNO로 준비하고 UPDATE, DELETE 대상 식별을 함께 확인함

#필수 명령어 또는 SQL

소스 GGSCI (복제 계정 DBLOGIN 이후)객체 또는 설정을 변경함
ADD TRANDATA scott.emp_hr
소스 GGSCI조회만 함
INFO TRANDATA scott.emp_hr

결과 해석: 실습에서는 보충 로깅 등록 확인을 요구하지만 INFO TRANDATA의 출력은 기재 없음 보충 로깅을 빠뜨렸을 때 리두에 키가 남는지에 대한 설명이 서로 달라 확인 불가

소스 EXT1 파라미터의 컬럼 제외 부분객체 또는 설정을 변경함
TABLE scott.emp_hr, COLSEXCEPT (sal, comm);
TABLE scott.*;

결과 해석: 실습에서는 설정 이후 새 변경으로 타깃 6개 컬럼을 확인하고, 제외 컬럼만 수정한 경우 통계 증가만으로 값이 전달됐다고 판단하지 않도록 설명함 실습의 첫 규칙 우선 설명과 다른 시나리오의 와일드카드 중복 경고는 함께 확인이 필요함

타깃 REP1 파라미터의 이름 변경 후 매핑 부분객체 또는 설정을 변경함
MAP scott.emp_hr, TARGET scott.emp_hr,
COLMAP (
  EMP_ID    = EMPNO,
  EMP_NAME  = ENAME,
  JOB_TITLE = JOB,
  MGR_ID    = MGR,
  HIRE_DT   = HIREDATE,
  DEPT_ID   = DEPTNO
);

결과 해석: 실습에서는 타깃 컬럼명 변경 후 기본 연결 실패를 OGG-01296으로 소개하고 COLMAP 적용 뒤 EMP_ID로 조회하도록 함 이 조회의 실제 전체 출력은 기재 없음

GoldenGate GGSCI조회만 함
VIEW REPORT EXT1
VIEW REPORT REP1
STATS EXTRACT EXT1, TABLE scott.emp_hr, LATEST
STATS EXTRACT PMP1, TABLE scott.emp_hr, LATEST
STATS REPLICAT REP1, TABLE scott.emp_hr, LATEST
INFO EXTRACT EXT1, DETAIL
INFO EXTRACT PMP1, DETAIL
INFO REPLICAT REP1, DETAIL

결과 해석: 실습에서는 대상 컬럼과 처리 건수, 리두 읽기 체크포인트와 트레일 시퀀스를 구분해 확인하도록 설명함

#DML 세 가지로 확인한 결과

소스 작업 (COLSEXCEPT 적용 뒤) 확인 방법 기대 결과
INSERT (sal 7000, comm 300 포함) 타깃 SELECT 6개 컬럼만 도착, 소스 애플리케이션은 바꾸지 않음
제외 컬럼만 UPDATE ... SET sal = 9999 STATS REPLICAT REP1, TOTAL과 타깃 행 타깃 행은 그대로이지만 키만 담은 빈 UPDATE 때문에 통계의 update 건수는 오를 수 있음
일반 컬럼 UPDATE ... SET job = 'SR.DBA' 타깃 SELECT 바뀐 값 도착
DELETE 타깃 COUNT(*) 0건, 키 컬럼(EMPNO)이 남아 있어 대상 행을 찾음

통계 숫자만 보고 값이 넘어갔다고 판단하지 않고 실제 행을 조회함

COLSEXCEPT 대신 COLS로 고를 때 키 컬럼을 빠뜨리면 UPDATE, DELETE가 대상 행을 찾지 못해 깨진다고 수업 자료는 설명함

타깃 컬럼명을 바꾼 뒤에는 소스 이름(empno)으로 조회하면 ORA-00904가 나 복제가 안 된 것으로 오해하기 쉬우므로 타깃 이름(emp_id)으로 조회함

기존 emp 14건은 이 테이블에 없으며, 실무라면 초기 적재가 필요하고 구조가 다르면 필요한 컬럼만 고르는 적재 스크립트를 따로 씀

정리 순서: EXT1, REP1 파라미터를 원래대로 돌려 재기동하고 남은 변경을 모두 적용한 뒤 실습 테이블을 지움
REP1을 세운 채 테이블을 먼저 지우면 다시 올릴 때 트레일의 남은 레코드를 적용하다 ORA-00942로 멈춤

실습 종료 때는 SEND EXTRACT EXT1, LOGEND(YES) → EXT1 → PMP1 → REP1 → Manager 순으로 세우고, 타깃 DB, 소스 DB, 리스너 순으로 내림
체크포인트가 가리키는 트레일 파일(./dirdat/lt*)은 지우지 않음

#사용 조건과 주의사항

타깃 컬럼을 없애도 해당 값은 트레일과 네트워크에 남을 수 있음 COLSEXCEPT로 리두 자체를 읽지 않는다는 수업 자료 표현과 키가 자동 보존된다는 설명이 모든 버전에 맞는지는 확인 불가 남은 변경을 적용한 뒤 실습 테이블을 지움
EMP 건수만 같아서는 전체 데이터의 일치 여부를 확인할 수 없음

SEO_HKabsumveritas@gmail.comBuilt with Claude Code & Codex

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

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