리퍼러
유효 기간
Replicat
설명
REPERROR 매개변수를 사용하여 Replicat가 오류에 응답하는 방식을 제어합니다. 오류에 대한 Replicat의 기본 응답은 비정상 종료입니다.
하나 이상의 다른 REPERROR 문을 사용하여 특정 오류를 다르게 처리하는 동안 하나의 REPERROR 문을 사용하여 대부분의 오류를 기본 방식으로 처리할 수 있습니다. 예를 들어, 중복 레코드 오류는 무시하고 다른 모든 경우에는 비정상 종료 처리를 무시할 수 있습니다.
전역적으로(매개변수 파일의 루트에서) REPERROR를 사용하여 이후의 모든 MAP 문에 영향을 주거나, MAP 문 내에서 이 문을 사용하여 해당 문에 지정된 테이블에 영향을 줄 수 있습니다. MAP 문 내에서 REPERROR를 사용하면 조정된 Replicat의 각 스레드에 대해 특정 방식으로 오류를 처리할 수 있습니다.
레코드 레벨 오류 처리 사용
TRANSDISCARD 및 TRANSEXCEPTION를 제외한 모든 REPERROR 옵션은 개별 레코드의 개별 SQL 작업에 대한 응답으로 오류 처리 작업을 적용합니다. 동일한 트랜잭션의 다른 오류 없는 레코드는 해당하는 경우 MAP 문 및 매개변수 파일의 다른 매개변수에 구성된 대로 처리됩니다.
트랜잭션 레벨 오류 처리 사용
TRANSDISCARD, TRANSEXCEPTION 및 ABEND 옵션은 전체 트랜잭션에 오류 처리 작업을 적용합니다. 트리거 오류는 트랜잭션의 개별 레코드 또는 커밋 작업에서 발생할 수 있습니다. 커밋 오류에는 특정 레코드가 연결되어 있지 않습니다. 다음 옵션을 사용하여 다음을 수행할 수 있습니다.
-
오류가 연관된 경우 전체 소스 트랜잭션이 대상에 복제되지 않도록 합니다.
-
대상에서 지연된 제약 조건 검사가 활성화되면 커밋 오류에 응답합니다.
TRANSDISCARD와 TRANSEXCEPTION는 상호 배타적입니다.
다른 매개변수가 트랜잭션 레벨 옵션에 미치는 영향
TRANSDISCARD 및 TRANSEXCEPTION는 소스 트랜잭션의 경계를 준수하지만, 매개변수 파일에 BATCHSQL, GROUPTRANSOPS 또는 MAXTRANSOPS가 있으면 트랜잭션 경계를 변경하므로 오류 처리 논리 또는 결과에 영향을 줄 수 있습니다.
BATCHSQL 및 GROUPTRANSOPS의 효과
BATCHSQL 또는 GROUPTRANSOPS(기본값)는 트랜잭션 순서를 유지하면서 성능을 향상시키기 위해 서로 다른 트랜잭션의 SQL 작업을 더 큰 트랜잭션으로 그룹화합니다. 이러한 매개 변수가 적용되고 오류가 발생하면 Replicat는 먼저 대체 처리 모드를 입력하여 문제를 해결하려고 합니다(해당 매개 변수에 대한 설명서 참조). 오류가 지속되면 TRANSDISCARD 또는 TRANSEXCEPTION가 적용되고 Replicat는 다음과 같이 소스 처리 모드로 되돌아갑니다.
-
그룹화된 트랜잭션 또는 배열된 트랜잭션을 롤백합니다.
-
소스 트랜잭션과 동일한 트랜잭션 경계를 사용하여 한 번에 하나의 SQL 작업으로 잘못된 트랜잭션을 재생합니다.
-
폐기 논리(
TRANSDISCARD) 또는 예외 매핑(TRANSEXCEPTION)을 수행합니다. 자세한 내용은 해당 옵션 설명을 참조하십시오. -
TRANSDISCARD오류 처리가 완료된 후BATCHSQL또는GROUPTRANSOPS모드를 재개합니다.
MAXTRANSOPS의 효과
TRANSDISCARD 및 TRANSEXCEPTION 트랜잭션 레벨 오류 처리의 무결성은 MAXTRANSOPS 매개변수 설정으로 인해 부정적인 영향을 받을 수 있습니다. MAXTRANSOPS는 Replicat가 대상에 적용할 때 매우 큰 복제된 소스 트랜잭션을 더 작은 트랜잭션으로 분할하도록 합니다.
TRANSDISCARD 및 TRANSEXCEPTION 논리를 사용하면 마지막으로 커밋을 성공한 후 Replicat가 첫번째 레코드로 롤백됩니다. 이것은 잘못된 트랜잭션의 실제 시작일 수도 있고 아닐 수도 있습니다. 트랜잭션이 분할되었는지 여부와 트랜잭션의 일부가 이전에 커밋된 트랜잭션에 있는지에 따라 달라집니다. 이 경우 Replicat는 소스에서 실행된 전체 트랜잭션에 TRANSDISCARD 또는 TRANSEXCEPTION 작업을 적용할 수 없지만 대상에서 롤백된 부분에만 적용할 수 있습니다.
MAXTRANSOPS를 사용하는 경우 TRANSDISCARD 및 TRANSEXCEPTION에서 처리될 것으로 예상되는 최대 트랜잭션보다 큰 값으로 설정되었는지 확인하십시오. 이렇게 하면 트랜잭션이 대상의 작은 트랜잭션으로 분할되지 않습니다.
트랜잭션 레벨 옵션이 통계에 미치는 영향
정보 명령의 출력(예: STATS REPLICAT)에는 TRANSDISCARD 또는 TRANSEXCEPTION 논리에 의해 처리된 트랜잭션의 총 레코드 수가 표시됩니다. 이 숫자는 다음을 반영할 수 있습니다.
-
Replicat는
MAP문에서FILTER또는WHERE절을 통해 Oracle GoldenGate 처리에서 제외된 레코드를 포함하여 트랜잭션의 모든 레코드를 폐기 파일에 기록합니다. -
트랜잭션의 소스 테이블에 대상이 여러 개인 경우 폐기된 트랜잭션에는 각 대상마다 하나씩 각 레코드의 복사본이 여러 개 포함됩니다.
-
Replicat는 트랜잭션을 폐기할 때 예외 매핑 명령문(
MAP문에서EXCEPTIONSONLY또는MAPEXCEPTION로 지정됨)을 무시합니다.
Replicat는 폐기 처리(TRANSDISCARD) 또는 예외 매핑(TRANSEXCEPTION)으로 인해 발생한 오류에 대해 비정상 종료됩니다.
오류 처리에 대한 추가 정보 얻기
Extract 및 Replicat에 대한 오류 처리 구성에 대한 자세한 내용은 Oracle GoldenGate Microservices Documentation의 오류 관리를 참조하십시오.
MAP 매개변수에 대한 자세한 내용은 "TABLE | MAP"를 참조하십시오.
기본값
교착 상태의 경우 TRANSABORT, 그 외의 경우 ABEND
구문
REPERROR {
(
{DEFAULT | DEFAULT2 | <SQL_error> | <user_defined_error>},
{ABEND |
DISCARD |
EXCEPTION |
IGNORE |
RETRYOP [MAXRETRIES <n>] |
TRANSABORT [, MAXRETRIES] [, DELAYSECS <n> | DELAYCSECS <n>] |
TRANSDISCARD |
TRANSEXCEPTION
}
{PROCEDURE,[ABEND|IGNORE|DISCARD]}) |
RESET }
오류 사양 옵션
DEFAULT
명시적 REPERROR 문이 지정된 오류를 제외한 모든 오류에 대한 전역 응답을 설정합니다.
DEFAULT2
DEFAULT에 대한 응답이 EXCEPTION로 설정된 경우 백업 기본 작업을 제공합니다. 오류가 예상되는 MAP 문에 대해 예외 MAP 문이 지정되지 않은 경우 DEFAULT2를 사용합니다.
<SQL_error>
SQL 오류 번호입니다. TRANSDISCARD 및 TRANSEXCEPTION를 사용할 경우 레코드 레벨 오류 또는 커밋 레벨 오류일 수 있습니다.
<user_defined_error>
MAP 문 내에서 FILTER 절의 RAISEERROR 옵션으로 지정된 사용자 정의 오류입니다.
오류 응답 옵션
ABEND
트랜잭션을 롤백하고 비정상적으로 처리를 종료합니다. 기본값은 ABEND입니다.
DISCARD
잘못된 작업을 폐기 파일에 기록하지만 계속해서 트랜잭션 및 후속 트랜잭션을 처리합니다.
EXCEPTION
오류를 발생시킨 작업을 예외사항으로 처리하지만 트랜잭션에서 오류가 없는 작업을 정상적으로 처리합니다. 이 옵션을 예외 MAP 문과 함께 사용하거나 MAP의 MAPEXCEPTION 옵션과 함께 사용합니다. 예를 들어, 실패한 update 문의 열을 "누락된 update" 테이블로 매핑할 수 있습니다. 매개변수 파일에서 오류가 예상되는 MAP 문 뒤에 예외 MAP 문을 지정합니다.
EXCEPTION는 개별 레코드의 개별 SQL 작업에만 예외 처리를 적용합니다. 전체 트랜잭션에 예외 처리를 적용하려면 TRANSEXCEPTION 옵션을 사용합니다.
주: CDR(충돌 감지 및 해결) 기능이 활성 상태인 경우 영향을 받는 테이블에 대한 예외 MAP 문이 있는 경우 오류를 발생시키는 모든 작업이 자동으로 예외로 처리됩니다. In this case, REPERROR with EXCEPTION is not necessary as AUTOCDR is not compatible with REPERROR and therefore REPERROR will be ignored for tables with AUTOCDR enabled. REPERROR을 다른 옵션과 함께 사용하여 CDR에서 해결할 수 없는 충돌 또는 CDR에서 처리하지 않으려는 충돌을 처리합니다.
IGNORE
오류 무시.
RETRYOP [MAXRETRIES <n>]
문제가 있는 작업을 재시도합니다. MAXRETRIES 옵션을 사용하여 재시도 횟수를 제어합니다. 예를 들어, 테이블이 Extent 범위를 벗어나는 경우 RETRYOP와 MAXRETRIES를 함께 사용하면 트랜잭션이 실패하지 않도록 Extent를 추가할 수 있습니다. 지정된 MAXRETRIES 수 이후에 Replicat가 비정상 종료됩니다.
TRANSABORT [, MAXRETRIES <n>] [, DELAYSECS <n> | DELAYCSECS <n>]
트랜잭션을 중단하고 트랜잭션의 처음으로 재배치합니다. 이 순서는 레코드가 성공적으로 처리되거나 MAXRETRIES가 만료될 때까지 계속됩니다. MAXRETRIES가 설정되지 않은 경우 TRANSABORT 작업이 계속 반복됩니다.
DELAY 옵션 중 하나를 사용하여 재시도를 지연합니다. DELAYSECS <n>는 지연 시간(초)을 설정하고 기본값은 60초로 설정합니다. DELAYCSECS <n>는 지연 시간(센티초)을 설정합니다.
TRANSABORT 옵션은 이러한 조건을 지원하는 데이터베이스에서 시간 초과 및 교착 상태를 처리하는 데 유용합니다.
TRANSDISCARD
커밋 작업을 포함하여 해당 트랜잭션 내의 작업으로 인해 REPERROR 오류 사양에 나열된 Replicat 오류가 발생하는 경우 전체 소스 트랜잭션을 폐기합니다. Replicat는 트랜잭션을 중지하고 레코드에서 오류가 발생한 경우 해당 레코드를 폐기 파일에 기록합니다. 그런 다음 Replicat는 트랜잭션을 재생하고 커밋 레코드를 포함하여 모든 레코드를 폐기 파일에 기록합니다. Replicat는 폐기 처리로 인해 발생하는 오류에 대해 비정상 종료됩니다.
폐기된 레코드가 이미 대상 레코드에 데이터 매핑된 경우 Replicat는 이 레코드를 대상 형식으로 폐기 파일에 기록합니다. 그렇지 않으면 소스 형식으로 기록됩니다. 재생된 트랜잭션 자체는 항상 소스 형식으로 작성됩니다.
TRANSDISCARD는 레코드 레벨 오류와 커밋 오류를 지원합니다.
이 항목의 시작 부분에 추가 정보가 있습니다.
TRANSEXCEPTION
REPERROR에 지정된 오류가 트랜잭션의 레코드에서 발생하는 경우 예외 MAP 문에서 MAPEXCEPTION 또는 EXCEPTIONSONLY 절에 정의된 대로 해당 예외 매핑 사양에 따라 트랜잭션의 모든 레코드에 대해 예외 매핑을 수행합니다. 레코드에 해당하는 예외 매핑 사양이 없거나 예외 테이블에 쓰는 중 오류가 발생한 경우 Replicat가 오류 메시지와 함께 비정상 종료됩니다.
오류가 발생하고 TRANSEXCEPTION를 사용 중인 경우 Replicat는 트랜잭션을 중지하고 레코드에서 오류가 발생한 경우 해당 레코드를 폐기 파일에 기록합니다. Replicat는 트랜잭션을 재생하고 소스 레코드를 검사하여 예외 매핑 사양을 찾은 다음 실행합니다.
TRANSEXCEPTION는 레코드 레벨 오류와 커밋 오류를 지원합니다. 동일한 트랜잭션의 오류 없는 작업에 영향을 주지 않고 레코드 레벨(개별 SQL 작업의 경우)에서 오류를 처리하려면 MAP 문에서 EXCEPTION 옵션을 사용합니다.
PROCEDURE,[ABEND |
IGNORE |
DISCARD] |
절차 복제 오류가 발생할 때 Replicat의 동작을 구성하려면 PROCEDURE를 사용합니다. 기본적으로 절차 복제 오류가 발생할 때 Replicat는 ABEND가 됩니다.
IGNORE 옵션은 실패한 호출을 무시합니다. DISCARD 옵션은 대상 데이터베이스의 적용 오류 큐에서 삭제된 오류를 스테이지합니다. 이러한 오류는 나중에 다시 실행하거나 삭제할 수 있습니다.
RESET
REPERROR RESET 문을 사용하여 이전 REPERROR 매개변수에 지정된 오류 처리 규칙을 제거하고 이후의 모든 MAP 문에 기본 오류 처리를 적용합니다.
전역적으로 REPERROR 사용 예제
이러한 예에서는 전역 오류 처리 규칙을 설정하기 위해 매개변수 파일의 루트에 사용되는 REPERROR를 보여줍니다. MAP 문에서 REPERROR를 사용하여 지정된 테이블에 대해 이러한 규칙 중 일부 또는 모두를 무효화할 수 있습니다. "Examples of Using REPERROR Globally and in a MAP Statement"를 참조하십시오.
예 1
다음 예에서는 대부분의 오류에 대한 처리를 중지하지만 중복 레코드 오류는 무시하는 방법을 보여줍니다.
REPERROR (DEFAULT, ABEND)
REPERROR (-1, IGNORE)
예 2
다음 예제는 계정 테이블의 오류를 처리하기 위해 생성된 예외 MAP 문을 호출합니다. 예외 MAP 문이 정의되지 않았으므로 제품 테이블의 오류로 인해 Replicat가 비정상적으로 종료됩니다.
REPERROR (DEFAULT, EXCEPTION)
REPERROR (DEFAULT2, ABEND)
MAP sales.product, TARGET sales.product;
MAP sales.account, TARGET sales.account;
INSERTALLRECORDS
MAP sales.account, TARGET sales.account_exception,
EXCEPTIONSONLY,
COLMAP (account_no = account_no,
optype = @GETENV ('lasterr', 'optype'),
dberr = @GETENV ('lasterr', 'dberrnum'),
dberrmsg = @GETENV ('lasterr', 'dberrmsg'));
예 3
다음은 첫번째 MAP 문에 대한 오류 규칙을 적용한 다음 기본값인 ABEND를 두번째 문으로 복원합니다.
REPERROR (-1, IGNORE)
MAP sales.product, TARGET sales.product;
REPERROR RESET
MAP sales.account, TARGET sales.account;
예 4
다음은 잘못된 레코드를 폐기한 다음 레코드 내의 임의의 작업이 오류(1403)를 생성하는 경우 전체 트랜잭션을 재생한다. 다른 오류 유형으로 인해 Replicat가 비정상 종료됩니다.
REPERROR DEFAULT ABEND
REPERROR 1403 TRANSDISCARD
예 5
다음은 잘못된 레코드를 폐기한 다음 전체 트랜잭션을 재생하여 이름이 tgtexception인 예외 테이블에 쓰는 예외 매핑 사양을 검색합니다. 다른 오류로 인해 Replicat가 잘못된 레코드(해당하는 경우)를 폐기한 후 비정상 종료됩니다.
REPERROR DEFAULT ABEND
REPERROR 1403 TRANSEXCEPTION
MAP src, TARGET tgt, &
MAPEXCEPTION (TARGET tgtexception, INSERTALLRECORDS, COLMAP (...) );
전역적으로 및 MAP 문에서 REPERROR 사용 예제
다음 예에서는 전역 REPERROR 문과 함께 MAP 문에서 REPERROR를 사용할 수 있는 다양한 방법을 보여줍니다.
예 1
REPLICAT <group_name>
REPERROR (<error1> , <response1>)
MAP <src1>, TARGET <tgt1>, REPERROR (<error1>, <response2>);
MAP <src2>, TARGET <tgt2>, REPERROR (<error2>, <response3>);
앞의 예에서 첫번째 MAP 문에 대해 error1가 발생하면 대체가 지정되었으므로 작업이 response1가 아닌 response2여야 합니다. 그러나 두번째 MAP 문에 대해 error1가 발생할 경우 응답은 전역 응답인 response1여야 합니다. error2에 대한 응답은 response3(MAP 특정)입니다.
예 2
REPLICAT <group_name>
REPERROR (<error1> , <response1>)
MAP <src1>, TARGET <tgt1>, REPERROR (<error2>, <response2>),
REPERROR (<error3>, <response3>);
앞의 예에서 src1에서 src2로 복제하는 경우 모든 REPERROR 문이 서로 다른 오류를 처리하므로 모든 오류 및 작업(1-3)이 적용되어야 합니다(MAP 관련 대체가 없음).
예 3
REPLICAT <group_name>
REPERROR (<error1> , <response1>)
MAP <src1>, TARGET <tgt1>, REPERROR (<error1>, <response2>);
MAP <src2>, TARGET <tgt2>, REPERROR (<error2>, <response3>);
REPERROR (<error1> , <response4>)
MAP <src2>, TARGET <tgt2>, REPERROR (<error3>, <response3>);
앞의 예에서 첫번째 MAP 문에 대해 error1가 발생할 경우 작업은 response2여야 합니다. 두번째 명령문의 경우 response1(전역 응답)이고, 세번째 명령문의 경우 response4(두번째 REPERROR 문 때문에)입니다. 전역 REPERROR 문은 다른 REPERROR 문이 새 규칙을 시작할 때까지 매개변수 파일에서 이어지는 모든 MAP 문에 적용됩니다.
예 4
REPERROR DEFAULT ABEND
REPERROR 1403 TRANSDISCARD.
MAP src, TARGET tgt, REPERROR(600 TRANSDISCARD);
앞의 예제에서 소스 테이블 src를 대상 테이블 tgt에 적용하는 동안 오류 600이 발생하면 전체 트랜잭션이 폐기 파일에 기록됩니다. 오류(1403)를 발견하면 전역 REPERROR 사양에 따라 동일한 동작이 발생한다. 다른 오류의 경우 프로세스는 잘못된 레코드만 삭제한 다음 비정상 종료합니다.