데이터 매핑 및 변환
소스 테이블과 대상 테이블 간에 데이터를 통합하는 데 사용되는 작업, 기능, 명령 및 프로세스에 대해 알아봅니다.
매핑 및 데이터 통합을 제어하는 매개변수
Oracle GoldenGate가 수행하는 모든 데이터 선택, 매핑 및 조작은 TABLE 및 MAP 매개변수의 하나 이상의 옵션을 사용하여 수행됩니다.
-
Extract 매개변수 파일에서
TABLE를 사용합니다. -
Replicat 매개변수 파일에
MAP를 사용합니다.
TABLE 및 MAP는 매개변수 파일의 다른 매개변수에 의해 영향을 받는 데이터베이스 객체를 지정합니다. 이러한 매개변수에 객체 이름을 지정하는 방법에 대한 지침은 Oracle GoldenGate 입력에서 객체 이름 지정을 참조하십시오.
유사하지 않은 데이터베이스 간 매핑
데이터 구조가 서로 다른 테이블 간의 매핑 및 변환에는 소스 정의 파일, 대상 정의 파일 또는 두 파일 모두가 필요합니다. 유사하지 않은 데이터베이스 간 매핑은 자체 설명 트레일에 의해 제어되며 소스 또는 대상 열의 데이터 유형에 관계없이 열 이름으로 매핑됩니다.
자체 설명 트레일을 기반으로 하는 자동 매핑을 원하지 않거나 역호환성을 원할 경우 SOURCEDEFS 또는 TARGETDEFS를 사용할 수 있습니다.
NonStop 시스템의 매핑 및 변환
Windows 또는 UNIX 시스템에서 NonStop Enscribe 대상으로 데이터를 매핑하거나 변환하는 경우 Windows 또는 UNIX 소스 시스템에서 매핑 또는 변환을 수행해야 합니다. NonStop에 대한 Replicat는 세 부분 또는 두 부분 SQL 테이블 이름과 데이터 유형을 Enscribe 플랫폼에 사용되는 세 부분 파일 이름으로 변환할 수 없습니다. Extract는 Enscribe 이름 및 대상 데이터 유형을 사용하여 추적 데이터의 형식을 지정할 수 있습니다.
Windows 및 UNIX 시스템에서 매핑 및 변환
Oracle GoldenGate가 Windows 기반 및 UNIX 기반 시스템에서만 작동하는 경우 Extract 프로세스 또는 Replicat 프로세스에서 열 매핑 및 변환을 수행할 수 있습니다. Extract 프로세스에서 이 처리의 추가 오버헤드를 방지하기 위해 Replicat 프로세스 또는 중개 시스템에서 수행할 매핑 및 변환을 구성할 수 있습니다.
소스와 대상이 여러 개인 경우 소스에서 매핑 및 변환을 수행하는 것이 더 효율적일 수 있습니다.
데이터 매핑 시 Globalization 고려 사항
데이터베이스와 플랫폼 간의 데이터 매핑 및 변환을 계획할 때는 세계화 측면에서 Oracle GoldenGate가 지원하거나 지원하지 않는 사항을 고려하십시오.
Character Set 간 변환
Oracle GoldenGate는 소스 문자 집합과 대상 문자 집합이 서로 다른 경우 변환하므로 객체 이름과 열 데이터가 한 데이터베이스에서 다른 데이터베이스로 적절히 비교, 매핑 및 조작됩니다. 지원되는 문자 집합 목록은 지원되는 문자 집합을 참조하십시오.
한 데이터베이스에서 다른 데이터베이스로의 정확한 문자 표현을 보장하려면 다음 조건을 만족해야 합니다.
-
Target Database의 Character Set은 원본 데이터베이스의 Character Set에 해당하거나 상위집합이어야 합니다. 동등은 같지 않지만 문자 집합이 동일한 것을 의미합니다. 예를 들어, Shift-JIS와 EUC-JP는 기술적으로 완전히 같지 않지만 대부분의 경우 동일한 문자를 사용합니다.
-
클라이언트 응용 프로그램에서 다른 Character Set을 사용하는 경우 데이터베이스 Character Set도 클라이언트 응용 프로그램의 Character Set에 비해 상위집합이거나 동일해야 합니다.
-
Oracle을 포함한 많은 데이터베이스에서 문자를 Character Set에 속하지 않는 데이터베이스로 강제 적용할 수 있습니다. Oracle GoldenGate는 이 값을 부적합한 값으로 간주하며 데이터를 복제할 때 이 문자를 올바르게 매핑하지 않을 수 있습니다. 이러한 유형의 경우 Oracle GoldenGate에 대한 매개변수 및 함수 참조에 설명된 대로
REPLACEBADCHAR매개변수를 사용할 수 있습니다.
이 구성에서는 클라이언트나 소스 Character Set에서 로컬 데이터베이스 Character Set으로 변환할 때 모든 문자가 표시됩니다.
Replicat 프로세스는 하나의 소스 문자 집합에서 하나의 대상 문자 집합으로의 변환을 지원할 수 있습니다.
데이터베이스 객체 이름
Oracle GoldenGate는 소스 및 대상 데이터베이스의 문자 집합 인코딩에 따라 결정되는 고유 언어로 카탈로그, 스키마, 테이블 및 열 이름을 처리합니다. 이 지원은 데이터베이스 계층의 모든 레벨에서 사용 가능한 로케일을 고려하여 단일 바이트 및 멀티바이트 이름, 기호, 악센트 문자 및 대소문자 구분을 유지합니다.
열 데이터
Oracle GoldenGate는 데이터가 다음 열 유형에 포함된 경우 문자 집합 간의 열 데이터 변환을 지원합니다.
-
문자 유형 열:
CHAR/VARCHAR/CLOB- 다른 문자 집합의CHAR/VARCHAR/CLOB및CHAR/VARCHAR/CLOB-NCHAR/NVARCHAR/NCLOB. -
문자열 기반 숫자 및 날짜-시간 데이터를 포함하는 열입니다. 이러한 열의 변환은 z/OS EBCDIC 및 비z/OS ASCII 데이터 간에 수행됩니다. 이러한 경우 데이터가 호환되기 때문에 이 데이터의 ASCII 버전과 ASCII 버전 간에 또는 EBCDIC 버전과 EBCDIC 버전 간에 변환이 수행되지 않습니다.
주: Oracle GoldenGate는
0001-01-03 00:00:00에서9999-12-31 23:59:59까지의 시간 기록 데이터를 지원합니다. 시간 기록이 GMT에서 로컬 시간으로 변환되면 이러한 제한은 결과 시간 기록에도 적용됩니다. 0월, 0일 필드 또는 0일 값 모두가 지원되지 않습니다. 예를 들어, 0000-00-00 00:00:00과 같은 값이나 0개월 또는 0일 필드가 포함된 일자 값은 지원되지 않습니다.
열 데이터에 대한 문자 집합 변환은 Replicat MAP 매개변수의 COLMAP 또는 USEDEFAULTS 절에 있는 소스 열과 대상 열의 직접 매핑으로 제한됩니다. 직접 매핑은 내장 프로시저 또는 열 변환 함수를 사용하지 않는 이름 대 이름 매핑입니다. Replicat는 문자 집합 변환을 수행합니다. Extract가 변환을 수행하지 않습니다.
로케일 보존
Oracle GoldenGate는 대소문자를 구분하지 않는 객체 이름을 비교할 때 데이터베이스의 로케일을 고려합니다. 지원되는 로케일 목록은 지원되는 로케일을 참조하십시오.
이스케이프 시퀀스 지원
Oracle GoldenGate는 매개변수 파일에서 문자열 열, 리터럴 텍스트 또는 객체 이름을 나타내는 이스케이프 시퀀스 사용을 지원합니다. 제어 문자와 같은 필수 문자를 운영 체제에서 지원하지 않는 경우 또는 파라미터 파일에 사용할 수 없는 문자가 필요한 기타 목적을 위해 이스케이프 시퀀스를 사용할 수 있습니다.
제어 시퀀스는 매개변수 파일의 어느 곳에서나 사용할 수 있지만 TABLE 또는 MAP 문 내의 다음 요소에서 특히 유용합니다.
-
객체 이름
-
WHERE절 -
유니코드 문자를 유니코드 열에 지정하거나 고유 인코딩 문자를 열에 지정하려면
COLMAP절을 사용합니다. -
COLMAP절 내의 Oracle GoldenGate 열 변환 함수입니다.
Oracle GoldenGate는 다음 유형의 이스케이프 시퀀스를 지원합니다.
-
\uFFFF유니코드 이스케이프 시퀀스. 대리 쌍을 제외한 모든UNICODE코드 포인트를 사용할 수 있습니다. -
\3778진수 이스케이프 시퀀스 -
\xFF16진수 이스케이프 시퀀스
다음 규칙이 적용됩니다.
-
TABLE또는MAP에서 객체 이름 매핑에 사용되는 경우 제한 사항이 적용되지 않습니다. 예를 들어, 다음TABLE지정은 유효합니다.TABLE schema."\u3000ABC"; -
열 매핑 함수와 함께 사용할 경우 모든 코드 포인트를 사용할 수 있지만
NCHAR/NVARCHAR열에 대해서만 사용할 수 있습니다.CHAR/VARCHAR열의 경우 코드 포인트는 7비트 ASCII에 해당하는 것으로 제한됩니다. -
소스 및 대상 데이터 유형은 동일해야 합니다(예:
NCHAR-NCHAR). -
각 이스케이프 시퀀스는 역단위(코드 포인트
U+005C)와 문자 코드 포인트로 시작합니다. 솔리더를 백슬래시 기호라고 합니다. 파라미터 문 또는 열 변환 함수의 입력 문자열 내에서 실제 문자 대신 이스케이프 시퀀스를 사용합니다.주: 매개변수 파일에 실제 백슬래시를 지정하려면 이중 백슬래시를 지정하십시오. 예를 들어, 다음은
COL1: @STRFIND (COL1, '\' )에서 백슬래시를 찾습니다.
\uFFFF 유니코드 이스케이프 시퀀스 사용
-
\uFFFF유니코드 이스케이프 시퀀스는 소문자u로 시작하고 정확히 4개의 16진수로 시작해야 합니다. -
지원되는 범위는 다음과 같습니다.
-
0~9(U+0030~U+0039) -
A~F(U+0041~U+0046) -
a~f(U+0061~U+0066)
-
\u20ac는 유로 통화 기호에 대한 유니코드 이스케이프 시퀀스입니다.
주: 신뢰할 수 있는 플랫폼 간 지원을 위해서는 유니코드 제어 시퀀스를 사용하십시오. 10진수 및 16진수 이스케이프 시퀀스는 다른 운영 체제에서 표준화되지 않습니다.
377 옥탈 이스케이프 시퀀스 사용
-
정확히 3개의 8진수를 포함해야 합니다.
-
지원되는 범위:
-
첫 번째 숫자의 범위는
0~3(U+0030~U+0033)입니다. -
두 번째 및 세 번째 숫자의 범위는
0~7(U+0030~U+0037)입니다.
\200는 Microsoft Windows에서 유로 통화 기호에 대한 8진수 이스케이프 시퀀스입니다. -
xFF 16진수 이스케이프 등호 사용
-
소문자
x와 정확히 두 개의 16진수로 시작해야 합니다. -
지원되는 범위:
-
0~9(U+0030~U+0039) -
A~F(U+0041~U+0046) -
a~f(U+0061~U+0066)
-
\x80는 Microsoft Windows 1252 Latin1 코드 페이지의 유로 통화 기호에 대한 16진수 제어 시퀀스입니다.
TABLE 및 MAP를 사용하여 열 매핑
Oracle GoldenGate는 테이블 레벨 및 전역 레벨에서 열 매핑을 제공합니다. 명시적 열 매핑 규칙이 없는 경우에도 기본 열 매핑이 제공됩니다.
이 절에서는 열 매핑에 대한 다음 지침을 제공합니다.
열 이름에서 대소문자 및 특수 문자 지원
기본적으로 Oracle GoldenGate는 열 이름과 리터럴을 지정하기 위한 SQL-92 규칙을 따릅니다. Oracle GoldenGate 매개변수 파일, 변환 함수, 사용자 종료 및 명령에서 대소문자를 구분하기 위해 데이터베이스에서 큰 따옴표가 필요한 경우 대소문자를 구분하는 열 이름을 큰 따옴표로 묶어야 합니다. 따옴표가 필요하지 않은 대소문자를 구분하는 다른 데이터베이스의 경우 대소문자를 구분하는 열 이름은 데이터베이스에 저장되므로 지정해야 합니다. 리터럴은 작은 따옴표로 묶어야 합니다. 자세한 내용은 대소문자 구분 열 이름과 리터럴 구분을 참조하십시오.
COLMAP을 사용하여 테이블 레벨 열 매핑 구성
자체 설명 추적을 사용하는 경우 소스 객체의 모든 열이 대상 객체의 동일한 열 이름에 매핑됩니다. 소스와 대상 간에 다르거나 열을 변형해야 하는 경우 열 이름만 관리하면 됩니다.
그러나 자체 기술 트레일을 사용하지 않는 경우 기본 매핑은 열 이름이 아닌 열 순서로 수행됩니다. 따라서 소스의 열 1은 대상의 열 1, 열 2에서 열 2 등으로 매핑됩니다.
MAP 및 TABLE 매개변수의 COLMAP 옵션을 사용하여 다음을 수행할 수 있습니다.
-
개별 소스 열을 다른 이름을 가진 대상 열에 매핑합니다.
-
명시적 열 매핑이 필요하지 않은 경우 기본 열 매핑을 지정합니다.
-
소스 열에서 대상 열로 데이터를 선택, 매핑, 변환 및 이동하기 위한 지침을 제공합니다.
USEDEFAULTS를 사용하여 기본 열 매핑 활성화
COLMAP의 USEDEFAULTS 옵션을 사용하여 이름이 동일한 해당 소스 및 대상 열에 대해 자동 기본 열 매핑을 지정할 수 있습니다. USEDEFAULTS는 모든 대상 열을 명시적으로 매핑할 필요가 없어 시간을 절약할 수 있습니다.
기본 매핑으로 인해 Oracle GoldenGate가 해당 열을 매핑하고, 필요한 경우 데이터 정의 파일을 기반으로 데이터 유형을 변환합니다. 명시적 매핑 명령문으로 이미 매핑된 열에 대해서는 기본 매핑을 지정하지 마십시오.
열 매핑의 다음 예는 소스 테이블 ACCTBL 및 대상 테이블 ACCTTAB에 대한 기본 및 명시적 열 매핑의 사용을 보여줍니다. 다음과 같은 차이점을 제외하고 대부분의 열은 두 테이블에서 동일합니다.
-
소스 테이블에는
CUST_NAME열이 있는 반면 대상 테이블에는NAME열이 있습니다. -
소스 테이블의 10자리
PHONE_NO열은 대상 테이블의 별도AREA_CODE,PHONE_PREFIX및PHONE_NUMBER열에 해당합니다. -
소스 테이블의
YY, MM열과DD열은 대상 테이블의 단일TRANSACTION_DATE열에 해당합니다.
이러한 차이를 해결하기 위해 USEDEFAULTS는 유사한 열을 자동으로 매핑하는 데 사용되며, 명시적 매핑 및 변환 함수는 유사하지 않은 열에 사용됩니다.
다음 샘플은 MAP 및 TABLE 매개변수의 COLMAP 옵션을 사용하는 열 매핑을 보여줍니다. 소스 테이블 ACCTBL과 대상 테이블 ACCTTAB 간의 매핑에 대해 설명합니다.
MAP SALES.ACCTBL, TARGET SALES.ACCTTAB,
COLMAP ( USEDEFAULTS,
NAME = CUST_NAME,
TRANSACTION_DATE = @DATE ('YYYY-MM-DD', 'YY',YEAR, 'MM', MONTH, 'DD', DAY),
AREA_CODE = @STREXT (PHONE_NO, 1, 3),
PHONE_PREFIX = @STREXT (PHONE_NO, 4, 6),
PHONE_NUMBER = @STREXT (PHONE_NO, 7, 10)
)
;
표 3 샘플 열 매핑
| 매개변수 명령문 | 설명 |
|---|---|
COLMAP |
COLMAP 문을 시작합니다. |
USEDEFAULTS, |
대상 열 이름이 동일한 경우 소스 열을 있는 그대로 매핑합니다. |
NAME = CUST_NAME, |
소스 열 CUST_NAME을 대상 열 NAME에 매핑합니다. |
TRANSACTION_DATE = @DATE ('YYYY-MM-DD', 'YY', YEAR, 'MM', MONTH, 'DD', DAY), |
@DATE 열 변환 함수를 사용하여 소스 날짜 열에서 대상 열 TRANSACTION_DATE로 트랜잭션 날짜를 변환합니다. |
AREA_CODE = @STREXT (PHONE_NO, 1, 3), PHONE_PREFIX = @STREXT (PHONE_NO, 4, 6), PHONE_NUMBER = @STREXT (PHONE_NO, 7, 10)) ; |
@STREXT 열 변환 함수를 사용하여 소스 열 PHONE_NO을 AREA_CODE, PHONE_PREFIX 및 PHONE_NUMBER의 개별 대상 열로 변환합니다. |
기본 열 매핑에 대한 Oracle GoldenGate 뒤에 오는 규칙에 대한 자세한 내용은 기본 열 매핑 이해를 참조하십시오.
COLMAP 절에 매핑할 열 지정
COLMAP 구문은 다음과 같습니다.
COLMAP ([USEDEFAULTS, ] target_column = source_expression)
이 구문에서 target_column은 대상 열의 이름이고 source_expression입니다. source_expressions의 몇 가지 예는 다음과 같습니다.
-
소스 열의 이름입니다(예:
ORD_DATE). -
123와 같은 숫자 상수입니다. -
작은 따옴표로 묶인 문자열 상수(예:
'ABCD')입니다. -
Oracle GoldenGate 열 변환 함수를 사용하는 표현식입니다.
COLMAP문 내에서 Oracle GoldenGate 열 변환 함수를 사용하여 매핑된 열에 대한 데이터를 변환할 수 있습니다. 예를 들면 다음과 같습니다.@STREXT (COL1, 1, 3) -
다음은
BEFORE column_name를 사용하는 예입니다.BEFORE ORD_DATE -
다음은
AFTER column_name를 사용하는 예입니다.AFTER ORD_DATE. 열 이름이 나열되는 경우 이 옵션이 기본 옵션입니다.
열 매핑에 서로 다른 데이터베이스 유형의 대소문자를 구분하는 열이 포함된 경우 데이터베이스에 저장될 때 각 열을 지정합니다.
-
데이터베이스에서 대소문자를 구분하기 위해 큰따옴표가 필요한 경우 대소문자를 구분하는 열 이름을 큰따옴표로 묶어 지정하십시오.
-
데이터베이스에서 큰따옴표 없이 대소문자를 구분하는 경우 데이터베이스에 저장될 때 열 이름을 지정합니다.
다음은 Oracle AI Database의 대상 열과 대소문자 구분 SQL Server 데이터베이스의 소스 열 간의 매핑을 보여줍니다.
COLMAP ("ColA" = ColA)
Oracle GoldenGate에 이름을 지정하는 방법에 대한 자세한 내용은 Oracle GoldenGate 입력에서 객체 이름 지정을 참조하십시오.
문자 집합과 로케일이 다른 데이터베이스의 소스 및 대상 열을 매핑할 때의 전역화 고려 사항은 데이터 매핑 시 전역화 고려 사항을 참조하십시오.
COLMAP를 사용하여 값을 키 열에 매핑하지 마십시오(작업이 기본 키 업데이트로 설정됨). Oracle GoldenGate가 대상 행을 찾는 데 사용하는 WHERE 절은 키 열의 올바른 이전 이미지를 사용하지 않습니다. 대신 후 이미지를 사용합니다. SQLEXEC 문과 같은 키 열을 기반으로 하는 함수를 사용하는 경우 오류가 발생합니다.
열 매핑 제한 사항
다음은 열 매핑 제한 사항입니다.
-
LOB열은FILTER,WHERE열 또는COLMAP문에서source_expression로 사용할 수 없습니다.LOB열은BLOB,CLOB,NCLOB,XMLType, 사용자 정의 데이터 유형, 중첩 테이블,VARRAYs및 기타 특수 데이터 유형입니다. -
소스 열이 4000바이트를 초과하는 경우 값이 추적에
LOB레코드로 저장되므로 변환 루틴에 사용할 수 없습니다. 예를 들어, Oracle에서VARCHAR2(4000 CHAR) 및 일본어 문자 집합은 각 문자에 대해 3바이트로 저장됩니다. 즉, 열의 길이는 12000바이트이고 Oracle GoldenGate는 이 값을LOB필드로 저장합니다. -
Oracle GoldenGate가 실행할 전체 SQL 문의 크기는 4MB를 초과합니다. 예를 들어, 수천 개의
VARCHAR2(4000)열이 있는 테이블이 있고 각각에 4000바이트를 넣으려는 경우 Oracle GoldenGate가 실행할 총 SQL 문이 최대 크기인 4MB를 초과할 수 있습니다.
COLMATCH를 사용하여 전역 열 매핑 구성
COLMATCH 매개변수를 사용하여 열 매핑에 대한 전역 규칙을 생성합니다. COLMATCH를 사용하면 동일한 데이터 집합에 대해 서로 다른 열 이름을 가진 유사하게 구조화된 테이블 간에 매핑할 수 있습니다. COLMATCH는 개별 TABLE 또는 MAP 문에서 COLMAP 절과 함께 테이블 레벨 매핑을 사용하는 것보다 이 유형의 열을 매핑하는 더 편리한 방법을 제공합니다.
대소문자 구분은 다음과 같이 지원됩니다.
-
MySQL의 경우 데이터베이스가 대소문자를 구분하는 경우
COLMATCH는 이름이 따옴표로 지정되어 있는지 여부에 관계없이 정확한 대소문자와 이름 일치를 찾습니다. -
Oracle AI Database 및 Db2 데이터베이스의 경우, 동일한 데이터베이스에서 이름은 대소문자를 구분하거나 대소문자를 구분하지 않으며 대소문자를 구분하지 않으려면 큰따옴표가 필요합니다.
COLMATCH는 데이터베이스에서 이름이 따옴표로 묶인 경우 대소문자와 이름이 정확히 일치해야 합니다.
구문
COLMATCH
{NAMES target_column = source_column |
PREFIX prefix |
SUFFIX suffix |
RESET}
| 인수 | 설명 |
|---|---|
NAMES target_column = source_column |
열 이름을 기반으로 매핑됩니다. 대소문자를 구분하고 데이터베이스에서 대소문자를 구분하기 위해 따옴표가 필요한 경우 열 이름을 큰 따옴표로 묶습니다. 이러한 데이터베이스 유형의 경우 따옴표로 묶이지 않은 열 이름은 Oracle GoldenGate에서 대소문자를 구분하지 않는 것으로 처리됩니다. 따옴표 없이 대소문자 구분을 지원하는 데이터베이스의 경우 데이터베이스에 저장될 때 열 이름을 지정합니다. COLMATCH가 서로 다른 데이터베이스 유형의 열 사이에 있을 경우 이름이 각 열에 대해 적절한 대소문자를 나타내는지 확인합니다. 예를 들어, 다음은 Oracle AI Database에서 대소문자를 구분하는 대상 열 이름 "aBc" 및 대소문자를 구분하는 SQL Server 데이터베이스 COLMATCH NAMES "aBc" = aBc에서 대소문자를 구분하는 소스 열 이름 aBc를 지정합니다. |
PREFIX prefix / SUFFIX suffix |
지정된 이름 접두어 또는 접미어를 무시합니다. 데이터베이스에서 대소문자 구분을 적용하기 위해 따옴표가 필요한 경우 접두어 또는 접미어를 큰 따옴표로 묶습니다(예: "P_"). 이러한 데이터베이스 유형의 경우 따옴표로 묶이지 않은 접두어 또는 접미어는 대소문자를 구분하지 않습니다. 따옴표 없이 대소문자 구분을 지원하는 데이터베이스의 경우 데이터베이스에 저장될 때 접두어 또는 접미어를 지정합니다. 예를 들어, "P_"는 대문자 P 접두어를 지정합니다. 다음 예에서는 무시할 대소문자를 구분하지 않는 접두어를 지정합니다. COLMATCH PREFIX p_. 대상 열 이름 P_ABC은 소스 열 이름 ABC에 매핑되고 대상 열 이름 P_abc은 소스 열 이름 abc에 매핑됩니다. 다음 예에서는 무시할 대소문자 구분 접미어를 지정합니다. SUFFIX "_k". 대상 열 이름 ABC_k은 소스 열 이름 ABC에 매핑되고 대상 열 이름 "abc_k"은 소스 열 이름 abc에 매핑됩니다. |
RESET |
이후에 정의된 TABLE 또는 MAP 문에 대해 이전에 정의된 COLMATCH 규칙을 해제합니다. |
다음 예에서는 COLMATCH. 를 사용할 시기를 보여줍니다.소스 테이블과 대상 테이블은 동일합니다. 단, 약간 다른 테이블과 names.The 열 데이터베이스는 대소문자를 구분하지 않습니다.
| ACCT 테이블 | ORD 테이블 |
|---|---|
CUST_CODE CUST_NAME CUST_ADDR PHONE S_REP S_REPCODE |
CUST_CODE CUST_NAME ORDER_ID ORDER_AMT S_REP S_REPCODE |
| ACCOUNT 테이블 | ORDER 테이블 |
|---|---|
CUSTOMER_CODE CUSTOMER_NAME CUSTOMER_ADDRESS PHONE REP REPCODE |
CUSTOMER_CODE CUSTOMER_NAME ORDER_ID ORDER_AMT REP REPCODE |
이 예제의 대상 열에 소스 열을 매핑하고 다른 테이블에 대한 후속 맵을 처리하기 위한 구문은 다음과 같습니다.
COLMATCH NAMES CUSTOMER_CODE = CUST_CODE
COLMATCH NAMES CUSTOMER_NAME = CUST_NAME
COLMATCH NAMES CUSTOMER_ADDRESS = CUST_ADDR
COLMATCH PREFIX S_
MAP SALES.ACCT, TARGET SALES.ACCOUNT, COLMAP (USEDEFAULTS);
MAP SALE.ORD, TARGET SALES.ORDER, COLMAP (USEDEFAULTS);
COLMATCH RESET
MAP SALES.REG, TARGET SALE.REG;
MAP SALES.PRICE, TARGET SALES.PRICE;
예제의 규칙에 따라 다음이 수행됩니다.
-
데이터는 소스
ACCT및ORD테이블의CUST_CODE열에서 대상ACCOUNT및ORDER테이블의CUSTOMER_CODE열로 매핑됩니다. -
S_접두어가 무시됩니다. -
PHONE및ORDER_AMT열과 같이 이름이 동일한 열은 명시적 규칙 없이USEDEFAULTS를 통해 자동으로 매핑됩니다. 자세한 내용은 기본 열 매핑 이해를 참조하십시오. -
이전 전역 열 매핑은
REG및PRICE테이블에 대해 해제됩니다. 해당 테이블의 소스 열과 대상 열은 모두 동일하기 때문에 자동으로 매핑됩니다.
기본 열 매핑 이해
자체 설명 추적의 경우 명시적 열 매핑이 존재하지 않을 경우 COLMATCH 또는 COLMAP를 사용하여 Oracle GoldenGate는 기본적으로 다음 규칙에 따라 소스 및 대상 열을 매핑합니다.
SOURCEDEFS 또는 TARGETDEFS를 사용하는 경우에는 적용되지 않습니다.
-
이름과 대소문자가 대상 열의 이름과 정확히 일치하는 소스 열이 발견되면 두 열이 매핑됩니다.
-
대소문자 일치가 발견되지 않으면 폴백 이름 매핑이 사용됩니다. 폴백 매핑은 대소문자를 구분하지 않는 대상 테이블 매핑을 수행하여 일치하는 이름을 찾습니다. 정확한 열 이름 일치는 대문자 이름을 사용하여 적용됩니다. 이 동작은
GLOBALS매개변수NAMEMATCHIGNORECASE에 의해 제어됩니다.NAMEMATCHEXACT매개변수와 일치하는 폴백 이름을 사용 안함으로 설정하거나NAMEMATCHNOWARNING매개변수를 사용하여 경고 메시지와 함께 사용으로 설정할 수 있습니다. -
소스 열에 해당하지 않는 대상 열은 데이터베이스에 의해 결정된 기본값을 사용합니다.
기본 매핑을 수행할 수 없는 경우 대상 열은 다음 표에 표시된 값 중 하나로 기본 설정됩니다.
| 열 유형 | 값 |
|---|---|
| 숫자 | 제로(0) |
문자 또는 VARCHAR |
공백 |
| 날짜 또는 날짜 시간 | 현재 일자 및 시간 |
NULL 값을 사용할 수 있는 열 |
널 |
데이터 유형 변환
Oracle GoldenGate가 데이터 유형을 매핑하는 방법에 대해 알아봅니다.
숫자 컬럼
숫자 열은 대상 열의 유형 및 배율과 일치하도록 변환됩니다. 대상 열의 배율이 소스의 배율보다 작으면 오른쪽에서 숫자가 잘립니다. 대상 열의 배율이 소스의 배율보다 크면 숫자가 오른쪽에 0으로 채워집니다.
자세한 내용을 보려면 REPLACEBADNUM 매개변수를 사용하여 숫자 열을 매핑할 때 발생한 부적합한 숫자 데이터에 대한 대체 값을 지정할 수 있습니다.
문자 유형 열
문자 유형 열은 VARCHAR, 문자열 형식의 숫자, 문자열 형식의 날짜 및 시간, 문자열 리터럴과 같은 문자 기반 데이터 유형을 사용할 수 있습니다. 대상 열의 배율이 소스의 배율보다 작으면 오른쪽에서 열이 잘립니다. 대상 열의 배율이 소스의 배율보다 크면 열이 오른쪽에 공백으로 채워집니다.
리터럴은 작은 따옴표로 묶어야 합니다.
REPLACEBADCHAR 매개변수를 사용하여 문자 열을 매핑할 때 소스 또는 대상 문자 집합에 대해 적합한 코드 지점이 없을 경우 Oracle GoldenGate 프로세스의 응답을 제어할 수 있습니다.
Datetime 열
Datetime (DATE, TIME 및 TIMESTAMP) 열은 문자열 리터럴뿐만 아니라 datetime 및 문자 열도 사용할 수 있습니다. 리터럴은 작은 따옴표로 묶어야 합니다. 문자 열을 날짜/시간 열에 매핑하려면 Oracle GoldenGate 외부 SQL 형식 YYYY-MM-DD HH:MI:SS.FFFFFF.를 준수하는지 확인하십시오.
Oracle GoldenGate는 0001-01-03 00:00:00에서 9999-12-31 23:59:59까지의 시간 기록 데이터를 지원합니다. 시간 기록이 GMT에서 로컬 시간으로 변환되면 이러한 제한은 결과 시간 기록에도 적용됩니다. 시간대에 따라 변환에서 시간을 더하거나 뺄 수 있으므로 시간기록이 지원되는 하한 또는 상한을 초과할 수 있습니다.
필요한 정밀도는 데이터 유형 및 대상 플랫폼에 따라 다릅니다. 대상 열의 배율이 소스의 배율보다 작으면 오른쪽에서 데이터가 잘립니다. 대상 열의 배율이 소스 열의 배율보다 큰 경우 열은 현재 날짜 및 시간 값으로 오른쪽에 확장됩니다.
행 선택 및 필터링
필터링은 Oracle GoldenGate에 사용 가능한 열에서만 수행할 수 있습니다. TRANLOG Extract Oracle GoldenGate에서는 리두 로그 및 데이터베이스에 있는 모든 열에 액세스할 수 있습니다. 리두 로그에 열이 없는 경우 해당 열을 필터링하려면 FETCHCOLS를 사용하여 명시적으로 인출해야 합니다. Extract 펌프 및 Replicat에서 열을 트레일 파일에서 사용할 수 있어야 합니다. 따라서 FILTER 또는 WHERE 절에서 사용할 열은 ADD TRANDATA COLS를 사용하여 명시적으로 기록되어야 하며 기본값인 LOGALLSUPCOLS를 유지해야 합니다.
추출 또는 복제를 위해 행을 필터링하거나 선택하려면 TABLE 및 MAP 매개변수의 FILTER 및 WHERE 절을 사용합니다.
FILTER 절은 Oracle GoldenGate 열 변환 함수를 사용할 수 있는 반면 WHERE 절은 기본 WHERE 연산자를 사용할 수 있으므로 WHERE 절보다 더 많은 기능을 제공합니다.
FILTER 절을 사용하여 행 선택
기본 연산자 또는 하나 이상의 Oracle GoldenGate 열 변환 함수를 사용하여 숫자 값을 기반으로 행을 선택하려면 FILTER 절을 사용합니다.
주: 문자열을 기반으로 열을 필터링하려면 Oracle GoldenGate 문자열 함수 중 하나를 사용하거나 WHERE 절을 사용하십시오.
TABLE 문에서 FILTER에 대한 구문은 다음과 같습니다.
TABLE source_table
, FILTER (
[, ON INSERT | ON UPDATE| ON DELETE]
[, IGNORE INSERT | IGNORE UPDATE | IGNORE DELETE]
, filter_clause);
MAP 문에서 FILTER에 대한 구문은 다음과 같으며 오류 처리 옵션을 포함합니다.
MAP source_table, TARGET target_table,
, FILTER (
[, ON INSERT | ON UPDATE| ON DELETE]
[, IGNORE INSERT | IGNORE UPDATE | IGNORE DELETE]
[, RAISEERROR error_number]
, filter_clause);
유효한 FILTER 절 요소는 다음과 같습니다.
-
Oracle GoldenGate 열 변환 함수입니다. 이러한 함수는 테스트를 수행하고, 데이터를 조작하고, 값을 검색하는 등의 작업을 수행할 수 있도록 Oracle GoldenGate에 내장되어 있습니다. Oracle GoldenGate 변환 함수에 대한 자세한 내용은 데이터 테스트 및 변환을 참조하십시오.
-
숫자
-
숫자를 포함하는 열
-
숫자를 반환하는 함수
-
산술 연산자:
-
+(플러스) -
-(빼기) -
*(다중) -
/(나누기) -
%(나머지)
-
-
비교 연산자
-
>(초 초과) -
>=(크거나 같음) -
<(미만) -
<=(작거나 같음) -
=(같음) -
<>(같지 않음) -
비교에서 파생된 결과는 0(
FALSE표시) 또는 0이 아닌(TRUE표시)일 수 있습니다.
-
-
괄호(표현식에서 결과 그룹화용)
-
결합 연산자:
AND,OR
다음 FILTER 옵션을 사용하여 필터 절이 영향을 주는 SQL 작업을 지정합니다. 이러한 옵션 중 하나를 결합할 수 있습니다.
ON INSERT | ON UPDATE | ON DELETE IGNORE INSERT | IGNORE UPDATE | IGNORE DELETE
MAP 매개변수에서 FILTER의 RAISEERROR 옵션을 사용하여 필터가 실패할 때 사용자 정의 오류를 생성합니다. 이 옵션은 실패에 대한 응답으로 이벤트를 트리거해야 하는 경우에 유용합니다.
FILTER 절 내에서 @RANGE 함수를 사용하여 처리 작업 로드를 여러 MAP 또는 TABLE 문으로 분산합니다.
다음은 샘플입니다.
REPERROR (9999, EXCEPTION)
MAP OWNER.SRCTAB, TARGET OWNER.TARGTAB,
SQLEXEC (ID CHECK, ON UPDATE, QUERY ' SELECT COUNT FROM TARGTAB WHERE PKCOL = :P1 ', PARAMS (P1 = PKCOL)),
FILTER (BALANCE > 15000),
FILTER (ON UPDATE, @BEFORE (COUNT) = CHECK.COUNT)
;
MAP OWNER.SRCTAB, TARGET OWNER.TARGEXC,
EXCEPTIONSONLY,
COLMAP ( USEDEFAULTS,
ERRTYPE = 'UPDATE FILTER FAILED'
)
;
표 4: 다중 FILTER 문 사용
| 매개변수 파일 | 설명 |
|---|---|
REPERROR (9999, EXCEPTION) |
지정된 오류에 대한 예외를 발생시킵니다. |
MAP OWNER.SRCTAB, TARGET OWNER.TARGTAB, |
MAP 문을 시작합니다. |
SQLEXEC (ID CHECK, ON UPDATE, QUERY ' SELECT COUNT FROM TARGTAB ' 'WHERE PKCOL = :P1 ', PARAMS (P1 = PKCOL)), |
갱신이 발생할 때마다 COUNT 열의 현재 값을 검색하는 query를 수행합니다. FILTER 절을 처리하기 전에 질의 또는 내장 프로시저를 실행할 수 있는 BEFOREFILTER 옵션도 있습니다. 이렇게 하면 SQLEXEC 부분의 값을 런타임 시 FILTER 내에서 사용할 수 있습니다. |
FILTER (BALANCE > 15000), |
FILTER 절을 사용하여 잔액이 15000보다 큰 행을 선택합니다. |
FILTER (ON UPDATE, @BEFORE (COUNT) = CHECK.COUNT) |
다른 FILTER 절을 사용하여 대상 업데이트를 적용하기 전에 업데이트 전 소스 COUNT 열의 값이 대상 열의 값과 일치하는지 확인합니다. |
; |
세미콜론은 MAP 문을 종료합니다. |
MAP OWNER.SRCTAB, TARGET OWNER.TARGEXC, EXCEPTIONSONLY, COLMAP (USEDEFAULTS, ERRTYPE = 'UPDATE FILTER FAILED'); |
예외 MAP 문을 지정합니다. 오류 9999에 대한 REPERROR 절은 예외가 TARGEXC에 매핑되도록 합니다. |
예제 9-5 @COMPUTE 함수 호출
다음 예제는 @COMPUTE 함수를 호출하여 가격을 곱한 금액이 10,000을 초과하는 레코드를 추출합니다.
MAP SALES.TCUSTORD, TARGET SALES.TORD,
FILTER (@COMPUTE (PRODUCT_PRICE * PRODUCT_AMOUNT) > 10000);
예제 9-6 @STREQ 함수 호출
다음은 @STREQ 함수를 사용하여 문자 열의 값이 'JOE'.인 레코드를 추출합니다.
TABLE ACCT.TCUSTORD, FILTER (@STREQ ("Name", 'joe') > 0);
예 9-7 레코드 선택
다음은 AMOUNT 열이 50보다 큰 레코드를 선택하고 UPDATE 및 DELETE 작업에서 필터를 실행합니다.
TABLE ACT.TCUSTORD, FILTER (ON UPDATE, ON DELETE, AMOUNT > 50);
@RANGE 함수를 사용한 예제 9-8
(복제 그룹 1 매개변수 파일)
MAP sales.acct, TARGET sales.acct, FILTER (@RANGE (1, 2, ID));
(복제 그룹 2 매개변수 파일)
MAP sales.acct, TARGET sales.acct, FILTER (@RANGE (2, 2, ID));
Replicat 매개변수 파일의 일부를 보여주는 표 9-4에 표시된 것처럼 하나의 MAP 또는 TABLE 문에서 여러 FILTER 절을 결합할 수 있습니다. Oracle GoldenGate는 필터가 실패하거나 모두 전달될 때까지 나열된 순서대로 필터를 실행합니다. 한 필터가 실패하면 모두 실패합니다.
WHERE 절을 사용하여 행 선택
WHERE 절에서 표 9-5의 요소를 사용하여 조건문을 기반으로 행(또는 둘 다)을 선택하거나 제외합니다. 각 WHERE 절은 괄호로 묶어야 합니다. 리터럴은 작은 따옴표로 묶어야 합니다.
표 5 허용되는 WHERE 연산자
| 항목 | 예제 |
|---|---|
| 열 이름 | PRODUCT_AMT |
| 숫자 값입니다. | -123, 5500.123 |
| 리터럴 스트링 | 'AUTO', 'Ca' |
| 내장 열 테스트 | @NULL, @PRESENT, @ABSENT(열이 널이거나 행에 존재하거나 존재하지 않음) 이러한 테스트는 Oracle GoldenGate에 내장되어 있습니다. FILTER 및 WHERE로 행 선택에 대한 고려 사항을 참조하십시오. |
| 비교 연산자입니다 | =, <>, >, <, >=, <= |
| 결합 연산자 | AND, OR |
| 그룹화 괄호 | 여러 요소의 논리적 그룹화에 대해 열기 및 닫기 괄호( )를 사용합니다. |
Oracle GoldenGate는 로컬 운영 체제의 문자 집합과 호환되지 않는 멀티바이트 문자 집합 또는 문자 집합이 있는 열에 대해서는 FILTER를 지원하지 않습니다.
산술 연산자 및 부동 소수점 데이터 유형은 WHERE에서 지원되지 않습니다. 더 복잡한 선택 조건을 사용하려면 FILTER 절 또는 User Exit 루틴을 사용합니다.
WHERE에 대한 구문은 TABLE 및 MAP 문에서 동일합니다.
TABLE table, WHERE (clause);
MAP source_table, TARGET target_table, WHERE (clause);
FILTER 및 WHERE에서 행 선택 시 고려 사항
다음 제안은 성공적인 선택 조항을 생성하는 데 도움이 될 수 있습니다. 주: 이 섹션의 예에서는 대소문자를 구분하지 않는 데이터베이스를 가정합니다.
필터에 대한 데이터 가용성 보장
데이터베이스가 변경된 열의 값만 트랜잭션 로그에 기록하는 경우 변경되지 않은 열 중 하나라도 선택 조건에서 참조되는 경우 오류가 발생할 수 있습니다. Oracle GoldenGate는 이러한 행 작업을 무시하고 폐기 파일에 출력한 다음 경고를 표시합니다.
열 누락 오류를 방지하려면 다음과 같이 선택 조건을 만듭니다.
-
가능한 경우 기본 키 열만 선택 조건으로 사용합니다.
-
해당 열에 대해 보완 로깅을 활성화하여 필요한 열 값을 제공합니다. 또는
TABLE매개변수의FETCHCOLS또는FETCHCOLSEXCEPT옵션을 사용할 수 있습니다. 이러한 옵션은 지원되는 모든 데이터베이스에 유효합니다. 로그에 값이 없는 경우 해당 값을 패치(fetch)하도록 데이터베이스를 query합니다.FILTER또는WHERE절이 실행되기 전에 값을 검색하려면FILTER또는WHERE절 앞에TABLE문에FETCHBEFOREFILTER옵션을 포함합니다. 예:
TABLE DEMO.PEOPLE, FETCHBEFOREFILTER, FETCHCOLS (age), FILTER (age > 50);
- 먼저 열의 존재를 테스트한 다음 열 값을 테스트합니다. 열의 존재를 테스트하려면 다음 구문을 사용합니다.
column_name {= | <>} {@PRESENT | @ABSENT}
다음 예에서는 amount 열이 10,000을 초과할 때 모든 레코드를 반환하고 amount가 없을 때 레코드가 폐기되지 않도록 합니다.
WHERE (amount = @PRESENT AND amount > 10000)
열 값 비교
비교에 사용되는 요소가 일치하는지 확인하려면 적절한 열 유형을 비교합니다.
-
리터럴 문자열에 대한 문자 열
-
숫자 값에 대한 숫자 열로, 기호 및 소수점을 포함할 수 있습니다.
-
열이 응용 프로그램에 의해 검색되는 형식을 사용하는 날짜 및 시간 열의 리터럴 문자열
NULL 값 테스트
NULL 값에 대한 열을 평가하려면 다음 구문을 사용합니다.
column {= | <>} @NULL
다음은 열 값이 NULL인 경우 TRUE를 반환하므로 행을 복제합니다. 다른 모든 경우(레코드에서 누락된 열 포함)에 대해 FALSE를 반환합니다.
WHERE (amount = @NULL)
다음은 열이 레코드에 있고 NULL이 아닌 경우에만 TRUE를 반환합니다.
WHERE (amount = @PRESENT AND amount <> @NULL)
주: 추적의 값이 4000바이트를 초과할 경우 @NULL 함수는 TRUE를 반환합니다.
이전 및 이후 값 검색
업데이트 및 삭제 작업의 경우 소스 열의 BEFORE 값(업데이트 전 값)을 검색하는 것이 유용할 수 있습니다. 삽입의 경우 모든 열 값은 AFTER 이미지로 간주됩니다.
이러한 값은 추적에 저장되며 필터 및 열 매핑에 사용할 수 있습니다. 예를 들어 다음을 수행할 수 있습니다.
-
예외
MAP문에서 열 매핑 사양의 일부로 행의 이전 이미지를 검색하고 충돌 해결 루틴 테스트 또는 문제 해결에 사용할 수 있도록 해당 값을 예외 테이블에 매핑합니다. -
델타 계산을 수행합니다. 예를 들어 테이블에
Balance열이 있는 경우 다음 예에서와 같이 새 잔액에서 원래 잔액을 빼서 특정 트랜잭션의 순 결과를 계산할 수 있습니다.MAP "owner"."src", TARGET "owner"."targ", COLMAP (PK1 = PK1, delta = balance - @BEFORE (balance));주: 이전 예제는 Oracle과 같이 대소문자를 구분하는 데이터베이스를 나타냅니다. 테이블 이름은 대소문자 구분을 반영하기 위해 따옴표로 묶입니다.
이전 값 참조
-
다음과 같이
@BEFORE열 변환 함수를 이전 값을 원하는 열의 이름과 함께 사용합니다.@BEFORE (column_name) -
추출 매개변수 파일의
GETUPDATEBEFORES매개변수를 사용하여 트랜잭션 레코드에서 이전 이미지를 캡처하거나, Replicat 매개변수 파일에서 이 매개변수를 사용하여 열 매핑 또는 필터에서 이전 이미지를 사용합니다. CDR(충돌 해결 및 감지) 기능을 사용하는 경우TABLE의GETBEFORECOLS옵션을 사용할 수 있습니다. 이러한 매개변수를 사용하려면 모든 열이 트랜잭션 로그에 있어야 합니다. 데이터베이스가 변경된 열의 값만 기록하는 경우@BEFORE함수를 사용하면 "열 누락" 조건이 발생할 수 있으며 열이 레코드에 없는 것처럼 열 맵이 실행됩니다. 열 값을 사용할 수 있는지 확인하려면 필터에 대한 데이터 가용성 확인을 참조하십시오.또한 Oracle GoldenGate는 필터링, 변환 함수 또는 기타 목적에 필요한 경우 이후 값을 검색하는
@AFTER함수를 제공합니다. Oracle GoldenGate용 매개변수 및 함수 참조의@BEFORE및@AFTER를 참조하십시오.
열 선택
Oracle GoldenGate에서 추출할 소스 테이블의 열을 제어하려면 TABLE 매개변수의 COLS 및 COLSEXCEPT 옵션을 사용합니다. COLS를 사용하여 추출할 열을 선택하고, COLSEXCEPT를 사용하여 COLSEXCEPT에서 지정한 열을 제외한 모든 열을 선택합니다.
추출되는 열을 제한하는 것은 대상 테이블에 소스 테이블과 동일한 열이 없거나 열에 개인 식별 번호나 기타 고유 업무 정보와 같은 중요한 정보가 포함된 경우 유용합니다.
SQL 작업 선택 및 변환
기본적으로 Oracle GoldenGate는 INSERT, UPDATE 및 DELETE 작업을 캡처하고 적용합니다. Extract 또는 Replicat 매개변수 파일에서 다음 매개변수를 사용하여 삽입만 또는 삽입 및 업데이트만과 같이 처리되는 작업 종류를 제어할 수 있습니다.
GETINSERTS | IGNOREINSERTS
GETUPDATES | IGNOREUPDATES
GETDELETES | IGNOREDELETES
Replicat 매개변수 파일에서 다음 매개변수를 사용하여 SQL 작업의 한 유형을 다른 유형으로 변환할 수 있습니다.
-
INSERTUPDATES를 사용하여 소스 업데이트 작업을 대상 테이블에 삽입으로 변환합니다. 이 기능은 해당 테이블의 트랜잭션 기록을 유지 관리하는 데 유용합니다. 트랜잭션 로그 레코드는 변경된 값뿐만 아니라 테이블의 모든 열 값을 포함해야 합니다. 일부 데이터베이스는 전체 행 값을 해당 트랜잭션 로그에 기록하지 않고 변경된 값만 기록합니다. -
INSERTDELETES를 사용하여 모든 소스 삭제 작업을 대상 테이블에 삽입으로 변환합니다. 이 기능은 원본 데이터베이스에 있었던 모든 레코드의 기록을 보존하는 데 유용합니다. -
UPDATEDELETES를 사용하여 소스 삭제를 대상의 업데이트로 변환합니다.
트랜잭션 기록 사용
Oracle GoldenGate를 사용하면 대상 레코드에 대한 변경 내역을 유지하고 각 변경을 일으킨 작업에 대한 정보를 매핑할 수 있습니다. 이 기록은 각 레코드의 최신 버전만 포함하는 대신 테이블에서 수행되는 모든 작업에 대해 별도의 레코드를 포함하는 트랜잭션 기반 보고 시스템을 생성하는 데 유용할 수 있습니다.
예를 들어, CUSTOMER이라는 대상 테이블에 대해 수행된 다음 일련의 작업은 ID Dave의 추적을 남기지 않습니다. 마지막 작업은 레코드를 삭제하므로 Dave의 계정 기록이나 기말 잔액을 찾을 수 없습니다.
테이블 CUSTOMER에 대한 테이블 6 작업 내역
| 순서 | 작업 | ID | BALANCE |
|---|---|---|---|
1 |
Insert |
Dave |
1000 |
2 |
Update |
Dave |
900 |
3 |
Update |
Dave |
1250 |
4 |
Delete |
Dave |
1250 |
이 내역을 일련의 레코드로 유지하는 것은 여러 가지 방법으로 유용할 수 있습니다. 예를 들어, 트랜잭션의 순 효과를 생성할 수 있습니다.
트랜잭션 보고를 구현하려면
-
Extract가 이전 값을 캡처하도록 준비하려면 Extract 매개변수 파일에서
GETUPDATEBEFORES매개변수를 사용합니다. 이전 값(또는 이전 이미지)은 갱신이 수행되기 전의 기존 열 값입니다. 이전 이미지를 통해 Oracle GoldenGate가 트랜잭션 레코드를 생성할 수 있습니다. -
모든 작업을 삽입으로 게시하도록 Replicat를 준비하려면 Replicat 매개변수 파일에서
INSERTALLRECORDS매개변수를 사용합니다. 테이블의 각 작업은 해당 테이블의 새 레코드가 됩니다. -
트랜잭션 내역을 매핑하려면
@GETENV열 변환 함수의GGHEADER옵션 반환 값을 사용합니다.TABLE또는MAP매개변수의COLMAP문에 변환 함수를 소스 표현식으로 포함합니다.
표 9-6에 표시된 샘플 트랜잭션 시리즈를 사용하여 데이터베이스의 최신 상태가 아닌 더 많은 트랜잭션 중심 고객 뷰를 생성하도록 다음 매개변수 구성을 생성할 수 있습니다.
| 프로세스 | 파라미터 문 |
|---|---|
| Extract | GETUPDATEBEFORES TABLE ACCOUNT.CUSTOMER; |
| Replicat | INSERTALLRECORDS MAP SALES.CUSTOMER, TARGET SALES.CUSTHIST, COLMAP (TS = @GETENV ('GGHEADER', 'COMMITTIMESTAMP'), BEFORE_AFTER = @GETENV ('GGHEADER', 'BEFOREAFTERINDICATOR'), OP_TYPE = @GETENV ('GGHEADER', 'OPTYPE'), ID = ID, BALANCE = BALANCE); |
주: Oracle GoldenGate 프로세스에 대한 전체 매개변수 파일을 나타내는 것은 아닙니다. 또한 이러한 예제는 대소문자를 구분하지 않는 데이터베이스를 나타냅니다.
이 구성을 사용하면 트랜잭션 시간 및 고객 ID와 함께 각 트랜잭션의 순 합계를 반환하는 다음과 같은 query를 수행할 수 있습니다.
SELECT AFTER.ID, AFTER.TS, AFTER.BALANCE - BEFORE.BALANCE
FROM CUSTHIST AFTER, CUSTHIST BEFORE
WHERE AFTER.ID = BEFORE.ID AND AFTER.TS = BEFORE.TS AND
AFTER.BEFORE_AFTER = 'A' AND BEFORE.BEFORE_AFTER = 'B';