EXCEPTIONSONLY 사용
EXCEPTIONSONLY는 MAP 문에서 명시적으로 이름이 지정되고 일대일로 매핑되는 소스 및 대상 테이블 쌍의 경우 적합합니다. 즉, 와일드카드가 있을 수 없습니다. EXCEPTIONSONLY를 사용하려면 대상에서 EXCEPTIONSONLY를 사용할 각 소스 테이블에 대해 두 개의 MAP 문을 생성합니다.
-
첫번째 표준
MAP문은 소스 테이블을 실제 대상 테이블에 매핑합니다. -
두번째 예외 MAP 문은 소스 테이블을 대상 테이블 대신 예외 테이블에 매핑합니다. 예외
MAP문은 소스 테이블에서 오류 발생 직후 실행되어 행 값을 예외 테이블로 보냅니다.MAP문을 예외MAP문으로 식별하려면INSERTALLRECORDS및EXCEPTIONSONLY옵션을 사용합니다. 예외MAP문은 동일한 소스 테이블을 포함하는 정규MAP문 바로 뒤에 와야 합니다. 소스 및 예외 테이블 열이 동일하지 않거나 추가 정보를 열 변환 함수 또는SQLEXEC를 통해 캡처되는 정보와 같은 예외 테이블의 추가 열에 매핑하려는 경우 예외MAP문에서COLMAP절을 사용합니다.
이러한 매개변수에 대한 자세한 내용은 Oracle GoldenGate에 대한 매개변수 및 함수 참조를 참조하십시오.
-
소스 테이블
ggs.equip_account를 대상 테이블equip_account 2.에 매핑하는 일반MAP문입니다. -
동일한 소스 테이블을 예외 테이블
ggs.equip_account_exception에 매핑하는 예외MAP문입니다.
이 경우 테이블 자체에 포함된 것과 동일한 열 외에 네 개의 추가 열이 생성되었습니다.
DML_DATE
OPTYPE
DBERRNUM
DBERRMSG
DML_DATE 열을 채우기 위해 @DATENOW 열 변환 함수는 실패한 작업의 날짜 및 시간을 가져오는 데 사용되며 결과는 열에 매핑됩니다. 다른 추가 열을 채우기 위해 @GETENV 함수는 작업 유형, 데이터베이스 오류 번호 및 데이터베이스 오류 메시지를 반환하는 데 사용됩니다.
예외 MAP 문의 EXCEPTIONSONLY 옵션은 소스 테이블에서 실패한 작업 후에만 명령문이 실행되도록 합니다. 모든 작업이 예외 테이블에 기록되지 않도록 합니다.
INSERTALLRECORDS 매개변수는 작업 유형에 관계없이 지정된 소스 테이블에 대해 실패한 모든 작업을 예외 테이블에 삽입으로 기록하도록 합니다. 주: 예외 테이블에는 기본 키 또는 고유 인덱스 제한이 있을 수 없습니다. 이 시나리오에서는 고유성 위반이 가능하며 오류가 발생합니다.
예 9-21 EXCEPTIONSONLY
이 예에서는 REPERROR를 EXCEPTIONSONLY 및 예외 MAP 문과 함께 사용하는 방법을 보여줍니다. 이 예에서는 REPERROR와 관련된 매개변수만 보여 줍니다. 오류 처리와 관련이 없는 다른 매개변수도 Replicat에 필요합니다.
REPERROR (DEFAULT, EXCEPTION)
MAP ggs.equip_account, TARGET ggs.equip_account2,
COLMAP (USEDEFAULTS);
MAP ggs.equip_account, TARGET ggs.equip_account_exception,
EXCEPTIONSONLY,
INSERTALLRECORDS
COLMAP (USEDEFAULTS,
DML_DATE = @DATENOW (),
OPTYPE = @GETENV ('LASTERR', 'OPTYPE'),
DBERRNUM = @GETENV ('LASTERR', 'DBERRNUM'),
DBERRMSG = @GETENV ('LASTERR', 'DBERRMSG'));
이 예에서 REPERROR 매개변수는 DEFAULT 오류 처리에 대해 설정되고, EXCEPTION 옵션을 사용하면 Replicat 프로세스가 실패한 작업을 예외로 처리하고 처리를 계속합니다.