TABLE | MAP
유효 기간
TABLE는 Extract에 적합합니다. TABLE는 EVENTACTIONS 매개변수에만 Replicat와 함께 사용할 수 있습니다. MAP는 특정 상황 및 Replicat에서 Extract에 적합합니다. 자세한 내용은 추출은 MAP를 참조하십시오.
설명
TABLE 및 MAP 매개변수는 Oracle GoldenGate 프로세스의 영향을 받을 객체의 선택, 매핑 및 조작을 제어합니다. 이러한 매개변수는 다음과 같이 작동합니다.
-
Extract 매개변수 파일에서
TABLE매개변수를 사용하여 Extract 프로세스에 의해 데이터 소스에서 캡처될 객체를 하나 이상 지정합니다.TABLE옵션은 Extract가 캡처된 데이터를 Oracle GoldenGate 트레일에 쓰기 전에 수행해야 하는 필터링 및 토큰 정의와 같은 처리 작업을 지정합니다. -
Extract의
EXTFILE,EXTTRAIL,RMTFILE또는RMTTRAIL매개변수를 나열한 후TABLE매개변수를 나열합니다. 동일한 Extract 내에 여러 개의 트레일을 작성하려면 각 트레일 사양 뒤에 별도의TABLE매개변수를 만듭니다. -
Replicat 매개변수 파일의
MAP매개변수를 사용하여 소스 객체의 데이터를 적합한 대상 객체에 매핑합니다.MAP옵션은 데이터가 대상 객체에 적용되기 전에 수행해야 하는 필터링, 변환 및 오류 처리와 같은 처리 작업을 지정합니다. 소스 객체와 동기화하려는 각 대상 객체는MAP매개변수를 통해 해당 소스 객체와 연관되어야 합니다. 와일드카드를 통해 여러 소스-대상 관계를 지정할 수 있습니다.
TABLE 및 MAP는 초기 로드 구성 및 트랜잭션 변경 사항 복제를 지원하도록 구성된 온라인 프로세스에 적합합니다.
TABLE 및 MAP를 사용하여 다음 객체를 처리할 수 있습니다.
-
인덱스 구성 테이블
-
구체화된 뷰
-
테이블
Extract로 캡처할 시퀀스를 지정하려면 SEQUENCE 매개변수를 사용합니다.
주: Oracle GoldenGate는 Oracle 구체화된 뷰의 실제 데이터 값 복제를 지원합니다.
와일드카드를 사용하거나 사용하지 않고 매개변수 파일에 하나 이상의 TABLE 또는 MAP 문을 사용하여 처리할 모든 객체를 지정할 수 있습니다.
다음 매개변수를 사용하여 와일드카드 TABLE 또는 MAP 문에서 객체를 제외할 수 있습니다.
-
TABLEEXCLUDE및MAPEXCLUDE매개변수 -
추가 제외 매개변수는
CATALOGEXCLUDE,SCHEMAEXCLUDE및EXCLUDEWILDCARDOBJECTSONLY입니다. -
AutoCDR와 호환되지 않는
REPERROR/MAPEXCEPTIONEXCEPTIONONLY와 같은 매개변수를 처리하는 중 오류가 발생했습니다. AutoCDR가 사용으로 설정된 테이블은 추가 오류 처리를 무시합니다.
기본값
없음
TABLE 구문
테이블의 경우 모든 TABLE 옵션을 사용할 수 있습니다. 테이블이 아닌 객체의 경우 TABLE만 사용하여 캡처할 객체를 지정합니다.
TABLE <source_table>[, TARGET <target_table>]
[, ATTRCHARSET (<charset>)]
[, CHARSET <character_set>]
[, COLCHARSET <character_set>]
[, COLMAP (<column_mapping>)]
[, {COLS | COLSEXCEPT} (<column_list>)]
[, {DEF | TARGETDEF} <template>]
[, EVENTACTIONS <action>]
[, EXITPARAM '<parameter>']
[, {FETCHCOLS | FETCHCOLSEXCEPT} (<column_list>)]
[, {FETCHMODCOLS | FETCHMODCOLSEXCEPT} (<column_list>)]
[, FETCHBEFOREFILTER]
[, FILTER (<filter_clause>)]
[, GETBEFORECOLS (<column_specification>)]
[, KEYCOLS (<columns>)]
[, SQLEXEC (<SQL_specification>)]
[, SQLPREDICATE 'WHERE <where_clause>']
[, TOKENS (<token_definition>)]
[, TRIMSPACES | NOTRIMSPACES]
[, TRIMVARSPACES | NOTRIMVARSPACES]
[, WHERE (<clause>)]
[, <container>.]<schema.table> PARTITIONOBJID <ptn_object_ID> [, <ptn_object_ID>]
;
MAP 구문
MAP <source_table>, TARGET <target_table>
[, MOD_COMPARE_COLS( <tgt_col> = <source> )]
[, COLMAP (<column_mapping>)]
[, COMPARECOLS (<column_specification>)]
[, COORDINATED]
[, {DEF | TARGETDEF} <template>]
[, EXCEPTIONSONLY]
[, EXITPARAM '<parameter>']
[, EVENTACTIONS (<action>)]
[, FILTER (<filter_clause>)]
[, HANDLECOLLISIONS | NOHANDLECOLLISIONS]
[, INSERTALLRECORDS]
[, INSERTAPPEND | NOINSERTAPPEND]
[, KEYCOLS (<columns>)]
[, MAPALLCOLUMNS | NOMAPALLCOLUMNS]
[, MAPEXCEPTION (<exceptions_mapping>)]
[, MAPINVISIBLECOLUMNS | NOMAPINVISIBLECOLUMNS]
[, REPERROR (<error>, <response>)]
[, RESOLVECONFLICT (<conflict_resolution_specification>)]
[, SQLEXEC (<SQL_specification>)]
[, THREAD (<thread_ID>)]
[, THREADRANGE (<thread_range>[, <column_list>])]
[, TRIMSPACES | NOTRIMSPACES]
[, TRIMVARSPACES | NOTRIMVARSPACES]
[, WHERE (<clause>)]
[, <container>.]<schema.table> PARTITIONOBJID <ptn_object_ID> [, <ptn_object_ID>]
;
TABLE 및 MAP 옵션
다음 표에는 TABLE 및 MAP 매개변수에 사용할 수 있는 옵션이 요약되어 있습니다. 두 파라미터 모두에 대해 모든 옵션이 유효한 것은 아닙니다.
테이블 11 TABLE 및 MAP 구문 구성요소 요약
| 구성요소 | 설명 | 유효 기간 |
|---|---|---|
MAP MOD_COMPARE_COL( tgt_col = source [,...] ) |
Replicat 전용 매개변수입니다. 지정된 소스 값을 대상 열의 이전 이미지에 키 값으로 지정하고 값이 WHERE 절에 사용됩니다. |
MAP |
TABLE <source_table>[, TARGET <target>] |
Extract에 대한 TABLE 문에서 소스 객체를 지정하고 대상 객체에 대한 선택적 매핑을 지정합니다. Extract 매개변수 파일에서 사용합니다. |
TABLE |
MAP source_table, TARGET target_table |
Replicat 프로세스에 대한 소스-대상 객체 매핑을 지정합니다. Replicat 매개변수 파일에 사용합니다. | MAP |
ATTRCHARSET (charset) |
UDT 속성 레벨에서 소스 문자 집합 정보를 지정합니다. | TABLE |
COLCHARSET character_set |
지원되는 문자 집합을 지정합니다. | TABLE |
COLMAP (column_mapping) |
서로 다른 소스 열과 대상 열 간에 레코드를 매핑합니다. | TABLE 및 MAP |
{COLS \| COLSEXCEPT} (column_list) |
처리할 열을 선택하거나 제외합니다. | TABLE |
COMPARECOLS (column_specification) |
충돌 감지 및 해결에 사용할 열을 지정합니다. | TABLE 및 MAP |
COORDINATED |
트랜잭션이 장벽 트랜잭션으로 처리되도록 합니다. | MAP |
{DEF | TARGETDEF} template |
소스 정의 또는 대상 정의 템플리트를 지정합니다. | TABLE 및 MAP |
EXCEPTIONSONLY |
MAP 문이 예외 MAP 문임을 지정합니다. |
MAP |
EVENTACTIONS (action) |
지정된 필터 규칙을 충족하는 레코드를 기반으로 작업을 트리거합니다. | TABLE 및 MAP |
EXITPARAM 'parameter' |
리터럴 문자열 형식의 파라미터를 User Exit에 전달합니다. | TABLE 및 MAP |
FETCHBEFOREFILTER |
필터가 실행되기 전에 FETCHCOLS 또는 FETCHCOLSEXCEPT 작업을 수행하도록 지정합니다. |
TABLE |
{FETCHCOLS | FETCHCOLSEXCEPT} (column_list) |
값이 트랜잭션 레코드에 없는 경우 소스 데이터베이스에서 열 값을 인출할 수 있습니다. | TABLE |
{FETCHMODCOLS | FETCHMODCOLSEXCEPT} (column_list) |
열이 트랜잭션 로그에 있을 때 데이터베이스에서 열 값을 강제로 인출합니다. | TABLE |
FILTER (filter_clause) |
숫자 값을 기준으로 레코드를 선택합니다. FILTER는 WHERE보다 더 많은 유연성을 제공합니다. |
TABLE 및 MAP |
GETBEFORECOLS (column_specification) |
열의 이전 이미지를 강제로 캡처하여 트레일에 기록합니다. | TABLE |
HANDLECOLLISIONS \| NOHANDLECOLLISIONS |
초기 로드 프로세스에 의한 대상 테이블의 변경 결과를 변경 동기화 그룹에 의해 적용된 변경 사항과 조정합니다. | MAP |
INSERTALLRECORDS |
모든 행 변경 사항을 삽입으로 적용합니다. | MAP |
INSERTAPPEND \| NOINSERTAPPEND |
Replicat가 INSERT 문에 대해 Oracle APPEND 힌트를 사용할지 여부를 제어합니다. |
MAP |
KEYCOLS (columns) |
행을 고유하게 식별하는 열을 지정합니다. | TABLE 및 MAP |
MAPALLCOLUMNS | NOMAPALLCOLUMNS |
Replicat가 키가 아닌 열을 가져올지 여부를 제어합니다. | 해당 사항 없음 |
MAPEXCEPTION (exceptions_mapping) |
MAP 문에 대체된 테이블에 대한 예외 처리가 포함되도록 지정합니다. |
MAP |
MAPINVISIBLECOLUMNS | NOMAPINVISIBLECOLUMNS |
Replicat가 기본 열 매핑을 위해 Oracle 대상 테이블에 보이지 않는 열을 포함할지 여부를 제어합니다. 명시적 열 매핑을 사용하는 Oracle 대상 테이블의 보이지 않는 열의 경우 항상 매핑되므로 이 옵션이 필요하지 않습니다. | MAP |
REPERROR (error, response) |
MAP 문을 실행할 때 Replicat가 오류에 응답하는 방식을 제어합니다. |
MAP |
RESOLVECONFLICT (conflict_resolution_specification) |
충돌 해결 규칙을 지정합니다. | MAP |
SQLEXEC (SQL_specification) |
내장 프로시저 및 query를 실행합니다. | TABLE 및 MAP |
SQLPREDICATE 'WHERE where_clause' |
WHERE 절을 사용으로 설정하여 초기 로드에 대한 행을 선택할 수 있습니다. |
TABLE |
THREAD (thread_ID) |
조정 모드로 Replicat에 적합합니다. 지정된 Replicat 스레드에서 MAP 문을 처리하도록 지정합니다. |
MAP |
THREADRANGE (thread_range, column_list) |
조정 모드로 Replicat에 적합합니다. 지정된 Replicat 스레드 범위에서 MAP 문을 처리하도록 지정합니다. |
MAP |
TOKENS (token_definition) |
사용자 토큰을 정의합니다. | TABLE |
TRIMSPACES \| NOTRIMSPACES |
CHAR을 VARCHAR 열에 매핑할 때 후행 공백을 자를지 여부를 제어합니다. |
TABLE 및 MAP |
TRIMVARSPACES \| NOTRIMVARSPACES |
VARCHAR를 CHAR 또는 VARCHAR 열에 매핑할 때 후행 공백을 자를지 여부를 제어합니다. |
TABLE 및 MAP |
WHERE (clause) |
조건부 연산자를 기반으로 레코드를 선택합니다. | TABLE 및 MAP |
| ; | (세미콜론) TABLE 또는 MAP 명세서를 해지하고 필요함. |
TABLE 및 MAP |
PARTITIONOBJID |
통합 추출에 사용 가능합니다. 이 옵션은 분할된 테이블에 대해 캡처할 분할 영역의 객체 ID를 지정하는 데 사용됩니다. | TABLE 및 MAP |
MAP MOD_COMPARE_COL( tgt_col = source [,…] )
tgt_col은 대상 테이블 열 이름이어야 하며 제대로 적용할 키 열이어야 합니다. source는 소스 테이블 열, 상수 값(숫자 또는 문자열), 열 매핑 함수 또는 SQLEXEC 결과일 수 있습니다. 예를 들어, 이미지 값이 1이 되기 전에 source col1가 target col 1. source col1에 매핑됩니다. 이는 보안을 위해 DBA가 마스킹하기 때문에 더미 값입니다. Replicat는 SQLEXEC로 target col1의 이전 이미지 값을 실제 질의할 수 있습니다. MOD_COMPARE_COLS()를 사용하면 Replicat가 더미 source col1 값을 SQLEXEC 결과로 대체하므로 UPDATE 또는 DELETE 작업이 제대로 작동합니다.
TABLE <source_table>[, TARGET <target>]
TABLE는 Extract 매개변수 파일에서 적합합니다.
TABLE를 사용하여 Extract가 데이터를 캡처할 소스 객체를 지정합니다. 객체의 전체 두 부분 또는 세 부분 이름(예: <schema.table> 또는 <catalog.schema.table>)을 지정합니다. 와일드카드를 사용하여 하나의 TABLE 문으로 여러 객체를 지정할 수 있습니다. 객체 이름 및 와일드카드를 올바르게 지정하려면 Oracle GoldenGate Microservices Documentation의 데이터베이스 객체 이름에 와일드카드 사용 및 명령 인수에 와일드카드 사용을 참조하십시오.
TARGET 옵션은 Extract가 변환을 수행하기 위해 대상 정의 파일(TARGETDEFS 매개변수로 지정됨)을 참조해야 하거나 COLMAP 옵션을 사용하여 열을 매핑하는 경우에만 사용합니다. 그렇지 않은 경우 TABLE 매개변수에서 생략할 수 있습니다. COLMAP 및 변환 작업을 사용하는 열 매핑은 일반적으로 소스 시스템에 대한 복제 작업의 영향을 최소화하기 위해 대상 시스템에서 수행되지만 필요한 경우 소스 시스템에서 수행할 수 있습니다. 예를 들어, 소스가 여러 개 있고 대상이 하나 있는 구성의 소스 시스템에서 열 매핑 및 변환을 수행할 수 있습니다. 이 시나리오에서는 각 원본 데이터베이스에 대한 정의 파일을 관리하는 대신 하나의 대상 정의 파일을 관리하는 것이 더 쉬울 수 있습니다. 특히 새 정의 파일을 생성해야 하는 응용 프로그램을 자주 변경해야 하는 경우에는 더욱 그렇습니다.
TABLE 매개변수에서 TARGET를 사용하면 소스가 아닌 대상 구조를 기반으로 추출된 데이터의 메타데이터가 식별되어 정의 파일 또는 열 맵에 반영된 레코드의 구조를 반영합니다. TARGET가 대상 Oracle 컨테이너 데이터베이스에 테이블을 지정하는 경우 세 부분 이름을 사용하지 마십시오. Replicat는 하나의 컨테이너 또는 카탈로그에만 접속할 수 있으므로 이름의 컨테이너 또는 카탈로그 부분이 데이터베이스에 따라 USERIDALIAS로 지정된 대로 Replicat가 로그인하는 부분과 동일하다고 가정합니다.
지정된 소스 데이터를 처리하는 데 다른 TABLE 구문 옵션이 필요하지 않은 경우 간단한 TABLE 문을 사용하여 세미콜론으로 종료할 수 있습니다.
TABLE sales.customers;
다음은 와일드카드를 사용하여 여러 테이블을 지정하는 방법을 보여줍니다.
TABLE sales.*;
앞의 TABLE 문은 Extract가 지정된 객체에 대해 지원되는 모든 열 데이터를 캡처하고 필터링, 변환 또는 기타 조작을 수행하지 않고 트레일에 기록하도록 지시합니다.
MAP <source_table>, TARGET <target_table>
MAP는 Replicat 매개변수 파일에서 유효합니다. Extract 매개변수 파일에서 MAP를 사용하여 Oracle GoldenGate가 테이블에 대해 저장하는 트랜잭션의 이름을 변경할 수도 있습니다. 참조
MAP를 사용하여 소스 객체를 지정하고, TARGET를 사용하여 Replicat가 복제된 소스 데이터를 적용할 대상 객체를 지정합니다. MAP 및 TARGET 절은 함께 매핑을 구성합니다.
-
MAP <source_table>에 대해 소스 객체를 지정합니다. 객체의 전체 두 부분 또는 세 부분 이름(예:<schema.table>또는<catalog.schema.table>)을 지정합니다. 와일드카드를 사용하여 소스 객체를 여러 개 지정할 수 있습니다. -
TARGET <target_table>의 경우 대상이 컨테이너 데이터베이스인 경우에도 두 부분으로 구성된 이름을 지정합니다. Replicat는 하나의 컨테이너 또는 카탈로그에만 접속할 수 있으므로 이름의 컨테이너 또는 카탈로그 부분은 데이터베이스에 따라 Replicat가 로그인하는 컨테이너 또는 카탈로그 부분과 동일하다고 가정합니다(USERIDALIAS로 지정된 경우). 와일드카드를 사용하여 여러 대상 객체를 지정할 수 있습니다.
다음은 와일드카드를 사용하여 여러 테이블을 지정하는 방법을 보여줍니다. TARGET 절은 와일드카드 앞에 tab 접두어를 포함하지 않습니다. 와일드카드는 sales.tabtab1, sales.tabtab2 등으로 분석되므로 이 사양은 유효하지 않습니다.
MAP sales.tab*, TARGET sales.*;
객체에 대해 필터링, 매핑 또는 기타 작업이 필요하지 않은 경우 다음과 같은 간단한 MAP 문을 사용하여 세미콜론으로 각 문을 종료할 수 있습니다.
MAP sales.customers, TARGET sales.customers;
MAP fin.*, TARGET fin.*;
ATTRCHARSET <(charset)>
ATTRCHARSET은 TABLE에 적합합니다.
ATTRCHARSET 절을 사용하여 UDT 속성 레벨에서 소스 문자 집합 정보를 지정합니다. 추적 파일에 정의되거나 SOURCECHARSET, CHARSET 또는 COLCHARSET 매개변수로 지정된 문자 집합을 무효화합니다.
적합한 값은 문자 집합 이름과 적합한 UDT 속성 이름입니다. 와일드카드 속성 이름이 지원됩니다. 예:
TABLE SCHEMA.T*,
ATTRCHARSET(WE8DEC, col*.attr1, col1.attr*.attr3);
COLCHARSET <character_set>
COLCHARSET은 TABLE에 적합합니다.
COLCHARSET 절을 사용하여 지원되는 문자 집합을 지정합니다. 자세한 내용은 COLCHARSET을 참조하십시오.
COLMAP <(column_mapping)>
COLMAP은 TABLE 및 MAP에 유효합니다.
COLMAP를 사용하여 다음을 수행할 수 있습니다.
-
소스 열과 대상 열의 이름이 서로 다른 경우 개별 소스 열을 대상 열에 매핑합니다.
-
소스 및 대상 이름이 동일한 경우 기본 열 매핑을 지정합니다.
COLMAP는 소스 열에서 대상 열로 열 데이터를 선택, 변환 및 이동하기 위한 지침을 제공합니다. 주: 후속 MAP 문에서 모든 테이블의 열 매핑에 대한 전역 규칙을 생성하려면 COLMATCH 매개변수를 사용하십시오.
열 매핑 구성에 대한 추가 정보 얻기
COLMAP를 사용하려면 소스 및 대상 열 구조가 동일하거나 다른지 여부, 전역 열 매핑 매개변수가 충분한지 여부와 같은 관련 구성 지침을 고려해야 합니다.
구문
COLMAP (
[USEDEFAULTS, ]
<target_column> = <source_expression> [BINARYINPUT]
[, ...]
)
USEDEFAULTS
명시적 열 매핑에 이름이 지정되지 않은 경우 동일한 소스 및 대상 열을 자동으로 매핑합니다. 데이터 유형은 로컬 데이터 정의 파일에 따라 필요에 따라 자동으로 변환됩니다. USEDEFAULTS는 해당 열의 이름이 같고 데이터에 필터링 또는 변환이 필요하지 않은 경우 명시적 열 매핑이 필요하지 않습니다.
COLMAP 절에서 명시적 열 매핑 앞에 USEDEFAULTS를 지정합니다.
<target_column = source_expression>
명시적 소스-대상 열 매핑을 정의합니다.
<target_column>
대상 열의 이름을 지정합니다. 열 이름에 지원되는 문자는 지원되는 문자 집합을 참조하십시오.
<source_expression>
다음 중 하나일 수 있습니다.
-
소스 열의 이름(예:
ORD_DATE) -
123와 같은 숫자 상수 -
작은 따옴표 안에 있는 문자열 상수(예:
'ABCD') -
Oracle GoldenGate 열 변환 함수를 사용하는 표현식(예:
@STREXT (COL1, 1, 3))입니다. 자세한 내용은 "테이블 및 열 매핑 함수"를 참조하십시오.
BINARYINPUT
대상 열이 이진 데이터 유형(예: RAW 또는 BLOB)으로 정의되었지만 소스 입력에 데이터 중간에 이진 0이 포함되어 있는 경우 BINARYINPUT를 사용합니다. 소스 입력은 이진 입력으로 처리되고 데이터 값 바꾸기가 금지됩니다.
예 1
MAP ggs.tran, TARGET ggs.tran2, COLMAP (loc2 = loc, type2 = type);
예 2
TABLE ggs.tran, COLMAP (SECTION = @STRCAT('\u00a7', SECTION ));
{COLS | COLSEXCEPT} (<column_list>)
COLS 및 COLSEXCEPT는 TABLE에 대해 유효합니다.
COLS 및 COLSEXCEPT를 사용하여 데이터가 캡처되는 열을 제어합니다.
-
COLS는 캡처할 데이터가 포함된 열을 지정합니다.COLS가 사용되는 경우COLS목록에 없는 모든 열은 Oracle GoldenGate에서 무시됩니다. -
COLSEXCEPT는 캡처에서 제외할 열을 지정합니다.COLSEXCEPT가 사용되는 경우COLSEXCEPT목록에 없는 모든 열은 Oracle GoldenGate에 의해 캡처됩니다. 열이 많은 테이블의 경우COLSEXCEPT가 각 열을COLS로 나열하는 것보다 더 효율적일 수 있습니다.주의: 키 열은 제외하지 않으며
COLSEXCEPT를 사용하여 Oracle GoldenGate에서 지원하지 않는 데이터 유형이 포함된 열을 제외하지 마십시오.COLSEXCEPT는 지원되지 않는 데이터 유형을 제외하지 않습니다.
COLS를 사용하려면 다음이 필요합니다.
-
테이블에 하나 이상의 키 열이 있거나
KEYCOLS옵션으로 대체 키를 정의해야 합니다. "KEYCOLS(열)"을 참조하십시오. -
KEYCOLS로 지정된 키 열 또는 열은COLS로 지정된 열 목록에 포함되어야 합니다. 그렇지 않으면 캡처되지 않으며 처리 중 오류가 생성됩니다.
TABLE 문에 기본 키, 고유 키 또는 KEYCOLS 절이 없는 경우 Oracle GoldenGate는 테이블의 모든 열을 사용하므로 COLS를 사용할 필요가 없습니다.
주: 데이터 펌프 Extract 그룹에 의해 전달 모드로 처리되는 테이블에는 이 옵션을 사용하지 마십시오.
구문
{COLS | COLSEXCEPT} (<column> [, ...])
<column>
열의 이름입니다. <columns>를 여러 개 지정하려면 콤마로 구분된 목록을 생성합니다. 예를 들면 다음과 같습니다.
COLS (name, city, state, phone)
주: 데이터베이스가 업데이트 작업에서 변경된 열의 값만 기록하는 경우 COLS를 사용하여 캡처하도록 지정된 열을 사용할 수 없습니다. 이러한 열을 사용할 수 있도록 하려면 TABLE 문에서 FETCHCOLS 옵션을 사용하거나 열에 대해 보완 로깅을 사용으로 설정합니다.
예제
이 예제의 COLS <clause>는 <columns> 1과 3만 캡처하는 반면, COLSEXCEPT <clause>는 <columns> 1과 3을 제외한 모든 <columns>를 캡처합니다.
TABLE hq.acct, COLS (col1, col3);
TABLE hq.sales, COLSEXCEPT (col1, col3);
COMPARECOLS (<column_specification>)
COMPARECOLS은 MAP에 적합합니다.
다중 마스터 구성에서 Replicat가 MAP의 RESOLVECONFLICT 옵션으로 구성된 경우 업데이트 감지 및 해결 또는 충돌 삭제에 사용하는 열을 지정하려면 COMPARECOLS를 사용합니다. 충돌은 추적에 있는 레코드의 이전 이미지와 대상 테이블에 있는 적절한 데이터 사이의 불일치입니다.
COMPARECOLS를 사용하려면 Extract TABLE 문에서 GETBEFORECOLS 매개변수를 통해 추적 레코드에서 이전 이미지를 사용할 수 있어야 합니다. 지정된 열은 대상 데이터베이스에 존재해야 하며 Replicat 구성의 일부여야 합니다. COLMAP 절이 있거나 없는 TARGET 사양을 만족합니다.
스칼라 데이터 유형만 비교 열로 COMPARECOLS에서 지원됩니다. 스칼라 데이터 유형은 WHERE 절에 사용할 수 있고, 단일 원자 값을 가지며, 내부 구성 요소가 없습니다. Oracle GoldenGate에서 지원하는 스칼라 데이터 유형에는 LOB가 아닌 다음이 포함됩니다.
-
숫자 데이터 형식
-
날짜 데이터 형식
-
문자 데이터 유형
비스칼라 데이터 유형의 예로는 공간 데이터, 사용자 정의 데이터 유형, 대형 객체(LOB), XML, 참조 데이터 유형 및 RAW가 있습니다. CDR에 대해 고려 중인 행은 충돌이 비스칼라 데이터 자체에 없는 한 비스칼라 데이터를 포함할 수 있습니다.
충돌 해결 루틴을 지정하려면 MAP의 RESOLVECONFLICT 옵션을 사용합니다. COMPARECOLS 및 RESOLVECONFLICT는 MAP 문에서 임의의 순서로 정렬할 수 있습니다.
CDR 기능 구성에 대한 추가 정보 얻기
충돌 감지 및 해결 구성에 대한 자세한 내용은 자동 충돌 감지 및 해결 또는 수동 충돌 감지 및 해결을 참조하십시오.
구문
COMPARECOLS(
{ON UPDATE | ON DELETE}
{ALL | KEY | KEYINCLUDING (<col>[,...]) | ALLEXCLUDING (<col>[,...]) }
[,...]
)
{ON UPDATE |
ON DELETE} |
지정된 열의 이전 이미지를 업데이트 또는 삭제에 대해 비교해야 할지 여부를 지정합니다. ON UPDATE만, ON DELETE만 또는 둘 다를 사용할 수 있습니다. 둘 다 사용하는 경우 동일한 COMPARECOLS 절 내에서 지정합니다. 이 두 가지를 모두 사용하는 방법은 예를 참조하십시오.
{ALL | KEY | KEYINCLUDING (<col>[,...]) | ALLEXCLUDING (<col>[,...])}
이전 이미지가 캡처되는 열을 지정합니다.
ALL
대상 테이블의 모든 열을 사용하여 비교합니다. 추적에서 해당 이전 이미지를 사용할 수 없는 경우 오류가 생성됩니다. ALL를 사용하면 Replicat에 대해 가장 높은 처리 로드가 부과되지만 정확성을 극대화하기 위해 모든 열을 사용하여 충돌 감지 비교를 수행할 수 있습니다.
KEY
Primary Key 열만 비교합니다. 이 옵션은 가장 빠른 옵션이지만 키가 일치할 수 있지만 키가 아닌 열이 다를 수 있으므로 가장 정확한 충돌 감지를 허용하지 않습니다.
KEYINCLUDING
기본 키 열과 지정된 열을 비교합니다. 이는 속도와 감지 정확도 사이의 합리적인 타협입니다.
ALLEXCLUDING
지정된 열을 제외한 모든 열을 비교합니다. 열이 많은 테이블의 경우 ALLEXCLUDING가 KEYINCLUDING보다 더 효율적일 수 있습니다. 키 열은 제외하지 마십시오.
예 1
다음 예에서는 충돌에 대해 키 열과 name, address 및 salary 열을 비교합니다.
MAP src, TARGET tgt
COMPARECOLS (
ON UPDATE KEYINCLUDING (name, address, salary),
ON DELETE KEYINCLUDING (name, address, salary));
예 2
다음 예에서는 comment 열이 무시되고 다른 모든 열이 충돌에 대해 비교됩니다.
MAP src, TARGET tgt
COMPARECOLS (ON UPDATE ALLEXCLUDING (comment))
조정됨
COORDINATED은 MAP에 적합합니다. 이 옵션은 Replicat가 조정 모드인 경우 유효합니다.
COORDINATED 옵션을 사용하여 동일한 MAP 명령문의 객체에 대해 수행된 트랜잭션이 장벽 트랜잭션으로 처리되도록 합니다. 그러면 모든 MAP 문에 있는 모든 스레드가 동일한 추적 위치로 동기화됩니다. 동기화 위치는 COORDINATED 키워드가 포함된 MAP를 충족하는 레코드가 포함된 트랜잭션의 시작 부분입니다. 그런 다음 트랜잭션은 단일 스레드에 의해 자동으로 적용됩니다. 즉, 현재 실행 중인 스레드 중 스레드가 가장 낮은 스레드 ID 또는 매개변수 파일에 USEDEDICATEDCOORDINATIONTHREAD가 지정된 경우 ID가 0인 전용 스레드입니다.
COORDINATED와 함께 지정된 THREAD 및 THREADRANGE 절은 지정된 스레드에 의해 레코드가 적용되지 않으므로 무시됩니다. COORDINATED 키워드를 사용하면 강제로 조정된 트랜잭션이 적용되기 전에 대상 테이블이 일관된 상태가 되도록 일시적으로 병렬화가 일시적으로 일시 중지됩니다. 이 시점부터 병렬 실행이 다시 시작됩니다.
기본적으로 Replicat는 기본 키가 업데이트되는 트랜잭션, DDL를 수행하는 트랜잭션 및 특정 EVENTACTIONS 작업을 조정합니다. COORDINATED는 명시적 조정을 제공합니다.
자세한 내용은 조정된 Replicat 정보를 참조하십시오.
구문
COORDINATED
예제
다음은 COORDINATED 옵션 사용의 예입니다. 이 예에서 비즈니스 규칙은 Replicat가 MAP 문에 지정된 객체에 대해 SQLEXEC 작업을 포함하는 트랜잭션을 실행하기 전에 대상 테이블이 일관된 상태여야 합니다. 이 경우 병렬화를 직렬 SQL 처리로 임시로 변환해야 합니다.
다음 MAP 문이 제공된 경우 t1에 대한 삽입이 스레드 1에 의해 수행되기 전에 다른 스레드가 col_val에 대해 값이 100인 레코드를 t2에 삽입하면 SQLEXEC가 행을 삭제합니다. 다른 스레드가 여전히 값이 100인 레코드를 처리 중인 경우 SQLEXEC가 실패합니다. 따라서 이 MAP 문의 결과는 예측할 수 없습니다.
MAP u1.t1, TARGET u2.t1 SQLEXEC (ID test2, QUERY ' delete from u2.t2 where col_val =100 ', NOPARAMS)), THREAD(1);
반대로, COORDINATED를 사용하면 col_val=100 레코드를 처리하는 스레드를 포함하여 모든 스레드가 공통 지점에서 동기화되므로 결과의 모호성이 제거됩니다.
MAP u1.t1, TARGET u2.t1 SQLEXEC (ID test2, QUERY ' delete from u2.t2 where col_val =100 ', NOPARAMS)), THREAD(1), COORDINATED;
{DEF| TARGETDEF}<template>
DEF 및 TARGETDEF는 TABLE 및 MAP에 유효합니다.
DEF 및 TARGETDEF를 사용하여 DEFGEN 유틸리티에 의해 생성된 정의 템플리트의 이름을 지정합니다.
-
DEF는 소스 정의 템플리트를 지정합니다. -
TARGETDEF는 대상 정의 템플리트를 지정합니다.
템플리트는 특정 테이블의 정의를 기반으로 합니다. DEFGEN를 실행하지 않고도 Oracle GoldenGate 프로세스를 정지 및 시작할 필요 없이 원본 테이블과 동일한 정의를 가진 새 테이블을 Oracle GoldenGate 구성에 추가할 수 있습니다. 템플리트의 정의는 정의 조회에 사용됩니다.
구문
{DEF | TARGETDEF} <template>
<template>
DEFGEN 유틸리티에서 생성된 다음 정의 템플리트 중 하나의 이름입니다.
-
DEF를 사용하여DEFGEN매개변수 파일에서TABLE매개변수의DEF옵션으로 생성된 소스 정의 템플리트를 지정합니다. -
TARGETDEF를 사용하여DEFGEN매개변수 파일에서TABLE매개변수의TARGETDEF옵션으로 생성된 대상 정의 템플리트를 지정합니다.
템플리트에 포함된 정의는 동일한 TABLE 또는 MAP 문에 지정된 테이블의 정의와 동일해야 합니다.
템플리트 이름의 대소문자를 구분하는 것은 이름이 데이터베이스에 저장된 것과 동일한 방식으로 지정될 때 관찰됩니다. 이 TABLE 또는 MAP 명령문의 DEF 또는 TARGETDEF 절과 템플리트를 생성한 DEFGEN 매개변수 파일에서 템플리트 이름이 동일한 방식으로 지정되었는지 확인하십시오.
예 1
이 예에서는 대소문자를 구분하지 않는 템플리트 이름을 보여줍니다.
MAP acct.cust*, TARGET acct.cust*, DEF custdef;
예 2
이 예제에서는 데이터베이스에서 대소문자를 구분하는 따옴표를 사용해야 하는 경우 대소문자를 구분하는 템플리트 이름을 보여줍니다.
TABLE acct.cust*, DEF "CustDef";
예 3
이 예에서는 DEF 및 TARGETDEF가 모두 사용되는 경우를 보여줍니다.
MAP acct.cust*, TARGET acc.cust*, DEF custdef, TARGETDEF tcustdef;
예외만
EXCEPTIONSONLY은 MAP에 적합합니다.
오류 처리를 위한 예외 MAP 문에 EXCEPTIONSONLY를 사용합니다. 예외 MAP 문은 오류가 예상되는 MAP 문을 따라야 합니다. 예외 MAP 문은 앞의 일반 MAP 문에서 처리된 마지막 레코드에 대해 오류가 발생한 경우에만 실행됩니다.
EXCEPTIONSONLY를 사용하려면 일반 MAP 문 내에서 또는 매개변수 파일의 루트에서 EXCEPTION 옵션과 함께 REPERROR 문을 사용합니다. 자세한 내용은 REPERROR을 참조하십시오. 주: Oracle GoldenGate CDR(충돌 감지 및 해결) 기능을 사용하는 경우 EXCEPTION가 포함된 REPERROR가 필요하지 않습니다. CDR은 오류를 일으키는 모든 작업을 예외 MAP 문으로 자동으로 전송합니다.
예외 MAP 문은 일반 MAP 문과 동일한 소스 테이블을 지정해야 하지만 예외 MAP 문의 대상 테이블은 예외 테이블이어야 합니다.
주: 와일드 카드 문자 객체 이름을 지원하려면 "MAPEXCEPTION (exceptions_mapping)"를 참조하십시오.
구문
EXCEPTIONSONLY
EVENTACTIONS (<action>)
EVENTACTIONS은 TABLE 및 MAP에 유효합니다. 일부 옵션은 하나 또는 다른 매개변수에만 적용되며 설명에 언급되어 있습니다.
EVENTACTIONS를 사용하여 프로세스가 특정 필터 규칙에 적합한 추적(이벤트 레코드라고 함)의 레코드를 기반으로 정의된 작업을 수행하도록 합니다. 이벤트 마커 시스템(또는 이벤트 마커 기반구조)이라고 하는 이 시스템을 사용하여 데이터베이스 이벤트를 기반으로 처리를 사용자정의할 수 있습니다. 예를 들어, 변환을 수행하거나 통계를 보고하는 프로세스를 일시 중지할 수 있습니다. 이벤트 표시자 기능은 초기 로드가 아닌 데이터 변경 사항 복제에 대해 지원됩니다.
대상 테이블에 데이터를 적용할 필요가 없는 작업을 트리거하려면 Replicat TABLE 매개변수를 EVENTACTIONS를 지원하는 필터링 옵션과 함께 사용할 수 있습니다. 자세한 내용은 "TABLE for Replicat"을 참조하십시오.
목표를 달성하기 위해 두 개 이상의 작업을 결합해야 할 수도 있습니다. 여러 작업을 결합하면 전체 EVENTACTIONS 문이 먼저 구문 분석되고 지정된 옵션이 우선 순위 순서대로 실행됩니다. 다음 목록은 우선 순위의 순서를 보여줍니다. Process the record 앞에 나열된 작업은 레코드가 추적에 기록되거나 프로세스에 따라 대상에 적용되기 전에 발생합니다. Process the record 뒤에 나열된 작업은 레코드가 처리된 후 실행됩니다.
-
TRACE -
LOG -
CHECKPOINT BEFORE -
DISCARD -
SHELL -
ROLLOVER -
(레코드 처리)
-
IGNORE -
REPORT -
SUSPEND -
ABORT -
CHECKPOINT AFTER -
FORCESTOP -
STOP
이벤트 레코드 자체가 일반적인 방식으로 처리되지 않도록 하려면 IGNORE 또는 DISCARD 옵션을 사용합니다. IGNORE 및 DISCARD는 레코드 자체보다 먼저 평가되므로 레코드가 처리되지 않습니다. 이러한 옵션이 없으면 Extract용 EVENTACTIONS는 레코드를 추적에 기록하고 Replicat용 EVENTACTIONS는 해당 작업을 대상 데이터베이스에 적용합니다.
트랜잭션에 이벤트 작업을 트리거하는 레코드가 두 개 이상 포함될 수 있는 가능성을 고려해야 합니다. 이 경우 특정 EVENTACTIONS 사양의 여러 실행이 있을 수 있습니다. 예를 들어, 두 개의 연속 ROLLOVER 작업을 트리거하는 두 개의 적격 레코드가 발생하면 Extract가 트레일을 두 번 롤오버하여 두 개의 파일 중 하나가 트랜잭션 데이터를 비워 둡니다.
또한 GETUPDATEBEFORES 매개변수가 적용될 때 UPDATE 작업에 대해 두 개의 레코드(이전 이미지가 포함된 레코드 및 이후 이미지가 포함된 레코드)가 생성됨을 고려해야 합니다. 작업이 이벤트 레코드로 적격한 경우 해당 레코드 각각에 대해 이벤트 작업이 트리거됩니다. GGHEADER 열 변환 함수의 BEFOREAFTERINDICATOR 토큰을 FILTER 절의 필터로 사용하여 이벤트 작업이 이전 레코드 또는 이후 레코드에서 한 번만 트리거되도록 레코드를 한정할 수 있습니다.
다음 예에서는 BEFORE 표시기를 필터링합니다. EVENTACTION는 BEFORE 레코드가 발견될 때 ECHO 셸 명령을 실행하여 'Triggered on BEFORE' 문자열을 이벤트 로그에 출력합니다.
TABLE qasource.test, &
FILTER(@STRFIND('BEFORE', @GETENV('GGHEADER' , 'BEFOREAFTERINDICATOR')) > 0), &
EVENTACTIONS ( shell ('echo --== Triggered on BEFORE ==-- '), LOG);
다음은 <action> 이벤트의 결과를 보여줍니다.
013-03-06 17:59:31 INFO OGG-05301 Shell command output: '--== Triggered
on AFTER ==--'
다음 예에서는 AFTER 표시기에 대해 동일한 작업을 수행합니다.
TABLE qasource.test, &
FILTER(@STRFIND('AFTER', @GETENV('GGHEADER' , 'BEFOREAFTERINDICATOR')) > 0), &
EVENTACTIONS ( shell ('echo --== Triggered on AFTER ==-- '), LOG);
구문
EVENTACTIONS (
[STOP | SUSPEND | ABORT | FORCESTOP]
[IGNORE [RECORD | TRANSACTION [INCLUDEVENT]]
[DISCARD]
[LOG [INFO | WARNING]]
[REPORT]
[ROLLOVER]
[SHELL '<command>' | SHELL ('<command>', VAR <variable> = {<column_name> | <expression>}
[, ...]) ]
[TRACE[2] <file> [TRANSACTION] [DDL[INCLUDE] | DDLONLY] [PURGE | APPEND]]
[CHECKPOINT [BEFORE | AFTER | BOTH]]
[, ...]
)
STOP
Extract의 경우 TABLE, Replicat의 경우 MAP에서 적합합니다.
지정된 이벤트 레코드가 발견될 때 프로세스를 정상적으로 중지합니다. 이 프로세스는 중지하기 전에 이벤트 트랜잭션 내의 다른 작업이 완료될 때까지 기다립니다. 트랜잭션이 Replicat 그룹화 또는 일괄 처리된 트랜잭션인 경우 프로세스가 정상적으로 중지되기 전에 현재 트랜잭션 그룹이 적용됩니다. 이벤트 레코드 후에 다음 레코드에서 프로세스가 다시 시작됩니다. 단, 해당 레코드가 트랜잭션의 끝을 나타냅니다.
트랜잭션이 아직 열려 있어 즉시 중지할 수 없는 경우 프로세스가 메시지를 기록합니다. 그러나 장기적으로 실행되는 미결 트랜잭션 내에서 이벤트 레코드가 발견되는 경우 트랜잭션의 커밋되지 않은 상태를 알리는 경고 메시지가 표시되지 않습니다. 따라서 STOP 이벤트에도 불구하고 프로세스가 오랫동안 실행 중일 수 있습니다.
STOP는 ABORT 및 FORCESTOP를 제외한 다른 EVENTACTIONS 옵션과 결합할 수 있습니다.
SUSPEND
Extract의 경우 TABLE, Replicat의 경우 MAP에서 적합합니다.
현재 실행의 활성 컨텍스트를 유지하고 관리 클라이언트에서 실행된 SEND 명령에 계속 응답할 수 있도록 프로세스를 일시 정지합니다. 프로세스가 일시 중지되면 INFO 명령은 프로세스를 RUNNING로 표시하고 RBA 필드에는 마지막 체크포인트 위치가 표시됩니다.
처리를 재개하려면 SEND 명령을 RESUME 옵션과 함께 실행합니다.
CHECKPOINT BEFORE 옵션을 SUSPEND와 함께 사용하려면 이벤트 레코드가 SUSPEND가 발생할 트랜잭션의 시작이어야 합니다. 이렇게 하면 일시 중지된 상태에서 프로세스가 종료될 경우 SUSPEND 작업이 있는 이벤트 레코드가 다시 시작할 때 재처리될 첫번째 레코드입니다. CHECKPOINT BERORE 및 SUSPEND가 모두 지정되었지만 이벤트 레코드가 트랜잭션 시작이 아닌 경우 SUSPEND가 발생하기 전에 프로세스가 비정상 종료됩니다.
CHECKPOINT AFTER 옵션을 SUSPEND와 함께 사용하려면 체크포인트가 발생하기 전에 RESUME 명령을 실행해야 하며 이벤트 레코드는 COMMIT 레코드여야 합니다. 프로세스가 SUSPEND 상태인 동안 종료되면 프로세스는 재시작 시 마지막 체크포인트 위치에서 트랜잭션을 재처리합니다.
SUSPEND는 ABORT와 결합할 수 없지만 다른 모든 옵션과 결합할 수 있습니다.
ABORT
Extract의 경우 TABLE, Replicat의 경우 MAP에서 적합합니다.
지정된 이벤트 레코드가 발견될 때 미결 트랜잭션이 있는지 여부에 관계없이 프로세스가 즉시 종료되도록 합니다. 이벤트 레코드가 처리되지 않았습니다. 치명적 오류가 로그에 기록되고 DISCARD도 지정된 경우 이벤트 레코드가 폐기 파일에 기록됩니다. 프로세스가 시작 시 복구됩니다.
ABORT는 CHECKPOINT BEFORE, DISCARD, SHELL 및 REPORT와만 결합할 수 있습니다.
FORCESTOP
Extract의 경우 TABLE, Replicat의 경우 MAP에서 적합합니다.
이벤트 레코드가 트랜잭션의 마지막 작업이거나 트랜잭션의 유일한 레코드인 경우에만 지정된 이벤트 레코드가 발생할 때 프로세스가 정상적으로 중지되도록 합니다. 레코드는 정상적으로 작성됩니다.
장기적으로 실행되는 미결 트랜잭션 내에서 이벤트 레코드가 발견되면 프로세스는 ABORT에서와 같이 경고 메시지를 로그에 기록하고 즉시 종료합니다. 이 경우 시작할 때 recovery가 필요할 수 있습니다. 장기 실행 트랜잭션 중 FORCESTOP 작업이 트리거되면 경고 메시지 없이 프로세스가 종료됩니다.
FORCESTOP는 ABORT, STOP, CHECKPOINT AFTER 및 CHECKPOINT BOTH를 제외한 다른 EVENTACTIONS 옵션과 결합할 수 있습니다. ROLLOVER와 함께 사용할 경우 롤오버는 프로세스가 정상적으로 중지되는 경우에만 발생합니다.
IGNORE [RECORD |
TRANSACTION [INCLUDEVENT]] |
Extract의 경우 TABLE, Replicat의 경우 MAP에서 적합합니다.
선택한 작업에 따라 트랜잭션의 일부 또는 전체를 무시합니다.
-
기본값은
RECORD입니다. 프로세스는 지정된 이벤트 레코드만 무시하고 나머지 트랜잭션은 무시하도록 강제합니다. 로그에 경고 또는 메시지가 기록되지 않지만 레코드가 무시되었음을 표시하도록 Oracle GoldenGate 통계가 업데이트됩니다. -
TRANSACTION를 사용하여 이벤트를 트리거한 레코드를 포함하는 전체 트랜잭션을 무시합니다.TRANSACTION를 사용할 경우 이벤트 레코드는 트랜잭션의 첫 번째 레코드여야 합니다. 트랜잭션을 무시하는 경우 이벤트 레코드도 기본적으로 무시됩니다.TRANSACTION를TRANS로 줄일 수 있습니다. -
INCLUDEEVENT를TRANSACTION와 함께 사용하여 이벤트 레코드를 추적 또는 대상에 전달하지만 연관된 트랜잭션의 나머지 부분은 무시합니다.
IGNORE는 ABORT 및 DISCARD를 제외한 다른 모든 EVENTACTIONS 옵션과 결합할 수 있습니다.
모든 자격, 필터링, 매핑 및 사용자 종료 작업이 처리된 후 IGNORE 작업이 처리됩니다. 레코드 또는 트랜잭션은 최종 출력 단계에서 무시되며 레코드 또는 트랜잭션이 출력 대상(Extract의 경우 추적 또는 Replicat의 경우 데이터베이스)에 기록되지 않도록 합니다. 따라서 특정 표현식(예: SQLEXEC 연산을 포함하는 표현식)에서는 IGNORE가 처리되기 전에 SQLEXEC가 실행됩니다. 즉, 레코드가 트레일 또는 대상 데이터베이스에 기록되지 않지만 자격 심사, 필터링, 매핑 및 사용자 종료를 통해 레코드를 처리하는 모든 영향이 발생합니다.
이 작업은 DDL 레코드에 대해 유효하지 않습니다. DDL 작업은 독립적이므로 레코드를 무시하는 것은 전체 트랜잭션을 무시하는 것과 같습니다.
DISCARD
Extract의 경우 TABLE, Replicat의 경우 MAP에서 적합합니다.
프로세스에서 다음 작업을 수행합니다.
-
지정된 이벤트 레코드를 폐기 파일에 기록합니다.
-
레코드가 폐기되었음을 나타내도록 Oracle GoldenGate 통계를 갱신합니다.
프로세스가 추적의 다음 레코드로 처리를 재개합니다.
DISCARD는 IGNORE를 제외한 다른 모든 EVENTACTIONS 옵션과 결합할 수 있습니다.
LOG [INFO |
WARNING] |
Extract의 경우 TABLE, Replicat의 경우 MAP에서 적합합니다.
지정된 이벤트 레코드가 발견될 때 프로세스가 이벤트를 기록하도록 합니다. 메시지는 보고서 파일, Oracle GoldenGate 오류 로그 및 시스템 이벤트 로그에 기록됩니다.
다음 옵션을 사용하여 메시지의 심각도를 지정합니다.
-
INFO는 심각도가 낮은 정보 메시지를 지정합니다. 이는 기본값입니다. -
WARNING는 심각도가 높은 경고 메시지를 지정합니다.
LOG는 ABORT를 제외한 다른 모든 EVENTACTIONS 옵션과 결합할 수 있습니다. ABORT를 사용하는 경우 프로세스가 종료되기 전에 ABORT가 치명적 오류를 기록하므로 LOG가 필요하지 않습니다.
REPORT
Extract의 경우 TABLE, Replicat의 경우 MAP에서 적합합니다.
지정된 이벤트 레코드가 발견될 때 프로세스에서 보고서 파일을 생성하도록 합니다. 이는 GGSCI에서 SEND 명령을 REPORT 옵션과 함께 사용하는 것과 동일합니다.
REPORT 메시지는 이벤트 레코드가 처리된 후(DISCARD, IGNORE 또는 ABORT가 사용되지 않는 경우) 발생하므로 보고서 데이터에 이벤트 레코드가 포함됩니다.
REPORT는 다른 모든 EVENTACTIONS 옵션과 결합할 수 있습니다.
ROLLOVER
추출의 경우 TABLE에 적합합니다.
지정된 이벤트 레코드가 발견될 때 Extract가 추적을 새 파일로 롤오버하도록 합니다. ROLLOVER 작업은 Extract가 이벤트 레코드를 추적 파일에 기록하기 전에 수행되므로 DISCARD, IGNORE 또는 ABORT도 사용되지 않는 한 레코드가 새 파일의 첫번째 레코드가 됩니다.
ROLLOVER는 ABORT를 제외한 다른 모든 EVENTACTIONS 옵션과 결합할 수 있습니다. ROLLOVER로 인해 프로세스가 체크포인트를 기록하지 않고 ABORT 이전에 ROLLOVER가 발생하므로 ROLLOVER를 ABORT와 결합할 수 없습니다.
ROLLOVER 체크포인트가 없으면 ABORT는 재시작 시 Extract가 이전 추적 파일에 있는 이전 체크포인트로 이동하도록 합니다. 실제로 롤오버를 취소합니다.
SHELL '<command>'
Extract의 경우 TABLE, Replicat의 경우 MAP에서 적합합니다.
이벤트 레코드가 발견될 때 프로세스가 지정된 셸 명령을 실행하도록 합니다. SHELL '<command'>는 기본 셸 명령을 실행합니다. 명령 문자열은 리터럴 값으로 가져와서 해당 방식으로 시스템으로 전송됩니다. 명령은 대소문자를 구분합니다. 명령 문자열을 작은 따옴표로 묶습니다. 예를 들면 다음과 같습니다.
EVENTACTIONS (SHELL 'echo hello world! > output.txt')
셸 명령이 성공하면 프로세스가 보고서 파일 및 이벤트 로그에 정보 메시지를 기록합니다. 성공은 UNIX 셸 언어에 따라 명령의 종료 상태를 기반으로 합니다. 이 언어에서 0은 성공을 나타냅니다.
시스템 호출이 실패하면 프로세스가 비정상 종료되고 치명적인 오류가 발생합니다. UNIX 셸 언어에서 0이 아닌 언어는 실패입니다. 오류 메시지는 하위 명령의 종료 상태가 아닌 SHELL 명령 자체의 실행과만 관련이 있습니다. 예를 들어, SHELL는 스크립트를 성공적으로 실행할 수 있지만 해당 스크립트의 명령은 실패할 수 있습니다.
SHELL는 다른 모든 EVENTACTIONS 옵션과 결합할 수 있습니다.
SHELL ('<command>', VAR <variable> = {<column_name> | <expression>} [, ...])
Extract의 경우 TABLE, Replicat의 경우 MAP에서 적합합니다.
이벤트 레코드가 발견될 때 프로세스가 지정된 셸 명령을 실행하고 매개변수 전달을 지원합니다. 명령과 매개변수는 대소문자를 구분합니다.
SHELL가 인수와 함께 사용되는 경우 전체 <command> 및 인수 문자열은 괄호로 묶어야 합니다. 예를 들면 다음과 같습니다.
EVENTACTIONS (SHELL
('Current timestamp: $1 SQLEXEC result is $2 ',VAR $1 = @GETENV('JULIANTIMESTAMP'),
VAR $2 = mytest.description));
입력은 다음과 같습니다.
<command>
문자 그대로 시스템에 전달되는 명령입니다.
VAR
파라미터 입력을 시작하는 필수 키워드입니다.
<variable>
런타임 변수 값이 대체될 위치 표시자 변수의 사용자 정의 이름입니다. 명령에 사용되지 않는 추가 변수는 무시됩니다. VAR 변수 이름과 일치하는 SHELL 명령의 리터럴은 대체된 VAR 값으로 대체됩니다. 이것은 의도하지 않은 결과를 초래할 수 있으므로 코드를 운용 환경에 배치하기 전에 테스트하십시오.
<column_name>
열 값의 이전 또는 이후(현재) 이미지일 수 있습니다.
<expression>
열 데이터 또는 DDL가 처리되는지 여부에 따라 다음이 될 수 있습니다.
-
열 데이터에 적합한 표현식:
-
TABLE문에서TOKENS절의 값입니다. -
Oracle GoldenGate 열 변환 함수의 반환 값입니다.
-
SQLEXEC질의 또는 프로시저의 반환 값입니다.
-
-
DDL에 적합한 표현식:-
@TOKEN함수에서 값을 반환합니다(복제만 해당). -
@GETENV함수에서 값을 반환합니다. -
열 데이터를 참조하지 않는 다른 함수(예:
@DATENOW)에서 값을 반환합니다. -
@DDL함수에서 값을 반환합니다.
-
<TRACE[2]file> [TRANSACTION] [DDL[INCLUDE] | DDLONLY] [PURGE | APPEND]
Extract의 경우 TABLE, Replicat의 경우 MAP에서 적합합니다.
지정된 이벤트 레코드가 발견될 때 프로세스 추적 정보가 추적 파일에 기록되도록 합니다. TRACE는 단계별 처리 정보를 제공합니다. TRACE2는 프로세스가 가장 많은 시간을 소비하는 코드 세그먼트를 식별합니다.
기본적으로(옵션 없음) 트랜잭션 경계 지침 없이 표준 DML 추적은 프로세스가 종료될 때까지 사용으로 설정됩니다.
-
<file>는 추적 파일의 이름을 지정하며TRACE키워드 바로 뒤에 나타나야 합니다. 고유 추적 파일을 지정하거나 독립형TRACE또는TRACE2매개변수로 지정된 기본 추적 파일을 사용할 수 있습니다.EVENTACTIONSTRACE가 사용되는 서로 다른TABLE또는MAP문에서 동일한 추적 파일을 사용할 수 있습니다. 여러TABLE또는MAP문이 동일한 추적 파일 이름을 지정하지만TRACE옵션이 일관되게 사용되지 않는 경우 이 추적 파일이 포함된 마지막으로 확인된TABLE또는MAP의 옵션에 환경설정이 제공됩니다. -
프로세스가 종료될 때가 아니라 현재 트랜잭션이 끝날 때까지만 추적을 사용으로 설정하려면
TRANSACTION를 사용합니다. Replicat의 경우 트랜잭션 경계는 일반적인 Replicat 그룹화 또는 일괄 처리된 대상 트랜잭션이 아닌 소스 트랜잭션을 기반으로 합니다.TRANSACTION를TRANS로 줄일 수 있습니다. 이 옵션은DML작업에 대해서만 유효합니다. -
DDL[INCLUDE]는DDL및DML트랜잭션 데이터 처리를 추적합니다.DDL또는DDLINCLUDE가 적합합니다. -
DDLONLY는DDL를 추적하지만DML트랜잭션 데이터를 추적하지 않습니다.이러한 옵션은 Replicat에만 유효합니다. 기본적으로
DDL추적은 사용 안함으로 설정됩니다. -
추가 추적 레코드를 작성하기 전에 추적 파일을 잘라내려면
PURGE를 사용하고, 기존 레코드 끝에 새 추적 레코드를 작성하려면APPEND를 사용합니다. 기본값은APPEND입니다.
TRACE는 ABORT를 제외한 다른 모든 EVENTACTIONS 옵션과 결합할 수 있습니다.
지정된 추적 파일에 대한 추적을 사용 안함으로 설정하려면 TRACE OFF <file_name> 옵션과 함께 GGSCI SEND 프로세스 명령을 실행합니다.
CHECKPOINT [BEFORE |
AFTER |
BOTH] |
Extract의 경우 TABLE, Replicat의 경우 MAP에서 적합합니다.
지정된 이벤트 레코드가 발견될 때 프로세스에서 체크포인트를 기록하도록 합니다. 체크포인트 작업은 TABLE 또는 MAP 문에 정의된 처리에 대한 컨텍스트를 제공합니다. 이 컨텍스트에는 시작점과 끝점이 있으므로 SQLEXEC 및 User Exit으로 수행되는 함수를 매핑하기 위한 동기화 지점을 제공합니다.
BEFORE
Extract 프로세스의 경우 BEFORE는 Extract가 이벤트 레코드를 트레일에 기록하기 전에 체크포인트를 기록합니다. Replicat 프로세스의 경우 BEFORE는 Replicat가 레코드에 포함된 SQL 작업을 대상에 적용하기 전에 체크포인트를 기록합니다.
BEFORE에서는 이벤트 레코드가 트랜잭션의 첫 번째 레코드여야 합니다. 첫번째 레코드가 아닌 경우 프로세스가 비정상 종료됩니다. BEFORE를 사용하여 이벤트 레코드로 시작하는 트랜잭션 이전의 모든 트랜잭션이 커밋되도록 합니다.
DDL 레코드에 대해 EVENTACTIONS를 사용하는 경우 각 DDL 레코드가 자율적이므로 DDL 레코드가 트랜잭션의 시작으로 보장되므로 DDL 레코드에 대해 CHECKPOINT BEFORE 이벤트 작업이 암시됩니다.
CHECKPOINT BEFORE는 모든 EVENTACTIONS 옵션과 결합할 수 있습니다.
AFTER
Extract의 경우 AFTER는 Extract가 이벤트 레코드를 트레일에 기록한 후 체크포인트를 씁니다. Replicat의 경우 AFTER는 Replicat가 레코드에 포함된 SQL 작업을 대상에 적용한 후 체크포인트를 기록합니다.
AFTER는 체크포인트 요청에 advisory로 플래그를 지정합니다. 즉, 프로세스는 다음 실제 기회에만 체크포인트를 실행합니다. 예를 들어, 이벤트 레코드가 다중 레코드 트랜잭션 중 하나인 경우 체크포인트는 Oracle GoldenGate 데이터 무결성 모델에 따라 다음 트랜잭션 경계에서 발생합니다.
DDL 레코드에 대해 EVENTACTIONS를 사용하는 경우 각 DDL 레코드가 자율적이므로 DDL 레코드는 트랜잭션의 종료(경계)가 됩니다. 따라서 CHECKPOINT AFTER 이벤트 작업은 DDL 레코드에 대해 암시됩니다.
CHECKPOINT AFTER는 ABORT.를 제외한 모든 EVENTACTIONS 옵션과 결합할 수 있습니다.
BOTH
BOTH는 BEFORE 및 AFTER를 결합합니다. Extract 또는 Replicat 프로세스는 이벤트 레코드를 처리하기 전과 후에 체크포인트를 기록합니다.
CHECKPOINT BOTH는 ABORT.를 제외한 모든 EVENTACTIONS 옵션과 결합할 수 있습니다.
CHECKPOINT를 CP로 줄일 수 있습니다.
예 1
다음 예에서는 특정 레코드를 무시하도록 프로세스를 구성하는 방법을 보여줍니다. 추출에서 name = abc가 있는 추적 레코드를 처리할 때는 레코드를 무시합니다.
TABLE fin.cust, &
WHERE (name = 'abc'), &
EVENTACTIONS (ignore);
예 2
EVENTACTIONS 옵션의 호환성 및 우선 순위 규칙에 따라 DISCARD는 ABORT보다 우선 순위가 높습니다. 따라서 이 예에서는 프로세스가 종료되기 전에 이벤트 레코드가 폐기 파일에 기록됩니다.
MAP fin.cust, TARGET fin.cust2, &
WHERE (name = 'abc'), &
EVENTACTIONS (DISCARD, ABORT);
예 3
다음 예에서는 SHELL 작업을 실행합니다. SQLEXEC 질의 결과를 가져와서 현재 시간 기록과 쌍을 이룹니다.
TABLE src.tab &
SQLEXEC (id mytest, query 'select description from lookup &
where pop = :mycol2', params (mycol2 = col2) ), &
EVENTACTIONS (SHELL ('Current timestamp: $1 SQLEXEC result is $2 ', &
VAR $1 = @GETENV('JULIANTIMESTAMP'), VAR $2 = mytest.description));
이 예의 결과인 셸 <command>은 다음과 유사할 수 있습니다.
'Current timestamp: 212156002704718000 SQLEXEC result is test passed'
예 4
다음 예에서는 위치 표시자 이름이 명령 문자열의 리터럴 텍스트와 충돌할 경우 부적합한 결과가 발생할 수 있는 방법을 보여줍니다. 이 예에서 $1라는 위치 표시자는 열 값과 연관되고, SHELL 명령은 $1를 포함하는 리터럴 문자열을 에코합니다.
MAP src.tab1, TARGET targ.tab1 &
EVENTACTIONS (SHELL ('echo Extra charge for $1 is $1', VAR $1 = COL1));
<column> 값이 gift wrap인 경우 의도하지 않은 결과입니다.
'Extra charge for gift wrap is gift wrap'
위치 표시자 <variable>를 $col로 변경하면 올바른 출력이 생성됩니다.
MAP src.tab1, TARGET targ.tab1 &
EVENTACTIONS (SHELL ('echo Extra charge for $col is $1', VAR $col = COL1));
'Extra charge for gift wrap is $1'
다음은 의도하지 않은 결과와 유사한 가능성을 보여줍니다.
MAP src.tab1, TARGET targ.tab1 &
EVENTACTIONS (SHELL ('Timestamp: $1 Price is $13 > out.txt ', &
VAR $1 = @GETENV('JULIANTIMESTAMP')));
재지정된 출력 <file>에는 다음과 같은 <string>이 포함될 수 있습니다(두번째 시간 기록에 추가된 값 3이 포함되어 있음).
'Timestamp: 212156002704718000 Price is 2121560027047180003'
의도된 결과는 다음과 같습니다.
'Timestamp: 212156002704718000 Price is $13'
예 5
다음 예에서는 추적을 구성하는 여러 가지 방법을 보여줍니다.
MAP tab1, TARGET tab1 EVENTACTIONS (TRACE ./dirrpt/trace
1.txt);
MAP tab2, TARGET tab2 EVENTACTIONS (TRACE ./dirrpt/trace2.txt TRANSACTION);
-
첫번째
MAP문에서는 첫번째tab1이벤트 레코드가 대상에 적용되기 직전에trace1.txt추적 파일이 생성됩니다. GGSCISEND REPLICAT명령을 사용하여 추적이 해제되지 않은 경우 Replicat가 종료될 때까지 또는 해당 시점부터 추적 정보가 모두 포함됩니다. -
두번째
MAP문은TRANSACTION옵션을 포함하므로trace2.txt파일은 첫번째tab2이벤트 레코드가 대상에 적용되기 직전에 생성되지만tab2이벤트 레코드를 포함하는 트랜잭션이 종료되면 추적이 자동으로 정지됩니다.
예 6
다음은 EVENTACTIONS와 SUSPEND를 함께 사용할 수 있는 방법을 보여줍니다.
-
사례 1:
DDL를 복제하고 있으며 대상 데이터베이스에 새 테이블을 생성할 충분한 공간이 있는지 확인하려고 합니다.CREATE TABLE DDL작업을 매핑하는MAP문에서EVENTACTIONS를SUSPEND와 함께 사용한 다음 해당MAP문에서 SQL 문을 실행하여 테이블스페이스에 남아 있는 공간의 양을 질의합니다. 공간이 충분한 경우SEND REPLICAT와RESUME를 함께 사용하여 즉시 처리를 재개합니다. 그렇지 않은 경우 DBA가 공간을 추가할 때까지 Replicat를 일시 중지한 다음SEND REPLICAT와RESUME를 함께 사용하여 처리를 재개합니다. -
사례 2: 테이블에서 고유 키 위반이 발생할 때 이를 수정하려고 합니다. Replicat는 수천 개의 테이블을 처리하고 있으므로 위반이 발생할 때마다 프로세스를 중지하지 않아도 됩니다. 이로 인해 Replicat는 재시작 시 객체 캐시를 다시 빌드하는 데 시간을 소비하기 때문입니다.
EVENTACTIONS를SUSPEND와 함께 사용하면 문제가 해결될 때까지 처리를 일시 중지할 수 있습니다. -
사례 3: 하루가 끝날 때 Replicat를 일시 중지하여 일별 보고서를 실행한 다음 프로세스를 중지하고 다시 시작하지 않고 즉시 처리를 재개합니다.
EXITPARAM '<parameter>'
EXITPARAM은 TABLE 및 MAP에 유효합니다.
EXITPARAM를 사용하여 TABLE 또는 MAP 문의 레코드가 발견될 때마다 User Exit 루틴의 EXIT_PARAMS 함수에 매개변수를 전달합니다.
구문
EXITPARAM '<parameter string>'
<'parameter string'>
리터럴 문자열인 매개변수입니다. 매개변수를 작은 따옴표로 묶습니다. 매개변수 문자열에 대해 최대 100자를 지정할 수 있습니다.
인출 전 필터
FETCHBEFOREFILTER은 TABLE에 적합합니다.
FETCHBEFOREFILTER를 사용하여 FILTER 작업이 실행되기 전에 FETCHCOLS 또는 FETCHCOLSEXCEPT로 지정된 열을 인출합니다. 필터 앞에 인출하면 필터에 필요한 값을 사용할 수 있습니다. FETCHBEFOREFILTER를 사용하지 않을 경우 필터가 실행될 때까지 FETCHCOLS 또는 FETCHCOLSEXCEPT로 지정된 인출이 수행되지 않습니다. 매개변수 파일에서 FILTER 앞에 FETCHBEFOREFILTER를 지정합니다.
데이터 펌프 Extract 그룹에서 통과 모드로 처리 중인 테이블에 대해서는 이 옵션을 사용하지 마십시오.
구문
FETCHBEFOREFILTER
예제
TABLE hr.salary, FETCHCOLS (<sal_level>),
FETCHBEFOREFILTER,
FILTER (sal_level >= 8)
;
{FETCHCOLS | FETCHCOLSEXCEPT} (<column_list>)
FETCHCOLS 및 FETCHCOLSEXCEPT는 TABLE에 대해 유효합니다. 해당 옵션은 기본 추출에 대해서만 적합합니다.
트랜잭션 로그 레코드에 값이 없는 경우 FETCHCOLS 및 FETCHCOLSEXCEPT를 사용하여 데이터베이스에서 열 값을 인출합니다. 데이터베이스가 업데이트 작업에서 변경된 열의 값만 기록하지만 FILTER 작업에 필요한 다른 열 값을 사용할 수 있는지 확인해야 하는 경우 이 옵션을 사용합니다.
-
FETCHCOLS는 지정된 열을 인출합니다. -
FETCHCOLSEXCEPT는 지정된 열을 제외한 모든 열을 인출합니다. 열이 많은 테이블의 경우FETCHCOLSEXCEPT가 각 열을FETCHCOLS로 나열하는 것보다 더 효율적일 수 있습니다.
FETCHCOLS 및 FETCHCOLSEXCEPT는 Oracle GoldenGate에서 지원하는 모든 데이터베이스에 적합합니다.
Oracle AI Database의 경우 Oracle GoldenGate는 Oracle의 Flashback Query 메커니즘을 통해 언두 테이블스페이스에서 값을 인출합니다. Query는 특정 시간 또는 SCN 기준으로 열에 대한 읽기 일관성 이미지를 제공합니다. Oracle GoldenGate에서 Flashback Query를 사용하는 방법에 대한 자세한 내용은
FETCHCOLS 또는 FETCHCOLSEXCEPT를 사용하는 대신 원하는 열에 대해 보완 로깅을 사용으로 설정하는 것이 더 효율적일 수 있습니다.
인출을 제어하고 인출을 위해 지정된 열을 찾을 수 없을 때 응답을 사용으로 설정하려면 FETCHOPTIONS 매개변수를 사용합니다. STATS EXTRACT 명령으로 생성된 통계 표시에 인출 결과를 포함하려면 STATOPTIONS 매개변수를 사용합니다.
FETCHCOLS 또는 FETCHCOLSEXCEPT로 지정된 열에 대한 값이 트랜잭션 로그에 있을 경우 데이터베이스 인출이 수행되지 않습니다. 이렇게 하면 데이터베이스 오버헤드가 줄어듭니다.
구문
{FETCHCOLS | FETCHCOLSEXCEPT} (<column> [, ...])
<column>
다음 중 하나일 수 있습니다.
-
(col1, col2)에서와 같이 열 이름 또는 콤마로 구분된 열 이름 목록입니다. -
(*)와 같이 별표 와일드카드입니다.
예제
이 예제의 FETCHCOLS 절은 열 1과 3만 인출하는 반면, FETCHCOLSEXCEPT 절은 열 1과 3을 제외한 모든 열을 인출합니다.
TABLE hq.acct, FETCHCOLS (col1, col3);
TABLE hq.sales, FETCHCOLSEXCEPT (col1, col3);
{FETCHMODCOLS | FETCHMODCOLSEXCEPT} (<column_list>)
FETCHMODCOLS 및 FETCHMODCOLSEXCEPT는 TABLE에 대해 유효합니다. 해당 옵션은 기본 추출에 대해서만 적합합니다.
FETCHMODCOLS 및 FETCHMODCOLSEXCEPT를 사용하여 열이 트랜잭션 로그에 있는 경우에도 데이터베이스에서 열 값을 강제로 인출합니다. 이러한 데이터베이스 유형에 따라 로그 레코드에는 테이블의 모든 열 또는 지정된 트랜잭션 작업에서 변경된 열만 포함될 수 있습니다.
-
FETCHMODCOLS는 지정된 열을 인출합니다. -
FETCHMODCOLSEXCEPT는 지정된 열을 제외하고 트랜잭션 로그에 있는 모든 열을 인출합니다. 열이 많은 테이블의 경우FETCHMODCOLSEXCEPT가 각 열을FETCHMODCOLS로 나열하는 것보다 더 효율적일 수 있습니다.
FETCHMODCOLS 및 FETCHMODCOLSEXCEPT는 Oracle GoldenGate에서 지원하는 모든 데이터베이스에 적합합니다.
다음 사용 지침을 따르십시오.
- 키 열에
FETCHMODCOLS및FETCHMODCOLSEXCEPT를 사용하지 마십시오.
구문
{FETCHMODCOLS | FETCHMODCOLSEXCEPT} (<column> [, ...])
(<column> [, ...])
다음 중 하나일 수 있습니다.
-
(col1, col2)에서와 같이 열 이름 또는 콤마로 구분된 열 이름 목록입니다. -
(*)와 같이 별표 와일드카드입니다.
예제
이 예제의 FETCHMODCOLS 절은 열 1과 3만 인출하는 반면, FETCHMODCOLSEXCEPT 절은 열 1과 3을 제외한 모든 열을 인출합니다.
TABLE hq.acct, FETCHMODCOLS (col1, col3);
TABLE hq.sales, FETCHMODCOLSEXCEPT (col1, col3);
FILTER (<filter_clause>)
FILTER은 TABLE 및 MAP에 유효합니다.
숫자 값을 기준으로 레코드를 선택하거나 제외하려면 FILTER를 사용합니다. 필터 표현식은 조건부 연산자, Oracle GoldenGate 열 변환 함수 또는 둘 다를 사용할 수 있습니다. 주: 문자열을 기준으로 필터링하려면 Oracle GoldenGate 문자열 함수 중 하나를 사용하십시오. 이러한 함수에 대한 자세한 내용은 "테이블 및 열 매핑 함수"를 참조하십시오. WHERE 옵션을 사용할 수도 있습니다. "WHERE(절)"을 참조하십시오.
모든 FILTER 구성요소를 콤마로 구분합니다. FILTER 절에는 다음이 포함될 수 있습니다.
-
숫자
-
숫자를 포함하는 열
-
숫자를 반환하는 함수
-
산술 연산자:
-
(더하기)
-
(빼기)
-
(곱하기)
/(나누기)
\(나머지)
-
-
비교 연산자
(보다 큼)
=(크거나 같음)
<(보다 작음)
<=(작거나 같음)
=(같음)
<>(같지 않음)
비교에서 파생된 결과는 0(
FALSE표시) 또는 0이 아닌(TRUE표시)일 수 있습니다. -
괄호(표현식에서 결과 그룹화용)
-
결합 연산자:
AND,OR
리터럴은 작은 따옴표로 묶습니다. 대소문자를 구분하는 열 이름은 데이터베이스에 저장될 때 지정하고, 대소문자를 구분하기 위해 따옴표가 필요한 경우 큰 따옴표로 묶습니다(예: Oracle).
Oracle GoldenGate는 멀티바이트 문자 집합이 있는 열에 대해 FILTER를 지원합니다.
구문
FILTER (
[, ON INSERT | ON UPDATE| ON DELETE]
[, IGNORE INSERT | IGNORE UPDATE | IGNORE DELETE]
, <filter_clause>
[, RAISEERROR <error_number>]
)
<filter_clause>
<expression>을 기반으로 다음과 같은 레코드를 선택합니다.
FILTER ((PRODUCT_PRICE*PRODUCT_AMOUNT) > 10000))
다음과 같이 Oracle GoldenGate의 열 변환 함수를 <clause> 필터에서 사용할 수 있습니다.
FILTER (@COMPUTE (PRODUCT_PRICE*PRODUCT_AMOUNT)>10000)
리터럴은 작은 따옴표로 묶습니다. 대소문자를 구분하는 열 이름은 데이터베이스에 저장될 때 지정하고, 대소문자를 구분하기 위해 따옴표가 필요한 경우 큰 따옴표로 묶습니다(예: Oracle).
Oracle GoldenGate는 로컬 운영 체제의 문자 집합과 호환되지 않는 멀티바이트 문자 집합 또는 문자 집합이 있는 열에 대해서는 FILTER를 지원하지 않습니다.
필터 절의 최대 크기는 5,000바이트입니다.
ON INSERT |
ON UPDATE |
ON DELETE |
레코드 필터링을 지정된 작업으로 제한합니다. 쉼표로 연산을 구분합니다. 예를 들면 다음과 같습니다.
FILTER (ON UPDATE, ON DELETE,
@COMPUTE (PRODUCT_PRICE*PRODUCT_AMOUNT)>10000)
앞의 예제에서는 INSERT 작업이 아닌 UPDATE 및 DELETE 작업에 대해 필터를 실행합니다.
IGNORE INSERT |
IGNORE UPDATE |
IGNORE DELETE |
지정된 작업에 대해 필터를 적용하지 않습니다. 쉼표로 연산을 구분합니다. 예를 들면 다음과 같습니다.
FILTER (IGNORE INSERT, @COMPUTE (PRODUCT_PRICE*PRODUCT_AMOUNT)>10000)
앞의 예제는 UPDATE 및 DELETE 작업에서 필터를 실행하지만 INSERT 작업은 무시합니다.
RAISEERROR <error>
필터가 실패할 경우 사용자 정의 오류 번호를 발생시킵니다. 오류 처리를 호출하기 위해 REPERROR 매개변수에 대한 입력으로 사용할 수 있습니다. <error>에 대한 값이 데이터베이스 또는 Oracle GoldenGate에서 사용되는 오류 번호 범위를 벗어나는지 확인하십시오. 예: RAISEERROR 21000.
GETBEFORECOLS (<column_specification>)
GETBEFORECOLS은 TABLE에 적합합니다.
GETBEFORECOLS를 사용하여 업데이트 또는 삭제 작업 시 이미지를 캡처하여 추적에 기록하기 전에 사용할 열을 지정합니다. 양방향 또는 다중 마스터 구성에서 Oracle GoldenGate CDR(충돌 감지 및 해결) 기능을 사용하는 경우 GETBEFORECOLS를 사용합니다. 또한 레코드의 이전 이미지가 필요한 변환 함수 또는 기타 처리 기능을 사용할 때도 사용합니다.
업데이트의 경우 지정된 열의 이전 이미지가 지정된 열이 수정되었는지 여부에 관계없이 추적에 포함됩니다. GETBEFORECOLS 절에 지정된 열 외에도 Oracle AI Database는 수정된 다른 열의 이전 이미지도 기록합니다. 지원되는 다른 데이터베이스의 경우 GETUPDATEBEFORES 매개변수를 사용하여 수정된 다른 열의 이전 값을 강제로 포함시킬 수 있습니다.
주: GETUPDATEBEFORES는 동일한 매개변수 파일에서 둘 다 사용되는 경우 GETBEFORECOLS를 무효화합니다.
이 파라미터를 사용하려면 기본값 이전에 기록되지 않는 모든 데이터베이스에 대해 보완 로깅을 활성화해야 합니다
GETBEFORECOLS는 동일한 매개변수 파일에 사용되는 경우 COMPRESSUPDATES 및 COMPRESSDELETES를 무효화합니다.
이 매개변수는 Db2 z/OS를 제외한 모든 데이터베이스에 유효합니다. Oracle GoldenGate에서 지원하는 모든 플랫폼에서 Db2 z/OS의 경우 GETBEFORECOLS. 대신 GETUPDATEBEFORES 매개변수를 사용합니다.
구문
GETBEFORECOLS(
{ON UPDATE | ON DELETE}
{ALL | KEY | KEYINCLUDING (<col>[,...]) | KEYANDMOD | | ALLEXCLUDING (<col>[,...]) }
[,...]
)
{ON UPDATE |
ON DELETE} |
지정된 열의 이전 이미지를 업데이트 또는 삭제에 대해 캡처해야 할지 여부를 지정합니다. ON UPDATE만, ON DELETE만 또는 둘 다를 사용할 수 있습니다. 둘 다 사용하는 경우 동일한 GETBEFORECOLS 절 내에서 지정합니다. 이 두 가지를 모두 사용하는 방법은 예를 참조하십시오.
{ALL | KEY | KEYINCLUDING (<col>[,...]) | KEYANDMOD | ALLEXCLUDING (<col>[,...])}
이전 이미지가 캡처되는 열을 지정합니다.
ALL
기본 키를 포함하여 대상 테이블에서 지원되는 모든 데이터 유형 열의 이전 이미지를 캡처합니다. 지원되지 않는 모든 열은 건너뛰고 Extract 또는 Replicat 매개변수 파일에 정보 메시지로 기록됩니다. 따라서 Extract에 대한 처리 로드가 가장 높지만 정확성을 극대화하기 위해 모든 열을 사용하여 충돌 감지 비교를 수행할 수 있습니다.
KEY
기본 키에 대해서만 이전 이미지를 캡처합니다. 이 옵션은 가장 빠른 옵션이지만 키가 일치할 수 있지만 키가 아닌 열이 다를 수 있으므로 가장 정확한 충돌 감지를 허용하지 않습니다. 기본값은 KEY입니다.
KEYINCLUDING
Primary Key 및 지정된 열의 이전 이미지를 캡처합니다. 이는 속도와 감지 정확도 사이의 합리적인 타협입니다.
KEYANDMOD
이 옵션을 Extract 및 Replicat에 대한 키 옵션의 확장으로 사용합니다. 소스에서 DML을 업데이트하는 경우 Extract는 키 및 수정된 열을 기록합니다. 대상의 Replicat는 WHERE 절에서 충돌 감지 중 KEY 및 MODIFIED 열을 사용합니다. Oracle AI Databases의 경우 수정된 열은 기본적으로 충돌 감지에 항상 사용되며 이 파라미터는 이를 명시적으로 만듭니다.
ALLEXCLUDING
지정된 열을 제외한 모든 열의 이전 이미지를 캡처합니다. 열이 많은 테이블의 경우 ALLEXCLUDING가 KEYINCLUDING보다 더 효율적일 수 있습니다. 키 열은 제외하지 마십시오.
예제
다음 예에서는 키 열과 name, address 및 salary에 대한 이전 이미지가 항상 업데이트 및 삭제 작업 시 추적 파일에 기록됩니다.
TABLE src,
GETBEFORECOLS (
ON UPDATE KEYINCLUDING (name, address, salary),
ON DELETE KEYINCLUDING (name, address, salary));
HANDLECOLLISIONS | NOHANDLECOLLISIONS
HANDLECOLLISIONS 및 NOHANDLECOLLISIONS는 MAP에 대해 유효합니다.
HANDLECOLLISIONS 및 NOHANDLECOLLISIONS를 사용하여 Oracle GoldenGate가 동일한 테이블에 대해 수행된 복제된 트랜잭션 변경 사항과 초기 로드 결과를 조정할지 여부를 제어합니다. Oracle GoldenGate가 로드가 완료된 후 복제된 변경사항을 적용하면 HANDLECOLLISIONS는 Replicat가 대상 테이블의 중복 레코드를 겹쳐쓰고 누락된 레코드에 대한 대체 오류 처리를 제공합니다.
HANDLECOLLISIONS 및 NOHANDLECOLLISIONS는 매개변수 파일의 모든 MAP 문에 대해 전역적으로 사용할 수도 있고, MAP 문으로 지정된 테이블 그룹에 대해 ON/OFF 스위치로 사용할 수도 있으며, MAP 문 내에서 사용할 수도 있습니다. MAP 문에 사용되는 경우 전역 사양을 대체합니다.
구문 및 사용법은 "HANDLECOLLISIONS | NOHANDLECOLLISIONS"를 참조하십시오.
전체 레코드 삽입
INSERTALLRECORDS은 MAP에 적합합니다.
INSERTALLRECORDS 매개변수를 사용하여 매핑된 모든 작업을 대상의 INSERT 작업으로 변환합니다. INSERTALLRECORDS는 매개변수 파일의 루트 레벨, MAP 문 및 MAP 문의 MAPEXCEPTION 절에서 사용할 수 있습니다.
구문 및 사용법은 "INSERTALLRECORDS"를 참조하십시오.
삽입추가 | 삽입추가 안함
INSERTAPPEND은 MAP에 적합합니다.
INSERTAPPEND 및 NOINSERTAPPEND 매개변수를 사용하여 Replicat가 INSERT 작업을 Oracle 대상 테이블에 적용할 때 APPEND 힌트를 사용할지 여부를 제어합니다. 이러한 매개변수는 Oracle 데이터베이스에 대해서만 유효합니다.
구문 및 사용법은 "INSERTAPPEND | NOINSERTAPPEND"를 참조하십시오.
KEYCOLS (<columns>)
KEYCOLS은 TABLE 및 MAP에 유효합니다.
KEYCOLS를 사용하여 대상 테이블의 하나 이상의 열을 고유로 정의합니다. KEYCOLS의 기본 용도는 테이블에 대해 기본 키 또는 적절한 고유 인덱스를 사용할 수 없을 때 대체 기본 키를 정의하는 것입니다. 또한 KEYCOLS를 사용하여 Replicat에서 사용하는 행 식별자에 사용할 추가 열을 지정할 수 있습니다. 키 또는 KEYCOLS 절을 사용할 수 없는 경우 Replicat는 테이블의 모든 열을 사용하여 WHERE 절을 작성하며 기본적으로 전체 테이블 스캔을 수행합니다.
KEYCOLS로 렌더링된 키의 열은 행을 고유하게 식별해야 하며, 소스 테이블에서 키로 사용되는 열과 일치해야 합니다. 소스 테이블은 대상 테이블에 대해 지정된 KEYCOLS 키만큼 키 또는 인덱스 열을 포함해야 합니다. 그렇지 않으면 소스 키 또는 인덱스 열이 업데이트될 경우 Replicat에 추가 대상 KEYCOL 열에 대한 이전 이미지가 포함되지 않습니다.
KEYCOLS로 대체 키를 정의할 때는 다음 지침을 준수하십시오.
-
소스 테이블과 대상 테이블에 모두 키 또는 고유 인덱스가 없는 경우
TABLE매개변수와MAP매개변수에KEYCOLS절을 사용하고 각KEYCOLS절에 일치하는 열 집합을 지정합니다. -
테이블 중 하나에 키 또는 고유 인덱스가 없으면 해당 테이블에
KEYCOLS를 사용합니다. 다른 테이블의 실제 키 또는 인덱스 열과 일치하는 열을 지정합니다. 일치하는 집합을KEYCOLS로 정의할 수 없는 경우 소스 테이블(TABLE매개변수) 및 대상 테이블(MAP매개변수)에 대해KEYCOLS를 사용해야 합니다. 고유한 값을 포함하는 일치하는 열 집합을 지정합니다.KEYCOLS는 키 또는 고유 인덱스를 무효화합니다. -
대상 테이블의 키가 소스 테이블의 키보다 크거나 고유 인덱스 열이 더 많은 경우
TABLE문에서KEYCOLS를 사용하여 추가 대상 열과 일치하는 소스 열을 지정합니다. 또한 이KEYCOLS절에 실제 소스 키 또는 인덱스 열을 포함해야 합니다. 이 방법으로KEYCOLS를 사용하면 소스에서 키가 아닌 열이 업데이트되는 경우 Replicat에서 이전 이미지를 사용할 수 있습니다.
KEYCOLS를 사용할 때는 지정된 열이 추적 레코드에서 Replicat에 사용할 수 있도록 로깅용으로 구성되었는지 확인하십시오. Oracle AI 데이터베이스의 경우 ADD TRANDATA 명령의 COLS 옵션을 사용하여 로깅을 사용으로 설정할 수 있습니다.
대상 테이블에서 KEYCOLS 정의 키 열에 고유 인덱스를 생성합니다. 인덱스는 Oracle GoldenGate가 처리해야 하는 대상 행을 찾는 속도를 향상시킵니다.
데이터 펌프 Extract 그룹에서 통과 모드로 처리 중인 테이블에 대해서는 KEYCOLS를 사용하지 마십시오.
병렬 Replicat 또는 통합 Replicat 사용 시 KEYCOLS에 대한 추가 지침:
-
KEYCOLS를ALLOWDUPTARGETMAP와 함께 사용하는 경우 각 매핑된 테이블에 대해 키 열이 동일해야 합니다. 예를 들어,HR.EMP를HR.EMP_TARGET및HR.EMP_BACKUP에 매핑하고KEYCOLS를 지정하는 경우HR.EMP_TARGET및HR.EMP_BACKUP에 대해 동일해야 합니다. -
KEYCOLS를 사용하여 여러 소스 테이블에서 동일한 대상 테이블로 매핑하는 경우MAP문은 동일한KEYCOLS집합을 사용해야 합니다.
구문
KEYCOLS (<column> [, ... ])
<column>
대체 기본 키로 사용할 열을 정의합니다. 기본 또는 고유 키가 존재하는 경우 해당 열은 KEYCOLS 사양에 포함되어야 합니다. 여러 열을 지정하려면 다음과 같이 쉼표로 구분된 리스트를 생성합니다.
KEYCOLS (id, name)
다음 열 유형은 KEYCOLS에서 지원되지 않습니다.
-
Oracle 열 유형은
KEYCOLS에서 지원되지 않습니다.가상 열, UDT, 함수 기반 열 및 Oracle GoldenGate 구성에서 명시적으로 제외된 모든 열.
-
SQL Server, Db2 LUW, Db2 z/OS, MySQL 및 Teradata:
시간 기록 또는 비구체화된 계산 열과 Oracle GoldenGate 구성에서 제외된 열을 포함하는 열입니다. SQL Server의 경우 Oracle GoldenGate는 기본 키가 없는 대상 테이블에 대한 행의 총 데이터 길이를 8000바이트 미만으로 강제 적용합니다.
예제
KEYCOLS
MAPEXCEPTION (<exceptions_mapping>)
MAPEXCEPTIONS은 MAP에 적합합니다.
오류 처리를 위한 예외 MAP 문의 일부로 MAPEXCEPTION를 사용합니다. MAPEXCEPTION는 REPERROR 매개변수에 의해 예외로 플래그가 지정된 실패한 작업을 예외 테이블에 매핑합니다. Replicat는 이러한 작업의 값을 다른 정보와 함께 예외 테이블에 씁니다.
소스-대상 테이블 매핑 및 기타 표준 MAP 옵션을 포함하는 동일한 MAP 문 내에서 MAPEXCEPTION를 사용할 수 있습니다. 소스 및 대상 테이블 이름에는 와일드카드가 포함될 수 있습니다.
MAPEXCEPTION를 사용할 때는 REPERROR 문을 동일한 MAP 문 내에서 또는 Replicat 매개변수 파일의 루트에서 EXCEPTION 옵션과 함께 사용합니다. "EXCEPTIONSONLY" 및 "REPERROR"을 참조하십시오.
구문
MAPEXCEPTION (TARGET <exceptions_table>, INSERTALLRECORDS [, <exception_MAP_options>])
TARGET <exceptions_table>
예외 테이블의 전체 이름입니다. 객체 이름에 대한 표준 Oracle GoldenGate 규칙은 예외 테이블의 이름에 적용됩니다.
<exception_MAP_options>
예외 처리에 적용할 MAP 매개변수의 적합한 옵션입니다.
INSERTALLRECORDS
모든 예외를 예외 테이블에 INSERT 작업으로 적용합니다. 이 매개변수는 MAPEXCEPTION를 사용할 때 필요합니다.
예제
다음은 예외 매핑에 MAPEXCEPTION를 사용하는 방법의 예입니다. MAP 및 TARGET 절에는 와일드카드 소스 및 대상 테이블 이름이 포함됩니다. 이름이 TRX로 시작하는 테이블을 처리할 때 발생하는 예외는 지정된 매핑을 사용하여 fin.trxexceptions 테이블에 캡처됩니다.
MAP src.trx*, TARGET trg.*,
MAPEXCEPTION (TARGET fin.trxexceptions,
INSERTALLRECORDS,
COLMAP (USEDEFAULTS,
ACCT_NO = ACCT_NO,
OPTYPE = @GETENV ('LASTERR', 'OPTYPE'),
DBERR = @GETENV ('LASTERR', 'DBERRNUM'),
DBERRMSG = @GETENV ('LASTERR', 'DBERRMSG')
)
);
MAPALLCOLUMNS | 이름
MAPALLCOLUMNS 및 NOMAPALLCOLUMNS는 MAP에 대해 유효합니다.
매핑되지 않은 열(키가 아닌 열)을 가져오려면 MAPALLCOLUMNS를 사용합니다. 이 옵션을 지정하면 Extract 또는 Replicat는 모든 소스 열이 열 매핑 함수 없이 대상에 직접 매핑되는지 여부를 확인합니다. 소스 열이 매핑되지 않은 경우 Extract 및/또는 Replicat가 비정상 종료됩니다.
"MAPALLCOLUMNS| NOMAPALLCOLUMNS"를 참조하십시오.
MAPINVISIBLECOLUMNS | 명목상
MAPINVISIBLECOLUMNS 및 NOMAPINVISIBLECOLUMNS는 MAP에 대해 유효합니다.
MAPINVISIBLECOLUMNS 및 NOMAPINVISIBLECOLUMNS를 사용하여 Replicat가 기본 열 매핑을 위해 Oracle 대상 테이블에 보이지 않는 열을 포함할지 여부를 제어합니다. 명시적 열 매핑을 사용하는 Oracle 대상 테이블의 보이지 않는 열의 경우 항상 매핑되므로 이 옵션이 필요하지 않습니다.
MAPINVISIBLECOLUMNS 및 NOMAPINVISIBLECOLUMNS는 두 가지 방법으로 사용할 수 있습니다. 전역 레벨에서 지정된 경우 한 매개변수는 다른 매개변수가 지정될 때까지 이후의 모든 MAP 문에 적용됩니다. MAP 문 내에서 사용되는 경우 전역 사양을 대체합니다.
구문 및 사용법은 "MAPINVISIBLECOLUMNS | NOMAPINVISIBLECOLUMNS"를 참조하십시오.
REPERROR (<error>,<response>)
REPERROR은 MAP에 적합합니다.
REPERROR를 사용하여 MAP 문을 실행할 때 Replicat가 오류에 응답하는 방식을 함께 제어하는 오류와 응답을 지정합니다. MAP 레벨의 REPERROR를 사용하여 매개변수 파일의 루트 레벨에서 REPERROR 매개변수로 설정된 전역 오류 처리 규칙을 무효화하고 보완할 수 있습니다. 여러 REPERROR 문을 동일한 MAP 문에 적용하여 오류 및 중단 없는 복제 처리를 자동으로 포괄적으로 관리할 수 있습니다.
구문 및 설명은 "REPERROR"을 참조하십시오.
RESOLVECONFLICT (<conflict_resolution_specification>)
RESOLVECONFLICT은 MAP에 적합합니다.
양방향 또는 다중 마스터 구성에서 RESOLVECONFLICT를 사용하여 Replicat가 MAP 문의 테이블에 대해 수행된 작업에 대한 충돌을 처리하는 방법을 지정합니다.
동일한 충돌 유형에 대해 여러 해결 방법을 지정할 수 있으며 RESOLVECONFLICT에 나열된 순서로 실행됩니다. 여러 해결 방법은 INSERTROWEXISTS 및 UPDATEROWEXISTS 충돌로만 제한됩니다.
RESOLVECONFLICT는 MAP 문에서 여러 번 사용하여 서로 다른 충돌 유형에 대해 서로 다른 해상도를 지정할 수 있습니다.
다음은 RESOLVECONFLICT에서 지원하는 데이터 유형 및 플랫폼입니다.
-
RESOLVECONFLICT는 Windows 및 UNIX용 Oracle GoldenGate에서 지원하는 모든 데이터베이스를 지원합니다. -
RESOLVECONFLICT를 사용하려면 데이터베이스가 Windows, Linux 또는 UNIX 시스템(NonStop OSS에서 실행되는 시스템 포함)에 상주해야 합니다. -
CDR은 명시적 변환 없이 단순 SQL과 비교할 수 있는 데이터 유형을 지원합니다. 자세한 내용은 개별 매개변수 옵션을 참조하십시오.
-
LOB, 추상 데이터 유형(ADT) 또는 사용자 정의 유형(UDT)이 포함된 열에는
RESOLVECONFLICT를 사용하지 마십시오.
구문
RESOLVECONFLICT (
{INSERTROWEXISTS | UPDATEROWEXISTS | UPDATEROWMISSING |
DELETEROWEXISTS | DELETEROWMISSING}
( {DEFAULT | <resolution_name>},
{USEMAX (<resolution_column>) | USEMAXEQ (<resolution_column>) | USEMIN (<resolution_column>) | USEMINEQ (<resolution_column>) | USEDELTA |
DISCARD | OVERWRITE | IGNORE}
)
[, COLS (<column>[,...])]
)
INSERTROWEXISTS |
UPDATEROWEXISTS |
UPDATEROWMISSING |
DELETEROWEXISTS |
DELETEROWMISSING |
이 해결이 처리하는 충돌 유형입니다.
INSERTROWEXISTS
삽입된 행은 대상의 고유성 제약 조건을 위반합니다.
UPDATEROWEXISTS
대상에 갱신된 행이 있지만 하나 이상의 열에 트레일의 이전 이미지가 데이터베이스의 현재 값과는 다른 경우가 있습니다.
UPDATEROWMISSING
업데이트된 행이 대상에 존재하지 않습니다.
DELETEROWEXISTS
삭제된 행이 대상에 존재하지만 하나 이상의 열이 추적에서 데이터베이스의 현재 값과 다른 이전 이미지를 가집니다.
DELETEROWMISSING
삭제된 행이 대상에 존재하지 않습니다.
DEFAULT | <resolution_name>
DEFAULT
기본 열 그룹. DEFAULT 열 그룹과 연관된 해상도는 명시적으로 명명된 열 그룹에 속하지 않는 모든 열에 사용됩니다. DEFAULT 열 그룹을 정의해야 합니다.
<resolution_name>
특정 해결 유형에 연결된 특정 열 그룹의 이름입니다. 해결 유형을 식별하는 이름을 제공합니다. 적합한 값은 영숫자입니다. 공백 및 특수 문자는 사용하지 마십시오. 단, 밑줄은 다음과 같이 허용됩니다.
delta_res_method
명명된 해상도 또는 DEFAULT 중 하나만 사용합니다.
USEMAX (<resolution_column>) | USEMAXEQ (<resolution_column>) | USEMIN (<resolution_column>) | USEMINEQ (<resolution_column>) | USEDELTA | |
||
DISCARD |
OVERWRITE |
IGNORE |
충돌 해결에 사용되는 충돌 처리기 논리입니다. 유효한 해결 방법은 다음과 같습니다.
USEMAX
추적 레코드의 <resolution_column> 값이 데이터베이스의 열 값보다 크면 적절한 작업이 수행됩니다.
-
(
INSERTROWEXISTS충돌) 트레일 레코드를 적용하되 고유성 위반이 발생하지 않도록 삽입을 갱신으로 변경하고 기존 값을 덮어씁니다. -
(
UPDATEROWEXISTS충돌) 추적 레코드를 업데이트로 적용합니다.
USEMAXEQ
추적 레코드의 <resolution_column> 값이 데이터베이스의 열 값보다 크거나 같으면 적절한 작업이 수행됩니다.
-
(
INSERTROWEXISTS충돌) 트레일 레코드를 적용하되 고유성 위반이 발생하지 않도록 삽입을 갱신으로 변경하고 기존 값을 덮어씁니다. -
(
UPDATEROWEXISTS충돌) 추적 레코드를 업데이트로 적용합니다.
USEMIN
트레일 레코드의 <resolution_column> 값이 데이터베이스의 <column> 값보다 작으면 해당 <action>가 수행됩니다.
-
(
INSERTROWEXISTS충돌) 트레일 레코드를 적용하되 고유성 위반이 발생하지 않도록 삽입을 갱신으로 변경하고 기존 값을 덮어씁니다. -
(
UPDATEROWEXISTS충돌) 추적 레코드의 업데이트를 적용합니다.
USEMINEQ
트레일 레코드의 <resolution_column> 값이 데이터베이스의 <column> 값보다 작거나 같으면 적절한 <action>가 수행됩니다.
-
(
INSERTROWEXISTS충돌) 트레일 레코드를 적용하되 고유성 위반이 발생하지 않도록 삽입을 갱신으로 변경하고 기존 값을 덮어씁니다. -
(
UPDATEROWEXISTS충돌) 추적 레코드의 업데이트를 적용합니다.
<resolution_column>
해결 열로 사용되는 NOT NULL 열의 이름입니다. 이 열은 이 분석과 연관된 열 그룹의 일부여야 합니다. 대상 데이터베이스의 현재 값과 비교한 분석 열의 값에 따라 분석 적용 방법이 결정됩니다. 분석 열의 이후 이미지가 사용 가능한 경우 비교에 사용됩니다. 그렇지 않은 경우 이전 이미지 값이 사용됩니다. 간단한 SQL을 통해 비교할 수 있는 열 사용:
-
NUMERIC -
DATE -
TIMESTAMP -
CHAR/NCHAR -
VARCHAR/ NVARCHAR
최신 시간 기록 해상도를 사용하려면 시간 기록 열을 <resolution_column>로 사용하고 행이 삽입되거나 업데이트될 때 시간 기록 열을 현재 시간으로 설정합니다. 가능한 경우 소수 표시 초를 지원하는 SYSTIMESTAMP 데이터 유형으로 분석 열을 정의합니다. 1초 미만의 세분성으로 비교를 수행하는 경우 해결 열의 값이 추적 및 대상에서 모두 동일한 경우를 해결하는 충돌 처리기가 거의 필요하지 않습니다. 시간 기록 열의 값이 해상도에 따라 증가 또는 감소만 가능하도록 할 경우 USEMAX 및 USEMIN는 데이터 분기를 초래하지 않습니다.
참고:
UPDATEROWEXISTS 충돌에 대해 기본 키 열을 USEMAX 문에서 해결 열로 사용하지 마십시오. 그렇지 않으면 Replicat가 다음과 유사한 오류로 비정상 종료됩니다.
2013-04-04 10:18:38 ERROR OGG-01922 Missing RESOLUTION COLUMN NAME while mapping to target table "FIN"."ACCT".
USEDELTA
(UPDATEROWEXISTS 충돌만 해당) 추적 레코드의 이전 및 이후 값 간의 차이를 대상 데이터베이스의 현재 열 값에 추가합니다. 값이 NULL이면 오류가 발생합니다. NUMERIC 데이터 유형을 포함하는 열을 기준으로 USEDELTA을 설정합니다. USEDELTA는 다중 노드에서 행이 동시에 업데이트되는 경우 다중 노드 구성에서 유용합니다. 열 값의 차이만 다른 노드로 전달하므로 모든 노드가 동기화됩니다.
DISCARD
(모든 충돌 유형에 적합) Target Database에 현재 값을 유지하고 트레일 레코드의 데이터를 폐기 파일에 기록합니다.
데이터 분기가 발생할 수 있으므로 DISCARD를 주의해서 사용하십시오.
OVERWRITE
(DELETEROWMISSING를 제외한 모든 충돌 유형에 적합) 다음과 같이 트레일 레코드를 적용합니다.
-
(
INSERTROWEXISTS충돌) 추적 레코드를 적용하지만 고유성 위반을 방지하고 기존 값을 덮어쓰도록 삽입을 업데이트로 변경합니다. -
(
UPDATEROWEXISTS충돌) 추적 레코드의 업데이트를 적용합니다. -
(
UPDATEROWMISSING충돌) 추적 레코드를 적용하지만 이후 이미지에서 수정된 열과 이전 이미지에서 수정되지 않은 열을 사용하여 누락된UPDATE를INSERT로 변환합니다. 갱신을 삽입으로 변환하려면 행의 모든 열에 대한 이전 이미지를 추적에서 사용할 수 있어야 합니다. 데이터베이스가 기본적으로 이전 이미지를 기록하지 않는 경우 보완 로깅을 사용하고 ExtractGETBEFORECOLS매개변수에ALL를 지정합니다. -
(
DELETEROWEXISTS충돌) 추적 레코드에서 삭제를 적용하지만WHERE절에서 기본 키 열만 사용합니다.
데이터 분기가 발생할 수 있으므로 OVERWRITE를 주의해서 사용하십시오.
IGNORE
(모든 충돌 유형에 적합) Target Database에 현재 값을 유지하고 트레일 레코드를 무시합니다. 대상 테이블이나 폐기 파일에 적용되지 않습니다.
COLS (<column>[, ...])
기본이 아닌 열 그룹입니다. 매핑 후 대상 데이터베이스의 특정 분석 유형에 연결 및 작동되는 열 목록입니다. 충돌에 대해 열 그룹을 지정하지 않으면 모든 열이 주어진 충돌에 대해 지정된 해결의 영향을 받습니다.
또는 다른 열 그룹에 나열되지 않은 모든 열을 포함하는 DEFAULT 열 그룹을 지정할 수 있습니다. DEFAULT 옵션을 참조하십시오.
각각 해상도가 다른 여러 열 그룹을 지정할 수 있습니다. 예를 들어, col2 및 col3에 OVERWRITE를 사용할 수 있으며 col4에 USEDELTA를 사용할 수 있습니다. 그룹의 열은 다른 그룹에 있을 수 없습니다. 다른 열 그룹의 열에 대한 충돌은 지정된 해상도 및 나열된 순서에 따라 별도로 해결됩니다.
열 그룹은 다음과 같이 작동합니다.
-
INSERTROWEXISTS및UPDATEROWEXISTS충돌의 경우 서로 다른 열 그룹을 사용하여 테이블당 이러한 충돌 유형 및 해결 방법을 둘 이상 지정할 수 있습니다. 열 그룹에 대해 지정된 충돌 해결 방법에 따라 서로 다른 열 그룹의 열에 대한 충돌이 별도로 해결됩니다. -
UPDATEROWMISSING,DELETEROWEXISTS및DELETEROWMISSING의 경우 열 그룹을 하나만 사용할 수 있으며 테이블의 모든 열은 이 열 그룹(<default>열 그룹 고려)에 있어야 합니다.
예제
예 1
이 예에서는 USEMAX, OVERWRITE, DISCARD를 사용하는 모든 충돌 유형을 보여줍니다.
MAP fin.src, TARGET fin.tgt,
COMPARECOLS (ON UPDATE ALL, ON DELETE ALL),
RESOLVECONFLICT (UPDATEROWEXISTS, (DEFAULT, USEMAX (last_mod_time)),
RESOLVECONFLICT (INSERTROWEXISTS, (DEFAULT, USEMAX (last_mod_time)),
RESOLVECONFLICT (DELETEROWEXISTS, (DEFAULT, OVERWRITE)),
RESOLVECONFLICT (UPDATEROWMISSING, (DEFAULT, OVERWRITE)),
RESOLVECONFLICT (DELETEROWMISSING, (DEFAULT, DISCARD)),
);
예 2
이 예에서는 UPDATEROWEXISTS와 USEDELTA 및 USEMAX를 보여줍니다.
MAP fin.src, TARGET fin.tgt,
COMPARECOLS
(ON UPDATE KEYINCLUDING (address, phone, salary, last_mod_time),
ON DELETE KEYINCLUDING (address, phone, salary, last_mod_time)),
RESOLVECONFLICT (
UPDATEROWEXISTS,
(delta_res_method, USEDELTA, COLS (salary)),
(DEFAULT, USEMAX (last_mod_time)));
예 3
이 예에서는 UPDATEROWEXISTS와 USEDELTA, USEMAX 및 IGNORE를 보여줍니다.
MAP fin.src, TARGET fin.tgt,
COMPARECOLS
(ON UPDATE ALLEXCLUDING (comment)),
RESOLVECONFLICT (
UPDATEROWEXISTS,
(delta_res_method, USEDELTA, COLS (salary, balance)),
(max_res_method, USEMAX (last_mod_time), COLS (address, last_mod_time)),
(DEFAULT, IGNORE));
SQLEXEC (<SQL_specification>)
SQLEXEC은 TABLE 및 MAP에 유효합니다.
SQLEXEC를 사용하여 Oracle GoldenGate 처리 중 MAP 문 내에서 SQL 내장 프로시저 또는 질의를 실행할 수 있습니다. SQLEXEC Oracle GoldenGate는 데이터베이스와 직접 통신하여 데이터베이스에서 지원하는 작업을 수행할 수 있습니다. 이 작업은 열 변환에 대한 값 검색과 같은 동기화 프로세스의 일부일 수도 있고, 데이터베이스 내에서 작업을 실행하는 내장 프로시저 실행과 같은 데이터 추출 또는 복제와 무관할 수도 있습니다.
구문 및 사용법은 "SQLEXEC"를 참조하십시오.
SQLPREDICATE 'WHERE <where_clause>'
SQLPREDICATE는 Oracle, Db2 LUW, z/OS의 Db2, i의 경우 Db2, PostgreSQL, MySQL, SQL Server 및 Sybase 데이터베이스에 유효합니다. 트랜잭션 변경 사항을 동기화하도록 구성된 Extract 그룹에 SQLPREDICATE를 사용하지 마십시오. 이 명령문은 테이블에서 직접 레코드를 선택하는 SELECT 문을 종료하므로 초기 로드 Extract에만 적합합니다.
SQLPREDICATE는 TABLE와 함께 사용됩니다.
SQLPREDICATE를 사용하여 Extract가 초기 로드를 준비할 때 테이블에서 데이터를 선택할 때 사용하는 SELECT 문에 기존 SQL WHERE 절을 포함시킵니다. SQLPREDICATE는 선택에서 반환된 레코드가 키 값별로 정렬되도록 강제합니다.
SQLPREDICATE는 WHERE 또는 FILTER 옵션보다 초기 로드를 위한 빠른 선택 방법입니다. SQL 문에 직접 영향을 주며, 레코드를 필터링하기 전에 Extract가 모든 레코드를 인출할 필요는 없습니다.
Oracle 테이블의 경우 SQLPREDICATE는 언두 세그먼트에 저장되는 데이터의 양을 줄여 스냅샷이 너무 오래된 오류의 발생을 줄일 수 있습니다. 이 기능은 매우 큰 테이블을 로드할 때 유용합니다.
SQLPREDICATE 절을 사용하면 두 개 이상의 병렬 Extract 프로세스 간에 대형 테이블 행을 분할할 수 있습니다. 이 구성을 사용하면 병렬 전달 로드 처리도 활용할 수 있습니다.
또한 SQLPREDICATE를 사용하면 시간 기록 또는 기타 조건을 기반으로 데이터를 선택하여 추출되어 대상 테이블로 로드되는 행을 필터링할 수 있습니다. SQLPREDICATE는 ORDER BY 절 또는 다른 유형의 선택 절에 사용할 수 있습니다.
WHERE 절에 키 또는 인덱스의 일부인 열이 포함되어 있는지 확인합니다. 그렇지 않으면 Extract가 전체 테이블 스캔을 수행하여 SELECT 문의 효율성을 줄입니다.
구문
TABLE <source_table>, SQLPREDICATE 'WHERE <where_clause>';
WHERE
필수 키워드입니다.
<where_clause>
소스 테이블에서 레코드를 선택하는 적합한 SQL WHERE 절입니다.
예제
TABLE hr.emp, SQLPREDICATE 'WHERE state = 'CO' and city = 'DENVER''
THREAD (<thread_ID>)
THREAD은 MAP에 적합합니다. 이 옵션은 Replicat가 조정 모드인 경우 유효합니다.
THREAD를 사용하여 동일한 MAP 문에 있는 모든 객체가 지정된 Replicat 스레드에서 처리되도록 지정합니다. 지정된 스레드는 필터링, 조작, 대상에 대한 전달, 오류 처리 및 해당 객체에 대해 구성된 기타 작업을 처리합니다. THREAD를 사용할 때 TARGET 절에 와일드카드를 사용할 수 있습니다.
서로 참조 종속성이 있는 모든 테이블은 동일한 스레드에 매핑되어야 합니다. 예를 들어, 테이블 scott.cust 및 scott.ord에 외래 키 관계가 있는 경우 가능한 매핑은 다음과 같습니다.
MAP scott.cust, TARGET scott.cust, THREAD (5);
MAP scott.ord, TARGET scott.ord, THREAD (5);
스레드 ID가 가장 낮은 스레드는 THREAD 또는 THREADRANGE 옵션이 생략된 경우 항상 차단 트랜잭션을 처리합니다. 또한 스레드에 명시적으로 할당되지 않은 작업은 이 스레드를 통해 처리됩니다. 예를 들어, ID가 1에서 10 사이인 스레드가 있는 경우 장벽 및 지정되지 않은 트랜잭션은 스레드 1에 의해 수행됩니다.
여러 스레드에서 MAP 문을 처리하려면 THREADRANGE(thread_range, column_list)를 참조하십시오. THREAD 및 THREADRANGE는 상호 배타적인 옵션입니다. 동일한 MAP 문에서 함께 사용하지 마십시오.
구문
THREAD (<thread_ID>)
<thread_ID>
이 MAP 문을 처리할 스레드의 숫자 식별자입니다. 유효한 값은 1부터 이 그룹을 만든 ADD REPLICAT 명령의 MAXTHREADS 옵션으로 지정된 값까지입니다. INFO REPLICAT 명령을 사용하여 Replicat 그룹에 허용된 최대 스레드 수를 확인할 수 있습니다. 스레드 ID를 지정할 때 다음 사항에 해당해야 합니다.
-
Replicat 그룹의 모든
MAP문에 지정된 총 스레드 수는MAXTHREADS값을 초과할 수 없습니다. -
Replicat 그룹의 단일
<thread_ID>값은MAXTHREADS값보다 클 수 없습니다. 예를 들어,MAXTHREADS가 25이면<thread_ID>가 26 이상일 수 없습니다.
MAXTHREADS가 사용되지 않은 경우 기본 최대 스레드 수는 25입니다.
예제
다음 예에서는 THREAD 옵션을 사용하는 몇 가지 방법을 보여줍니다.
예 1
이 예에서 스레드 1은 cust 테이블을 처리합니다.
MAP scott.cust, TARGET scott.cust, THREAD (1);
예 2
이 예제에서 스레드 1은 scott 스키마의 모든 테이블을 처리합니다.
MAP scott.*, TARGET scott.*, THREAD (1);
예 3
이 예에서 orders 테이블은 FILTER (filter_clause) 및 @RANGE 함수를 사용하여 두 개의 MAP 문 간에 분할됩니다. @RANGE에 대한 자세한 내용은 "@RANGE"을 참조하십시오.
MAP scott.orders, TARGET scott.orders, FILTER (@RANGE (1, 2, OID)), THREAD (1);
MAP scott.orders, TARGET scott.orders, FILTER (@RANGE (2, 2, OID)), THREAD (2);
THREADRANGE (<thread_range>,<column_list>)
THREADRANGE은 MAP에 적합합니다. 이 옵션은 Replicat가 조정 모드인 경우 유효합니다.
THREADRANGE를 사용하여 지정된 열의 값을 기반으로 Replicat 스레드 범위에서 대상 테이블의 작업 로드가 균등하게 분할되도록 지정합니다. 예를 들어, 분할이 이름이 ID인 열의 값을 기반으로 하고 THREADRANGE 값이 1-3인 경우 스레드 1은 1에서 10까지의 ID 값을 가진 행을 처리하고, 스레드 2는 11에서 20까지의 ID 값을 가진 행을 처리하며, 스레드 3은 21에서 30까지의 ID 값을 가진 행을 처리합니다. Partitioning은 작업 로드의 초기 계산에 따라 앞의 예제에서와 같이 절대적으로 다르지만 동일한 행이 항상 동일한 스레드에 의해 처리되도록 조정됩니다. 지정된 각 스레드는 필터링, 조작, 오류 처리, 대상에 대한 전달 및 해당 행 범위에 대한 기타 작업을 처리합니다.
스레드 범위에서 테이블을 분할하면 장기 실행 트랜잭션이나 볼륨이 자주 발생하지만 다른 경우에는 사용할 수 있는 매우 큰 테이블이나 테이블에 대한 적용 성능이 향상될 수 있습니다. 동일한 스레드 범위를 통해 두 개 이상의 테이블을 처리할 수 있습니다.
선택적 열 목록을 생략할 경우 THREADRANGE를 사용할 때 와일드카드 TARGET 절을 사용할 수 있습니다. 열 목록을 사용할 때는 동일한 스레드 범위를 사용하는 각 테이블에 대해 별도의 명시적 MAP 문을 사용합니다.
하나의 특정 스레드가 있는 MAP 문을 처리하려면 THREAD(thread_ID)를 참조하십시오. THREAD 및 THREADRANGE는 상호 배타적인 옵션입니다. 동일한 MAP 문에서 함께 사용하지 마십시오.
스레드 범위에서 서로 참조 종속성이 있는 테이블을 지정하지 마십시오. THREAD 옵션을 사용하여 동일한 스레드를 가진 모든 테이블을 처리합니다.
시퀀스를 분할하는 데 THREADRANGE를 사용하지 마십시오. 조정이 필요한 경우(예: 시퀀스가 SQLEXEC 작업의 일부인 경우) THREAD 옵션을 사용하여 시퀀스 작업을 하나의 스레드로 분할합니다.
가장 낮은 스레드 ID의 스레드는 THREAD 또는 THREADRANGE 옵션을 생략할 경우 항상 장벽 트랜잭션을 처리합니다. 또한 스레드에 명시적으로 할당되지 않은 작업은 이 스레드를 통해 처리됩니다. 예를 들어, ID가 1에서 10 사이인 스레드가 있는 경우 장벽 및 지정되지 않은 트랜잭션은 스레드 1에 의해 수행됩니다. 주: 열 리스트에 지정된 열은 트레일 파일에 있어야 합니다. Extract의 KEYCOLS을 사용하여 이 열을 포함하거나, Extract의 FETCHCOLS을 사용하여 열에 대해 사용하거나, 열이 보완 로그 그룹의 일부인지 확인한 후 LOGALLSUPCOLS를 사용하여 이 열을 제어할 수 있습니다.
구문
THREADRANGE (<lowID>-<highID>, [<column>[, <column>][, ...]])
<lowID>
이 범위의 가장 낮은 스레드 식별자입니다. 적합한 값은 1에서 500 사이입니다.
<highID>
이 범위의 최상위 스레드 식별자로, <lowID>보다 큰 숫자여야 합니다. 유효한 값은 <lowID>+1 ~ 500입니다. 범위의 스레드 수는 ADD REPLICAT 명령의 MAXTHREADS 옵션으로 지정된 값을 초과할 수 없습니다. MAXTHREADS가 사용되지 않은 경우 기본 최대 스레드 수는 25입니다.
[<column>[, <column>][, ...]]
선택 사항입니다. 행 분할의 기초가 될 하나 이상의 고유한 열을 지정합니다. 여러 열을 지정하려면 쉼표로 구분된 목록(예: col1, col2, col3)을 사용합니다. 이 옵션을 생략하면 스레드 간 분할은 기본적으로 다음 열을 기준으로 하며 기본 설정 순서대로 표시됩니다.
-
기본 키
-
동일한
MAP문의KEYCOLS절 -
Oracle GoldenGate에서 키로 사용하도록 지원하는 테이블의 모든 열입니다.
예제
다음 예에서는 OID 열의 값을 기반으로 orders 및 order_lines 테이블을 동일한 두 스레드 간에 나눕니다.
MAP scott.orders, TARGET scott.orders, THREADRANGE (1-2, OID);
MAP scott.order_lines, TARGET scott.order_lines, THREADRANGE (1-2, OID);
TOKENS (<token_definition>)
TOKENS은 TABLE에 적합합니다.
TOKENS를 사용하여 사용자 토큰을 정의하고 데이터와 연관시킵니다. 토큰을 사용하면 추적 레코드 헤더의 사용자 토큰 영역 내에서 데이터를 추출하고 저장할 수 있습니다. Oracle GoldenGate가 데이터를 제공하는 방식을 커스터마이즈하기 위해 다양한 방법으로 토큰 데이터를 검색하고 사용할 수 있습니다. 예를 들어, 열 맵, SQLEXEC에서 호출된 내장 프로시저 또는 매크로에서 토큰 데이터를 사용할 수 있습니다.
대상 테이블에서 정의된 토큰 데이터를 사용하려면 Replicat MAP 문의 COLMAP 절에서 @TOKEN 열 변환 함수를 사용합니다. @TOKEN 함수는 토큰의 이름을 대상 열에 매핑합니다.
데이터 펌프 Extract 그룹에서 통과 모드로 처리 중인 테이블에 대해서는 이 옵션을 사용하지 마십시오.
토큰 데이터의 문자 집합은 변환되지 않습니다. 토큰은 Extract용 소스 데이터베이스의 문자 집합 및 Replicat용 대상 데이터베이스의 문자 집합에 있어야 합니다.
구문
TOKENS (<token_name> = <token_data> [, ...])
<token_name>
토큰에 대해 선택한 이름입니다. 적합한 문자는 개수에 제한이 없으며 대소문자를 구분하지 않습니다. 멀티바이트 이름은 지원되지 않습니다.
<token_data>
최대 2000바이트의 적합한 문자열입니다. 데이터는 작은 따옴표로 묶인 리터럴(또는 NOUSEANSISQLQUOTES가 사용 중인 경우 큰 따옴표) 또는 Oracle GoldenGate 열 변환 함수의 결과일 수 있습니다.
예제
다음은 TK-OSUSER, TK-GROUP 및 TK-HOST라는 토큰을 만들고 @GETENV 함수를 사용하여 얻은 토큰 데이터에 매핑합니다.
TABLE ora.oratest, TOKENS (
TK-OSUSER = @GETENV ('GGENVIRONMENT' , 'OSUSERNAME'),
TK-GROUP = @GETENV ('GGENVIRONMENT' , 'GROUPNAME')
TK-HOST = @GETENV ('GGENVIRONMENT' , 'HOSTNAME'));
트림스페이스 | NOTRIMSPACES
TRIMSPACES 및 NOTRIMSPACES는 TABLE 및 MAP에 유효합니다.
매개변수 파일의 루트 레벨이나 TABLE 또는 MAP 문 내에서 TRIMSPACES 및 NOTRIMSPACES를 사용하여 소스 CHAR 열의 후행 공백이 대상 CHAR 또는 VARCHAR 열에 적용될 때 잘릴지 여부를 제어합니다. 기본값은 TRIMSPACES입니다.
구문 및 사용법은 "TRIMSPACES | NOTRIMSPACES"를 참조하십시오.
트림바르스페이스 | 노림바르스페이스
TRIMVARSPACES 및 NOTRIMVARSPACES는 TABLE 및 MAP에 유효합니다.
매개변수 파일의 루트 레벨이나 TABLE 또는 MAP 문 내에서 TRIMVARSPACES 및 NOTRIMVARSPACES를 사용하여 소스 VARCHAR 열의 후행 공백이 대상 CHAR 또는 VARCHAR 열에 적용될 때 잘릴지 여부를 제어합니다. The default is NOTRIMVARSPACES.
See “TRIMVARSPACES | NOTRIMVARSPACES” for syntax and usage.
WHERE (<clause>)
WHERE is valid for TABLE and MAP.
Use WHERE to select records based on a conditional statement. WHERE does not support the following:
-
Columns that have a multi-byte character set or a character set that is incompatible with the character set of the local operating system.
-
The evaluation of the before image of a primary key column in the conditional statement as part of a primary key update operation.
Enclose literals in single quotes. Specify case-sensitive column names as they are stored in the database, and enclose them in double quotes if the database requires quotes to enforce case-sensitivity (such as Oracle).
Getting More Information about Record Filtering
Syntax
WHERE (<clause>)
<clause>
Selects records based on a condition, such as:
WHERE (branch = 'NY')
Table 2-12 shows permissible WHERE operators.
Table 12 Permissible WHERE Operators
| Operator | Example |
|---|---|
| 열 이름 | PRODUCT_AMT "Product_Amt" |
| Numeric values | -123, 5500.123 |
| Literal strings enclosed in single quotes | 'AUTO', 'Ca' |
| Column tests | @NULL, @PRESENT, @ABSENT (column is null, present or absent in the record). These tests are built into Oracle GoldenGate. |
| Comparison operators | =, <>, >, <,>=, <= < td> ,> |
| 결합 연산자 | `OR`, `AND` |
| 그룹화 괄호 | 여러 요소의 논리적 그룹화에 대해 열기 및 닫기 괄호를 사용합니다. |
예제
다음 WHERE 예제는 AMOUNT 열이 10,000을 초과할 때 모든 레코드를 반환하며, AMOUNT가 없을 때 레코드가 폐기되지 않습니다.
WHERE (amount = @PRESENT AND amount > 10000)
파티션OBJID
통합 추출에 적합합니다.
PARTITIONOBJID는 분할된 테이블에 대해 캡처할 분할 영역의 객체 ID를 지정하는 데 사용되며 통합 Extract에 적용됩니다. IO 테이블(오버플로우 영역 포함 또는 제외)의 경우 분할 영역 레벨 필터링에 인덱스 세그먼트 객체 ID를 사용해야 합니다. 이 경우 MAP 또는 TABLE 문의 PARTITIONOBJID는 추출할 분할 영역의 인덱스 세그먼트 객체 ID를 지정합니다.
구문
MAP/TABLE [container.]schema.table PARTITIONOBJID ptn_object_ID [, ptn_object_ID]
다음 제한이 적용됩니다.
-
와일드카드 테이블 이름은
PARTITIONOBJID를 포함하는MAP/TABLE매개변수에 허용되지 않습니다. -
DDLPARTITIONOBJID를 사용하는 경우 캡처 및 복제가 지원되지 않습니다.
IO 테이블 TABLE 문 구문:
TABLE [container.]schema.table PARTITIONOBJID index_segment_object_ID [, index_segment_object_ID]
IO 테이블 MAP 문 구문:
MAP [container.]schema.table PARTITIONOBJID index_segment_object_ID [, index_segment_object_ID]