처리를 위해 테이블 준비
Db2 z/OS용 Oracle GoldenGate 환경에서 사용할 테이블을 준비하려면 다음 작업을 수행해야 합니다.
트리거 비활성화 및 제약 조건 연쇄화
트리거를 사용 안함으로 설정하고, 제약 조건을 캐스케이드하고, 대상 테이블에서 업데이트 제약 조건을 캐스케이드하거나, Oracle GoldenGate 데이터베이스 사용자가 변경한 사항을 무시하도록 변경합니다. Oracle GoldenGate는 트리거 또는 캐스케이드 제약 조건에서 발생하는 DML을 복제합니다. 대상 테이블에서 동일한 트리거 또는 제약 조건이 활성화되면 복제된 버전으로 인해 중복되고 데이터베이스가 오류를 반환합니다. 다음 예제를 살펴보십시오. 여기서 소스 테이블은 emp_src 및 salary_src이고 대상 테이블은 emp_targ 및 salary_targ입니다.
-
emp_src에 대해 삭제가 발행됩니다. -
삭제를
salary_src로 캐스케이드합니다. -
Oracle GoldenGate는 두 삭제를 대상으로 전송합니다.
-
상위 삭제가 먼저 도착하여
emp_targ에 적용됩니다. -
상위 삭제는 삭제를
salary_targ로 캐스케이드합니다. -
salary_src에서 계단식 삭제가salary_targ에 적용됩니다. -
행은 5단계에서 삭제되며 찾을 수 없습니다.
테이블에 대한 행 고유성 확인
Oracle GoldenGate에는 복제된 업데이트 및 삭제를 위한 올바른 대상 행을 찾기 위해 소스 및 대상 테이블에 고유한 행 식별자가 필요합니다.
KEYCOLS 절이 TABLE 또는 MAP 문에 존재하지 않는 한 Oracle GoldenGate는 다음 우선 순위 순서로 사용할 행 식별자를 선택합니다.
-
기본 키
-
시간 기록 또는 비구체화된 계산 열을 포함하지 않는 첫 번째 고유 키 영숫자.
-
앞의 키 유형이 없는 경우(테이블에 정의된 다른 유형의 키가 있더라도) Oracle GoldenGate는 모든 열의 의사 키를 생성합니다. Oracle GoldenGate가 키 또는 Oracle GoldenGate 구성에서 제외된 키에서 지원되지 않는 데이터베이스를 제외하고 고유 키에서 사용할 수 있습니다.
주: 테이블에 사용할 수 없는 다른 키가 있거나 테이블에 키가 없는 경우 Oracle GoldenGate는 적절한 메시지를 보고서 파일에 기록합니다. 모든 열에서 키를 구성하면 소스 시스템에서 Oracle GoldenGate의 성능이 저하됩니다. 대상에서 이 키로 인해 Replicat는 보다 광범위하고 효율성이 낮은 WHERE 절을 사용합니다.
- 테이블에 적절한 키가 없거나 기존 키가 사용되지 않도록 하려는 경우 테이블에 항상 고유한 값을 포함하는 열이 있는 경우 대체 키를 정의할 수 있습니다. Extract
TABLE및 ReplicatMAP매개변수 내에KEYCOLS절을 포함하여 이 대체 키를 정의합니다. 지정된 키는 Oracle GoldenGate가 찾은 기존 기본 또는 고유 키를 무효화합니다. Oracle GoldenGate에 대한 참조에서 TABLE | MAP를 참조하십시오.
KEYCOLS를 사용하여 커스텀 키 지정
테이블에 앞의 행 식별자 유형 중 하나가 없거나 이러한 식별자를 사용하지 않으려는 경우 테이블에 항상 고유한 값을 포함하는 열이 있는 경우 대체 키를 정의할 수 있습니다. Extract TABLE 및 Replicat MAP 매개변수 내에 KEYCOLS 절을 포함하여 이 대체 키를 정의합니다. 지정된 키는 Oracle GoldenGate가 찾은 기존 기본 또는 고유 키를 무효화합니다. 자세한 내용은 Oracle GoldenGate에 대한 참조를 참조하십시오.
ROWID 열로 테이블 처리
데이터 유형이 ROWID GENERATED ALWAYS(기본값)인 열을 포함하는 대상 테이블에 삽입하려는 시도는 다음 ODBC 오류와 함께 실패합니다.
ODBC error: SQLSTATE 428C9 native database error -798. {DB2 FOR OS/390}{ODBC DRIVER}{DSN08015} DSNT408I SQLCODE = -798, ERROR: YOU CANNOT INSERT A VALUE INTO A COLUMN THAT IS DEFINED WITH THE OPTION GENERATED ALWAYS. COLUMN NAME ROWIDCOL.
다음 중 하나를 수행하여 Oracle GoldenGate에서 처리할 ROWID 열이 있는 테이블을 준비할 수 있습니다.
-
대상 테이블의
ROWID열이GENERATED BY DEFAULT로 정의되었는지 확인합니다. -
테이블 정의를 변경할 수 없는 경우 다음 절차를 사용하여 이를 해결할 수 있습니다.
임시해결책 ROWID GENERATE ALWAYS:
-
소스 테이블에 대해 Extract
TABLE문을 생성하고 해당 명령문에서ROWID열을 제외하는COLSEXCEPT절을 사용합니다. 예:TABLE tab1, COLSEXCEPT (rowidcol);COLSEXCEPT절은 캡처되어 대상 테이블로 복제되는ROWID열을 제외합니다. -
대상 테이블의 경우 Replicat가
ROWID열을 키로 사용하지 않는지 확인합니다. 이 과정은 다음 방법 중 하나로 수행할 수 있습니다.-
대상 테이블 정의에서 기본 키를 지정합니다.
-
키를 생성할 수 없는 경우 테이블에 대해 Replicat
MAP매개변수를 생성하고ROWID열을 제외한 모든 고유 열을 포함하는 해당 명령문에KEYCOLS절을 사용합니다. Replicat는 해당 열을 키로 사용합니다. 예:MAP tab1, TARGET tab1, KEYCOLS (num, ckey);
-
Materialized Query 테이블 유지 관리
소스 및 대상 구체화된 질의 테이블(MQT) 간의 패리티를 유지 관리하려면 MQT가 아닌 기본 테이블을 복제합니다. Target Database는 Replicat가 기본 테이블에 적용하는 변경 사항에 따라 MQT를 유지 관리합니다.
다음은 이러한 테이블을 구성하는 규칙입니다.
-
TABLE및MAP문에 기본 테이블을 포함시킵니다. -
TABLE및MAP문에 MQT를 포함하지 마십시오. -
와일드카드는 일반 테이블 이름과 함께 MQT 이름을 분석할 수도 있지만
TABLE및MAP문에서 사용할 수 있습니다. Oracle GoldenGate는 대체된 테이블 목록에서 자동으로 MQT를 제외합니다. 하지만 이름별로 ExtractTABLE문에 명시적으로 나열된 MQT는 Extract가 비정상 종료됩니다.