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를 사용하여 다음과 같은 많은 작업을 수행할 수 있습니다.
-
DML문 재생성 -
변환 수행
-
레코드에서 특정 열 추출
-
보고서 파일에 정보 작성
예를 들어, 하트비트 테이블의 지연이 특정 임계값을 초과할 때마다 보고서 파일에 기록된 메시지가 필요한 경우 CUSEREXIT 함수를 사용할 수 있습니다. 그런 다음 CUSEREXIT 함수는 지연 열 데이터를 가져오고 계산 및 비교를 수행하며 지연이 지정된 임계값을 초과하는 경우 보고서 파일에 메시지를 기록하기 위해 ERCALLBACK를 여러 번 호출합니다.