테이블과 컬럼 매핑
같은 이름의 컬럼 연결, 소스 컬럼 제외와 이름이 다른 컬럼의 매핑
#핵심 요약
실습에서는 소스 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
ADD TRANDATA scott.emp_hrINFO TRANDATA scott.emp_hr결과 해석: 실습에서는 보충 로깅 등록 확인을 요구하지만 INFO TRANDATA의 출력은 기재 없음 보충 로깅을 빠뜨렸을 때 리두에 키가 남는지에 대한 설명이 서로 달라 확인 불가
TABLE scott.emp_hr, COLSEXCEPT (sal, comm);
TABLE scott.*;결과 해석: 실습에서는 설정 이후 새 변경으로 타깃 6개 컬럼을 확인하고, 제외 컬럼만 수정한 경우 통계 증가만으로 값이 전달됐다고 판단하지 않도록 설명함 실습의 첫 규칙 우선 설명과 다른 시나리오의 와일드카드 중복 경고는 함께 확인이 필요함
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로 조회하도록 함 이 조회의 실제 전체 출력은 기재 없음
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 건수만 같아서는 전체 데이터의 일치 여부를 확인할 수 없음