ERCALLBACK 사용

ERCALLBACK은 Oracle GoldenGate에 대한 기본 User Exit 기능입니다. 레코드 컨텍스트를 User Exit으로 가져오는 데 사용됩니다. 이 패키지는 내부에 여러 개의 개별 함수를 포함하는 패키지와 같습니다. 이러한 함수를 호출하고 반환 값을 가져올 수 있습니다. 예를 들어, GET_BEFORE_AFTER_IND 또는 GET_COLUMN_VALUE_FROM_NAME와 같은 함수를 호출할 수 있습니다. 이러한 함수를 function_code이라고 합니다.

구문

ERCALLBACK (<function_code>, <buffer>, <result_code> );

<function_code>

콜백 루틴에 의해 실행되는 함수입니다. 유저 콜백 루틴은 콜백 루틴에 전달된 함수 코드에 따라 다르게 동작합니다. 일부 함수는 Extract와 Replicat 모두에 사용할 수 있지만, 한 프로세스 또는 다른 프로세스에서 함수의 유효성은 콜백 루틴 동안 해당 함수에 대해 설정된 입력 매개변수에 따라 달라집니다. 사용 가능한 함수 코드에 대한 자세한 설명은 함수 코드를 참조하십시오.

<buffer>

지정된 함수 코드와 연관된 미리 정의된 구조를 포함하는 버퍼에 대한 보이드 포인터입니다.

<result_code>

콜백 루틴에 의해 실행된 함수의 상태입니다. 콜백 루틴에서 반환된 결과 코드는 콜백 함수가 성공했는지 여부를 나타냅니다. 결과 코드는 표 4-4의 값 중 하나일 수 있습니다.

테이블 4 결과 코드

코드 설명
EXIT_FN_RET_BAD_COLUMN_DATA 열 데이터를 검색하거나 설정하는 중 부적합한 데이터가 발생했습니다.
EXIT_FN_RET_BAD_DATE_TIME 날짜, 시간 기록 또는 간격 유형 of 열에 부적합한 날짜 또는 시간 값이 포함되어 있습니다.
EXIT_FN_RET_BAD_NUMERIC_VALUE 열의 숫자 유형에 부적합한 숫자 값이 포함되어 있습니다.
EXIT_FN_RET_COLUMN_NOT_FOUND 압축된 업데이트 레코드에서 열을 찾을 수 없습니다(변경된 값만 기록하는 데이터베이스로 업데이트).
EXIT_FN_RET_ENV_NOT_FOUND 지정된 환경 값을 레코드에서 찾을 수 없습니다.
EXIT_FN_RET_EXCEEDED_MAX_LENGTH 테이블 또는 열의 이름이 할당된 버퍼에 맞지 않으므로 메타데이터를 검색할 수 없습니다.
EXIT_FN_RET_FETCH_ERROR 레코드를 가져올 수 없습니다. 오류를 확인하려면 오류 메시지를 확인합니다.
EXIT_FN_RET_INCOMPLETE_DDL_REC DDL 레코드를 처리하는 동안 내부 오류가 발생했습니다. 레코드가 불완전할 수 있습니다.
EXIT_FN_RET_INVALID_CALLBACK_FNC_CD 부적합한 콜백 함수 코드가 콜백 루틴에 전달되었습니다.
EXIT_FN_RET_INVALID_COLUMN 존재하지 않는 열이 함수 호출에서 참조되었습니다.
EXIT_FN_RET_INVALID_COLUMN_TYPE 루틴이 해당 용도로 Oracle GoldenGate에서 지원하지 않는 데이터 유형을 조작하려고 시도하는 중입니다.
EXIT_FN_RET_INVALID_CONTEXT 부적절한 시간에 콜백 함수가 호출되었습니다.
EXIT_FN_RET_INVALID_PARAM 부적합한 매개변수가 콜백 함수로 전달되었습니다.
EXIT_FN_RET_NO_SRCDB_INSTANCE 소스 데이터베이스 인스턴스를 찾을 수 없습니다.
EXIT_FN_RET_NO_TGTDB_INSTANCE 대상 데이터베이스 인스턴스를 찾을 수 없습니다.
EXIT_FN_RET_NOT_SUPPORTED 이 기능은 이 프로세스에서 지원되지 않습니다.
EXIT_FN_RET_OK 콜백 함수가 성공했습니다.
EXIT_FN_RET_SESSION_CS_CNV_ERR 문자 집합 변환 루틴으로 ULIB_ERR_INVALID_CHAR_FOUND 오류가 반환되었습니다. 변환에 실패했습니다.
EXIT_FN_RET_TABLE_NOT_FOUND 부적합한 테이블 이름이 지정되었습니다.
EXIT_FN_RET_TOKEN_NOT_FOUND 레코드에서 지정된 사용자 토큰을 찾을 수 없습니다.

ERCALLBACK를 사용하여 다양한 함수 호출을 수행할 수 있습니다. 예를 들어, 테이블 이름을 가져오려면 다음 명령을 사용할 수 있습니다.

ERCALLBACK (GET_TABLE_NAME, &var, &result_code)

이러한 함수는 사용자 종료에 대한 c 코드 내에서 함수 코드 섹션에 제공된 함수에 대한 호출을 수행하는 데 사용됩니다. 서로 다른 function_code 호출의 조합으로 ERCALLBACK를 사용하여 다음과 같은 많은 작업을 수행할 수 있습니다.

예를 들어, 하트비트 테이블의 지연이 특정 임계값을 초과할 때마다 보고서 파일에 기록된 메시지가 필요한 경우 CUSEREXIT 함수를 사용할 수 있습니다. 그런 다음 CUSEREXIT 함수는 지연 열 데이터를 가져오고 계산 및 비교를 수행하며 지연이 지정된 임계값을 초과하는 경우 보고서 파일에 메시지를 기록하기 위해 ERCALLBACK를 여러 번 호출합니다.