@RANGE

@RANGE 함수를 사용하여 테이블의 행을 두 개 이상의 Oracle GoldenGate 프로세스로 나눕니다. Materialized view을 사용하여 많이 액세스하는 대형 테이블의 처리량을 늘릴 수 있으며 다른 대상에 분산하기 위한 집합으로 데이터를 나누는 데에도 사용할 수 있습니다. TABLE 또는 MAP 문에서 FILTER 절의 각 범위를 지정합니다.

@RANGE는 안전하고 확장 가능합니다. 또한 동일한 행이 항상 동일한 프로세스 그룹에 의해 처리되도록 보장함으로써 데이터 무결성을 유지합니다. 행이 분할 영역을 다른 프로세스 그룹으로 이동하지 않고 DML가 올바른 순서로 수행되도록 하려면 프로세스 실행 중 @RANGE 분할의 기반이 되는 열이 변경되지 않아야 합니다. 분할 영역 열을 업데이트하면 "행을 찾을 수 없음" 오류 또는 고유한 제약 조건 오류가 발생할 수 있습니다.

@RANGE는 입력에 지정된 열의 해시 값을 계산합니다. 열이 지정되지 않은 경우 KEYCOLS 절이 있을 경우 TABLE 또는 MAP 문의 KEYCOLS 절을 사용하여 해시할 열을 결정합니다. 그렇지 않으면 Primary Key 열이 사용됩니다.

Oracle GoldenGate는 총 범위 수를 조정하여 지정된 범위 수에 걸쳐 균등한 분포를 최적화합니다.

이 함수에 대해 열을 지정할 수 있으므로 관계형 제약 조건이 있는 테이블의 행은 참조 무결성을 유지하기 위해 동일한 프로세스 또는 트레일로 함께 그룹화되어야 합니다.

참고: Extract를 사용하여 범위를 계산하는 것이 Replicat를 사용하는 것보다 효율적입니다. 대상 측에서 범위를 계산하려면 Replicat가 전체 트레일을 읽어 각 범위 사양에 맞는 데이터를 찾아야 합니다.

구문

@RANGE (<range>, <total_ranges> [, <column>] [, <column>] [, ...])

<range>

지정된 프로세스 또는 추적에 지정된 범위입니다. 유효한 값은 1, 2, 3 등이며 최대값은 <total_ranges>로 정의된 값입니다.

<total_ranges>

할당된 총 범위 수입니다. 예를 들어, 데이터를 세 그룹으로 나누려면 3 값을 사용합니다.

<column>

범위 할당의 기준이 될 열의 이름입니다. 이 인수는 선택적입니다. 사용하지 않을 경우 Oracle GoldenGate는 테이블의 기본 키를 기반으로 범위를 할당합니다.

데이터에 누락되거나 NULL 열이 포함될 수 없습니다. 이로 인해 @RANGE 함수가 비정상 종료됩니다.

열 목록에 지정된 열이 추적 파일에 있어야 합니다. Extract의 KEYCOLS을 사용하여 이 열을 포함하거나, Extract의 FETCHCOLS을 사용하여 열에 대해 사용하거나, 열이 보완 로그 그룹의 일부인지 확인한 후 LOGALLSUPCOLS를 사용하여 이 열을 제어할 수 있습니다.

예제

예 1

다음 예에서 복제 작업 로드는 소스 acct 테이블의 ID 열을 기반으로 세 개의 범위(3개의 Replicat 프로세스 간)로 분할됩니다.

(복제 그룹 1 매개변수 파일)

MAP sales.acct, TARGET sales.acct, FILTER (@RANGE (1, 3, ID));

(복제 그룹 2 매개변수 파일)

MAP sales.acct, TARGET sales.acct, FILTER (@RANGE (2, 3, ID));

(복제 그룹 3 매개변수 파일)

MAP sales.acct, TARGET sales.acct, FILTER (@RANGE (3, 3, ID));

예 2

다음 예에서는 하나의 Extract 프로세스가 처리 로드를 두 개의 트레일로 분할합니다. 범위 계산의 기준이 되는 열이 정의되지 않았으므로 Oracle GoldenGate는 기본 키 열을 사용합니다.

RMTTRAIL /ggs/dirdat/aa
TABLE fin.account, FILTER (@RANGE (1, 2));
RMTTRAIL /ggs/dirdat/bb
TABLE fin.account, FILTER (@RANGE (2, 2));

예 3

다음 예제에서 두 테이블은 order_ID 열을 기반으로 하는 상대 연산을 가집니다. order_master 테이블에는 order_ID 키가 있고, order_detail 테이블에는 order_ID 및 item_number 키가 있습니다. order_ID 키는 상대성을 설정하므로 참조 무결성을 유지하기 위해 두 테이블에 대해 @RANGE 필터에 사용됩니다. 하중은 두 개의 범위로 분할됩니다.

(매개변수 파일 번호1)

MAP sales.order_master, TARGET sales.order_master,
FILTER (@RANGE (1, 2, order_ID));
MAP sales.order_detail, TARGET sales.order_detail,
FILTER (@RANGE (1, 2, order_ID));

(매개변수 파일 번호2)

MAP sales.order_master, TARGET sales.order_master,
FILTER (@RANGE (2, 2, order_ID));
MAP sales.order_detail, TARGET sales.order_detail,
FILTER (@RANGE (2, 2, order_ID));