변경 내역 타겟의 개요
변경 내역 타겟은 단순히 소스 데이터의 현재 상태에 대한 미러를 유지하는 것이 아니라 소스 객체에 발생하는 모든 변경 기록을 유지한다는 점에서 복제 타겟과 다릅니다. 일반 복제는 현재 타겟 데이터를 변경 데이터와 오버레이하는 반면, 변경 내역은 변경 데이터를 타겟에 새 레코드로 삽입합니다. 기존 데이터는 단계별 변경 기록으로 보존됩니다. 데이터 마이닝이나 고객 분쟁 해결 등의 목적으로 이전 데이터를 쿼리하고 분석할 수 있습니다.
SharePlex를 사용해 보조 서버에서 변경 내역을 유지함으로써 프로덕션 데이터베이스에서 오버헤드를 오프로드할 수 있습니다. 이러한 오버헤드에는 내역 행을 추가하는 SQL 작업, 해당 행의 추가 스토리지, 이전 데이터에 대한 쿼리 활동이 포함됩니다.
참고: 파일, JMS 및 Kafka 타겟은 기본적으로 변경 내역을 지원합니다. 모든 소스 변경 사항이 별도의 XML 레코드로 기록되기 때문입니다. 기존 데이터와 새 데이터는 오버레이되지 않습니다. 이러한 타겟에 지원되는 메타데이터는 Post가 XML을 작성할 때 자동으로 포함됩니다. 지원되는 메타데이터 목록은 target 명령을 SharePlex참고 안내서에서 참조하십시오.
기능
이 복제 전략은 다음을 지원합니다.
- 동일하거나 다른 소스 및 타겟 이름
- 수직으로 파티셔닝된 복제 사용
- 수평으로 파티셔닝된 복제 사용
- 명명된 익스포트 및 Post 큐 사용
- 동일한 소스 객체의 일반 복제와 변경 내역 복제의 조합
지원되는 소스
Oracle
지원되는 타겟
Oracle 타겟
지원되는 작업
SharePlex는 다음 작업에 대해 변경 내역 행 추가를 지원합니다.
- INSERT
- UPDATE
- DELETE
- TRUNCATE
- ALTER TABLE to DROP COLUMN
참고: Post는 테이블에서 컬럼을 삭제하지 않지만 변경 내역 행을 생성합니다.
- ALTER TABLE to ADD COLUMN
참고: Post는 테이블에 컬럼을 추가하지만 변경 내역 행은 생성하지 않습니다.
- ALTER TABLE to MODIFY 컬럼 데이터 유형
지원되지 않는 작업
- UDT 또는 VARRAY 컬럼이 변경되었습니다.
참고: SharePlex는 기본 유형의 UDT 필드만 사용하여 테이블을 복제합니다. 여러 하위 유형이 포함된 컬럼의 경우 기본 유형 필드에만 복제가 적용됩니다.
- LOB 컬럼의 일부를 변경하기 위해 사용되는 DBMS_LOB 작업(해당 컬럼에 대해 타겟에 저장된 값은 완전한 LOB 컬럼이 아님)입니다.
SharePlex가 변경 내역을 유지하는 방법
변경 내역 구성에서 각 타겟 테이블은 소스 데이터에 수행된 모든 변경 사항을 연속 행으로 기록하는 내역 테이블 역할을 합니다.
SharePlex가 삽입하는 각각의 새로운 변경 행에는 다음이 포함됩니다.
- 키 컬럼의 값
- 변경된 컬럼의 이후 이미지 삽입 및 업데이트 작업의 경우 이후 이미지는 변경된(삽입의 경우 추가된) 컬럼의 새 값으로 구성됩니다. 삭제 작업의 경우 이후 이미지는 키 값과 null로 설정된 다른 컬럼으로 구성됩니다.
- (선택적으로) 변경에 대한 컨텍스트를 제공하는 메타데이터 값 세트. 예를 들어 변경을 수행한 사용자의 사용자 ID와 변경이 수행된 소스 시스템을 캡처하는 메타데이터가 있습니다(변경 데이터가 여러 데이터베이스에서 추적되는 경우 유용함).
SharePlex는 내역에 업데이트 작업의 이전 이미지를 포함하거나 내역에 포함되는 작업 유형을 제어하도록 구성할 수 있습니다. 예를 들어 업데이트와 삭제만 포함할 수 있습니다.
변경 내역 구성
변경 내역을 구성하려면 SharePlex 구성 파일에 특수 구문을 사용하고, 선택적으로 필터 규칙 및 기타 특성을 구성하여 필요에 맞게 내역을 사용자 지정합니다.
변경 내역 구성 파일 생성
변경 내역 구성 파일을 생성하려면 다음 단계를 수행합니다.
- 지침에 따라 SharePlex가 설치되어 있고 시스템이 준비되어 있어야 합니다(참조: SharePlex설치 안내서).
-
내역을 추적할 소스 테이블과 동일한 이름 및 구조를 사용하여 Oracle 타겟 내역 테이블을 생성하되 모든 컬럼에 대한 모든 제약은 생략합니다.
중요: Oracle 타겟 테이블에는 PRIMARY KEY, FOREIGN KEY, UNIQUE, NOT NULL 또는 CHECK 제약이 없어야 하며, DEFAULT 값으로 컬럼을 정의할 수도 없습니다. 이는 변경 내역이기 때문에 행은 동일한 키가 있는 다른 행과 동일한 이미지를 가질 수 있습니다. Post는 변경 내역 타겟에 대해 무결성 확인을 수행하지 않습니다.
- 타겟 테이블에서 트리거를 비활성화합니다.
- SharePlex를 제외하고 타겟 테이블에서 DML 또는 DDL이 수행되지 않도록 합니다.
-
소스 시스템에서 다음 구문을 사용하여 구성 파일을 생성합니다. 구성 파일을 생성하는 방법에 대한 자세한 내용은 데이터 복제를 위해 SharePlex 구성를 참조하십시오.
datasource_specification |
src_owner.table |
!cdc:tgt_owner.table |
host@c.SID |
여기서,
- Datasource:o.SID는 소스 Oracle 인스턴스의 ORACLE_SID입니다.
- src_owner.table은 소스 객체(owner.object)의 정규화된 이름이거나 와일드카드 사양입니다.
- !cdc:는 타겟을 변경 내역 테이블로 식별합니다.
- tgt_owner.table은 타겟 내역 테이블의 정규화된 이름이거나 와일드카드 사양입니다.
- host는 타겟 시스템입니다.
- c.SID는 타겟 Oracle 인스턴스를 지정합니다.
-
(선택 사항) 기본 이름을 사용하여 기본 메타데이터 컬럼을 추가하려면 타겟 테이블에서 다음 스크립트를 실행합니다. Post는 추가 구성 없이도 기본 메타데이터 컬럼을 자동으로 채웁니다. 요구 사항에 맞게 스크립트를 사용자 지정할 수 있습니다.
product_dir/util/add_change_tracking_columns.sql
참고:
- 스크립트는 기본 컬럼만 추가합니다. 선택 사항인 컬럼을 추가하거나 컬럼 이름을 변경하려면 target 명령을 사용하여 해당 컬럼을 Post 구성에 추가합니다. 기본 및 선택 사항인 메타데이터 컬럼 목록은 target 명령을 SharePlex 참조 안내서에서 참조하십시오.
- 기본 컬럼은 SharePlex 변경 내역 구성에 추가된 새 테이블에 자동으로 추가됩니다.
|
추가 변경 내역 구성 옵션
이 섹션에서는 SharePlex 변경 내역 구성을 사용자 지정하는 방법을 설명합니다.
컬럼 이름 사용자 지정
target 명령을 colname 옵션과 함께 사용하여 타겟 메타데이터 컬럼의 이름을 사용자 지정할 수 있습니다. 지침은 SharePlex 참조 안내서를 참조하십시오.
각 변경 행에 이전 이미지 추가
SP_OPO_TRACK_PREIMAGE 매개변수를 U에 설정하여 타겟 테이블에 업데이트 이전 이미지를 포함할 수 있습니다. 이 매개변수를 사용하면 Post는 추적된 소스 테이블에 대한 모든 변경 사항에 대해 타겟 테이블에 두 개의 행(이후 이미지용 행과 이전 이미지용 행)을 삽입합니다. 이전 이미지는 SP_OCT_USE_SUPP_KEYS 매개변수를 사용하는 경우를 제외하고 변경된 컬럼의 이전 값과 키 값으로 구성됩니다.
이전 이미지가 활성화되면 두 레코드의 SHAREPLEX_SOURCE_OPERATION 컬럼 값은 다음과 같습니다.
UPDATE BEFORE
UPDATE AFTER
참고: 리두 로그에는 LOB의 이전 이미지가 포함되어 있지 않기 때문에 이전 행에 LOB 컬럼의 이전 이미지가 포함되지 않습니다.
target 명령에 있는 set cdc preimage를 사용하여 테이블 수준에서 SP_OPO_TRACK_PREIMAGE의 전역 설정을 재정의할 수 있습니다.
SP_OPO_TRACK_PREIMAGE 및 target 명령에 대한 자세한 내용은 SharePlex 참조 안내서를 참조하십시오.
내역에 작업의 모든 컬럼 포함
이 옵션은 Oracle 데이터에만 유효합니다. 변경된 컬럼만 포함하는 것이 아니라 각 타겟 내역 레코드의 모든 테이블 컬럼 값을 포함하려면 다음을 구성합니다.
-
추적 중인 소스 테이블의 모든 컬럼에 대해 보충 로깅 설정을 켭니다. 예를 들면 다음과 같습니다.
Alter table emp ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
- SP_OCT_USE_SUPP_KEYS 매개변수를 1로 설정합니다.
- SP_OCT_INCLUDE_UNCHANGED_COL을 1로 설정합니다.
참고: SP_OCT_USE_SUPP_KEYS 및 SP_OPO_TRACK_PREIMAGE가 모두 활성화된 경우 이전 이미지에는 변경 전의 모든 컬럼 값이 포함됩니다.
작업 유형의 변경 내역 비활성화
DML 작업 유형의 변경 내역을 비활성화하려면 SP_OPO_TRACK_OPERATIONS 매개변수를 적절한 값으로 설정합니다. 슬래시(/)로 값을 구분합니다. 예를 들어 삽입 및 업데이트에 대해서만 변경 내역을 유지하려면 매개변수를 I/U로 변경합니다. 기본값은 모든 DML 작업 유형을 내역 레코드로 보내는 I/U/D입니다.
규칙 및 필터 설정
target 명령에 있는 규칙 설정 옵션을 사용해 컬럼에 조건을 적용하여 변경 사항이 타겟 기록 테이블에 적용되는지 여부를 제어할 수 있습니다. 예를 들어 컬럼 1과 컬럼 3이 변경되면, 작업을 적용하고 다른 컬럼에 적용되는 변경 사항을 삭제하는 규칙을 지정할 수 있습니다. 지침은 SharePlex 참조 안내서를 참조하십시오.
COMMIT 포함
기본적으로 COMMIT 레코드는 내역 테이블에 포함되지 않습니다. 모든 COMMIT에 대해 행을 삽입하도록 Post를 구성하려면 SP_OPO_TRACK_COMMITS 매개변수를 1로 설정합니다.
복제 전략 구성
이 장에는 다양한 복제 목표를 지원하기 위해 SharePlex를 구성하는 방법에 대한 지침이 포함되어 있습니다. 프로덕션 구현은 소스와 타겟이 하나인 기본 구성부터 명명된 큐, 여러 타겟, 파티셔닝된 데이터 등이 있는 SharePlex의 여러 인스턴스까지 다양할 수 있습니다.
조직이 SharePlex를 배포하려는 가능한 모든 방법을 예측하고 문서화하는 것은 어렵습니다. 이 문서의 목적은 기본 배포 유형을 결합하고 필요에 맞게 확장할 만큼 충분히 명확한 방식으로 설정하기 위한 지침을 제공하는 것입니다. 전문 서비스 조직을 통해 추가 배포 지원이 제공됩니다.
내용
데이터를 공유하거나 배포하도록 복제 구성
이 지침에서는 하나의 소스 시스템에서 하나 이상의 타겟 시스템으로 데이터를 공유하거나 배포하기 위해 SharePlex를 설정하는 방법을 보여줍니다.
이 전략은 다음과 같은 비즈니스 요구 사항을 지원합니다.
- 실시간 의사결정을 지원하기 위한 보고
- 연구 및 투명성 요구 사항을 지원하기 위한 데이터 공유
- 엔터프라이즈 전체의 데이터 통합
- 고객 서비스 문의 및 기타 쿼리 집약적 애플리케이션
- 데이터 감사 및 아카이빙
지원되는 소스
Oracle 및 PostgreSQL
지원되는 타겟
전체
기능
이 복제 전략은 다음을 지원합니다.
- 하나 이상의 타겟 시스템에 대한 복제
- 동일한 시스템의 데이터베이스 간 복제
- 동일한 데이터베이스 내 스키마 간 복제(Oracle)
- 동일하거나 다른 소스 및 타겟 이름
- 수직으로 파티셔닝된 복제 사용
- 수평으로 파티셔닝된 복제 사용
- 명명된 익스포트 및 Post 큐 사용
- 변환 사용(Oracle)
요구 사항
중요! 이 지침에서는 사용자가 SharePlex 구성 파일을 완전히 이해하고 있다고 가정합니다. 지침에서는 중요한 구문 요소를 축약된 표현으로 사용합니다.
자세한 내용은 데이터 복제를 위해 SharePlex 구성를 참조하십시오.을 참조하십시오.
구문에 사용되는 규칙
이 항목의 구성 구문에서 자리 표시자는 다음을 나타냅니다.
- source_specification[n]은 소스 객체(owner.object)의 정규화된 이름이거나 와일드카드 사양입니다.
- target_specification[n]은 타겟 객체의 정규화된 이름이거나 와일드카드 사양입니다.
- host는 SharePlex가 실행되는 시스템의 이름입니다. hostB와 같이 이름에 문자를 추가하여 다른 시스템을 식별합니다.
- db는 데이터베이스 사양입니다. 데이터베이스 사양은 연결 유형에 따라 Oracle SID, TNS 별칭 또는 데이터베이스 이름 앞에 o. 또는 r.이 추가되는 것으로 구성됩니다. 타겟이 JMS, Kafka 또는 파일인 경우 데이터베이스 식별자가 필요하지 않습니다.
중요! 데이터 복제를 위해 SharePlex 구성을 참조하십시오.
로컬 시스템 내에서 복제
동일한 시스템에서의 복제는 다음 구성을 지원합니다.
- 하나의 Oracle/PostgreSQL 인스턴스 내에서 동일한 스키마 내의 다른 테이블에 복제하거나 다른 스키마의 동일한 테이블에 복제합니다.
- Oracle/PostgreSQL 인스턴스에서 동일한 시스템의 SharePlex 지원 타겟으로 복제합니다.
구성 옵션
datasource_specification |
|
|
source_specification1 |
target_specification1 |
hostA[@db] |
source_specification2 |
target_specification2 |
hostA[@db] |
Oracle의 예
이 예에서는 모두 동일한 로컬 시스템에 있는 동일한 Oracle 인스턴스, 다른 Oracle 인스턴스(Unix 및 Linux에만 해당), 다른 타겟 유형에 데이터를 복제할 수 있는 방법을 보여줍니다.
Datasource:o.oraA |
|
|
hr.emp |
hr.emp2 |
hostA@o.oraA |
hr.sal |
hr.sal2 |
hostA@o.oraB |
fin.* |
fin.* |
hostA@r.mss |
act.* |
!file |
hostA |
PostgreSQL의 예:
이 예에서는 모두 동일한 로컬 시스템에 있는 동일한 PostgreSQL 인스턴스, 다른 PostgreSQL 인스턴스(Linux에만 해당), 다른 타겟 유형에 데이터를 복제할 수 있는 방법을 보여줍니다.
Datasource:r.pgA |
|
|
hr.emp |
hr.emp2 |
hostA@r.pgA |
hr.sal |
hr.sal2 |
hostA@r.pgB |
fin.* |
fin.* |
hostA@r.mss |
SharePlex Manager 사용 시 구성
동일한 시스템 간 복제에서는 Export 프로세스가 생략됩니다. 그러나 SharePlex Manager에서는 Export 큐가 있을 것으로 예상합니다. SharePlex Manager와 함께 이 구성을 사용하는 경우 다음과 같이 Export 큐를 명시적으로 구성해야 합니다. 라우팅 맵의 HostA* 구성 요소는 Export 큐와 Export 프로세스를 생성하여 데이터를 Import 프로세스로 보낸 다음, Post 큐로 보냅니다.
datasource_specification |
|
|
source_specification1 |
target_specification1 |
hostA*hostA[@db] |
source_specification2 |
target_specification2 |
hostA*hostA[@db] |
원격 타겟 시스템에 복제
구성 옵션
datasource_specification |
|
|
source_specification1 |
target_specification1 |
hostB[@db] |
source_specification2 |
target_specification2 |
hostB[@db |
예
이 예의 마지막 줄은 동일한 원격 타겟 시스템의 다른 타겟 유형에 데이터를 복제할 수 있는 방법을 보여줍니다.
Datasource:o.oraA |
|
|
hr.emp |
hr.emp2 |
hostB@o.oraB |
hr.sal |
hr.sal2 |
hostB@o.oraB |
fin.* |
!file |
hostB |
여러 타겟 시스템에 복제
이 토폴로지를 브로드캐스트 복제라고 합니다. 이는 여러 데이터를 다양한 타겟 시스템에 배포하거나, 모든 데이터를 모든 타겟 시스템에 배포하거나, 필요에 따라 조합하여 배포할 수 있는 유연성을 제공합니다. 여기서는 소스 시스템이 모든 타겟 시스템에 직접 연결할 수 있다고 가정합니다. 모든 라우팅은 하나의 구성 파일을 통해 처리됩니다. 자세한 내용은 중간 시스템을 통한 복제 설정를 참조하십시오.
구성 옵션
타겟 사양이 모든 타겟 에서 동일한 경우: 소스 객체의 타겟 사양이 모든 타겟 시스템에서 동일한 경우 각 경로에 대해 별도의 항목을 입력하는 대신 복합 라우팅 맵을 사용할 수 있습니다. 자세한 내용은 데이터 복제를 위해 SharePlex 구성를 참조하십시오.을 참조하십시오.
datasource_specification |
|
|
source_specification1 |
target_specification1 |
hostB[@db]+hostC[@db][+...] |
source_specification2 |
target_specification2 |
hostC[@db]+hostD[@db][+...] |
모든 타겟에서 타겟 사양이 동일하지 않은 경우
- 소스 객체의 타겟 사양이 일부 또는 모든 타겟 시스템에서 다른 경우, 별도의 구성 항목을 사용하여 서로 다른 각 항목을 지정해야 합니다.
- 타겟 사양이 동일한 경로에 대해 복합 라우팅 맵을 사용할 수 있습니다.
datasource_specification |
|
|
source_specification1 |
target_specification1 |
hostB[@db] |
source_specification1 |
target_specification2 |
hostC[@db] |
예(Oracle as a source)
참고: 이 예에서는 가능한 모든 소스-타겟 조합을 다루지는 않습니다. 이 예의 마지막 항목은 수평으로 파티셔닝된 복제를 사용하여 sales.accounts 테이블의 여러 데이터를 다양한 지역 데이터베이스에 배포하는 방법을 보여줍니다.
Datasource:o.oraA |
|
|
hr.emp |
hr.emp2 |
hostB@o.oraB |
hr.emp |
hr."Emp_3" |
hostC@r.mssB |
cust.% |
cust.% |
hostD@o.oraD+hostE@o.oraE |
sales.accounts |
sales.accounts |
!regions |
예(PostgreSQL as a source 및 target)
Datasource:r.source_DB |
|
|
hr.emp |
hr.emp2 |
hostB@r.dbnameA |
hr.emp |
hr."Emp_3" |
hostC@r.dbnameB |
cust.% |
cust.% |
hostD@r.demoC+hostE@r.demoD |
중요! 모든 시스템에서 SharePlex에 동일한 포트 번호를 사용합니다.