MAP Rule

테이블, 컬럼 매핑 기능을 사용하기 위해서는 $PRS_HOME/config 디렉터리의 Apply config file인 '[INST_ID]_apply1.cfg'를 설정한다.

다음은 설정해야 할 파라미터에 대한 설명이다.

기본 MAP 파라미터에 Source DB의 특정 테이블을 Target DB의 특정 테이블로 동기화하기 위한 규칙을 설정한다.

MAP=([SYNC OPTION] SOURCE_USER.SOURCE_TABLE [SOURCE_COLUMNS]
     [COLUMN FILTERING OPTION],
     [TARGET_DATABASE.]TARGET_USER.TARGET_TABLE [TARGET_COLUMNS]
     [RESOLVE OPTION] [SKIP OPTION]))
인자
설명

SYNC OPTION

TABLE : 동기화 할 테이블을 지정하는 경우 설정한다. OBJECT : 동기화 대상이 아닌 오브젝트의 DDL 매핑을 지정하는 경우 설정한다. EXCLUDE : 동기화를 제외할 테이블을 지정하는 경우 설정한다.

SOURCE_USER

동기화 할 Source DB 테이블의 사용자 이름을 설정한다.

SOURCE_TABLE

동기화 할 Source DB 테이블의 테이블 이름을 설정한다.

SOURCE_COLUMNS

동기화 할 Source DB 테이블의 컬럼들을 설정한다. (Column1, Column2, Column3과 같은 방식으로 설정한다.)

COLUMN FILTERING OPTION

동기화하지 않을 Source DB 테이블의 컬럼들을 설정한다.

TARGET_DATABASE

동기화시킬 Target DB의 데이터베이스 이름을 설정한다.

TARGET_USER

동기화시킬 Target DB 테이블의 사용자 이름을 설정한다.

TARGET_TABLE

동기화시킬 Target DB 테이블의 테이블 이름을 설정한다. 인자에 대한 자세한 내용은 각 절의 설명을 참고한다.

RESOLVE OPTION

동기화시킬 Target DB 테이블의 테이블 중 DCR Rule를 적용할 테이블의 이름을 설정한다. 인자에 대한 자세한 내용은 각 절의 설명을 참고한다.

SKIP OPTION

동기화 할 때 동기화를 하지 않을 row의 조건을 설정한다.

TARGET_COLUMNS

동기화시킬 Target DB 테이블의 컬럼들을 설정한다. SOURCE_COLUMNS와 순서대로 매핑되고 컬럼 개수는 일치해야 한다. (Column1, Column2, Column3)과 같은 방식으로 설정한다.

다음은 MAP 파라미터를 이용해서 동기화 대상 반영 기능을 사용하는 방법에 대한 예제이다.

서로 다른 오너 / 다른 이름을 가진 테이블을 동기화

다음은 Source DB의 PROSYNC1 사용자의 T1 테이블을 Target DB의 PROSYNC2 사용자의 T2 테이블로 동기화하는 예제이다.

MAP=(TABLE PROSYNC1.T1, PROSYNC2.T2)

테이블의 특정 컬럼들만 동기화

다음은 Source DB의 PROSYNC1 사용자의 T1 테이블에 컬럼 C1, C2, C3가 있고, 이중 C1와 C2 컬럼만 Target DB의 PROSYNC2 사용자의 T2 테이블의 C1, C2 컬럼과 동기화하는 예제이다.

MAP=(TABLE PROSYNC1.T1(C1, C2), PROSYNC2.T2)

테이블간 컬럼 이름을 다르게 동기화

다음은 Source DB의 PROSYNC1 사용자의 T1 테이블에 컬럼 C1, C2, C3가 있고, 이중 C1와 C2 컬럼만 Target DB의 PROSYNC2 사용자의 T2 테이블의 D1, D2 컬럼과 동기화하는 예제이다.

MAP=(TABLE PROSYNC1.T1(C1, C2), PROSYNC2.T2(D1, D2))


SYNC OPTION

동기화 테이블을 사용할지 여부를 설정한다.

TABLE

동기화 테이블을 지정하는 경우 SYNC OPTION에 TABLE을 설정한다.

MAP=(TABLE [SOURCE_USER].[SOURCE_TABLE]... )

OBJECT

동기화 대상이 아닌 오브젝트의 DDL 매핑을 지정하는 경우 SYNC OPTION에 OBJECT를 설정한다.

MAP=(OBJECT [SOURCE_USER].[OBJECT_NAME], [TARGET_USER].[OBJECT_NAME])

동기화 대상 테이블에 대해서는 앞서 설명한 TABLE 규칙을 따라 DDL 매핑이 지원되며, TABLE 규칙이 명시되지 않은 경우 매핑 없이 동기화된다. 동기화 대상으로 설정할 수 없는 INDEX 등의 OBJECT나 동기화 대상이 아닌 테이블에 대해서만 해당 규칙으로 설정할 수 있다. OBJECT 규칙에 대해서는 반드시 위의 형태로만 사용 가능하다. OBJECT_NAME에 와일드 카드로 '%'를 입력할 수 있다. 이 경우 [SOURCE_USER]의 임의의 OBJECT [SOURCE_USER].[OBJECT_NAME]을 [TARGET_USER].[OBJECT_NAME]에 DDL 매핑하여 DDL을 동기화한다.

EXCLUDE

동기화를 제외할 테이블을 지정하는 경우 SYNC OPTION에 EXCLUDE를 설정한다.

MAP=(EXCLUDE [SOURCE_USER].[SOURCE_TABLE]...)

예제

Source DB의 PROSYNC 사용자의 SKIP 테이블을 제외하고 동기화 할 때 다음과 같이 '[INST_ID]_apply1.cfg'의 MAP 파라미터를 설정한다.

MAP=(TABLE DEFAULT EXCLUDE PROSYNC.SKIP TABLE TIBERO.T1)


COLUMN FILTERING OPTION

COLUMN FILTERING OPTION을 사용하여 일부 컬럼에 대한 동기화를 제거할 수 있다. Constraint가 걸려있는 컬럼에 대해서는 해당 옵션을 사용할 수 없다.

다음과 같이 COLUMN FILTERING OPTION을 사용할 수 있다.

MAP=(... EXCEPT FOR ([COLUMN_NAME], ..., [COLUMN_NAME])...)

예제

Source DB의 PROSYNC1 사용자의 T1 테이블에 컬럼 C1, C2, C3가 있고, 이중 C1 컬럼만 제외하고 Target DB의 PROSYNC2 사용자의 T2 테이블의 C2, C3 컬럼과 동기화할 경우 다음과 같이 '[INST_ID]_apply1.cfg'의 MAP 파라미터를 설정한다.

MAP=(TABLE PROSYNC1.T1 EXCEPT FOR (C1), PROSYNC2.T2)


RESOLVE OPTION (a.k.a. Data Conflict Rule, DCR)

동기화 시 충돌 상황에서 Source DB에 정합성 기준을 맞출 지, Target DB에 정합성 기준을 맞출 지, 아니면 특정 컬럼의 Min 혹은 Max 값 기준으로 데이터 정합성을 맞출 지를 결정하는 옵션이다. 필수 옵션은 아니며 주로 양방향 동기화에 사용된다.

정해진 Rule에 따라 DML 들이 변경되거나 Skip 된다. 또한 상세한 설명은 문서의 성격상 Flow Control 에서 다룬다.

다음은 RESOLVE OPTION에 설정할 수 있는 RESOLVE_RULE의 종류와 설명이다.

MAP=(... RESOLVE BY [RESOLVE_RULE] ...)
RESOLVE_RULE
설명

SOURCE

Source 테이블의 Row를 우선으로 한다.

TARGET

Target 테이블의 Row를 우선으로 한다.

MAX(COLUMN_NAME)

해당 컬럼의 값이 더 큰 Row를 우선으로 한다.

반드시 DEFAULT OPTION을 설정해야 한다.

MIN(COLUMN_NAME)

해당 컬럼의 값이 더 작은 Row를 우선으로 한다.

반드시 DEFAULT OPTION을 설정해야 한다.

MAX와 MIN RESOLVE_RULE의 경우에는 반드시 DEFAULT OPTION을 설정해야 한다. 컬럼 값이 null인 경우에 설정한 DEFAULT 값으로 비교한다. 단, 동기화는 설정한 DEFAULT 값이 아니라 실제 컬럼 값으로 수행한다.

MAP=(... RESOLVE BY MAX(COLUMN_NAME) DEFAULT (COLUMN_VALUE) ...)

예제

UPDATE을 동기화하는 경우 MIN, MAX Rule을 사용한다면 비교 대상 컬럼의 변경 유무에 따라 다르게 비교를 수행한다. 비교 대상 컬럼이 변경되었다면 변경된 값, 변경되지 않았다면 기존 값으로 Target DB의 row와 비교를 진행한다. 비교 대상 컬럼이 NULL인 상태에서 UPDATE가 발생하는 경우 비교가 불가능하기 때문에 비교 없이 Source DB 값을 우선으로 DML을 수행한다.

예를 들어 DB1과 DB2간의 양방향 동기화하는 경우 DB1의 PROSYNC 사용자의 T1 테이블을 DB2의 PROSYNC 사용자의 T1 테이블로 동기화하고, column c3의 값이 더 큰 값을 우선하고자 하는 경우 마지막으로 INSERT할 때 DCR 컬럼인 c3에 null이 들어가는 경우 10으로 비교할 경우 다음과 같이 설정한다.

MAP=(TABLE PROSYNC.T1, PROSYNC.T1 RESOLVE BY MAX(c3) DEFAULT (10))

참고

RESOLVE OPTION이 정상 작동하기 위해서는 설정할 Source와 Target 테이블에 primary key가 필요하다.

MIN, MAX 룰을 사용하는 경우 비교 대상 컬럼에 NULL이 들어가는 경우에 대비 사용될 DEFAULT OPTION을 반드시 사용해야 한다.


SKIP OPTION

SKIP OPTION에는 동기화하지 않길 원하는 row들을 특정하기 위한 조건을 설정한다.

지원컬럼타입

TIBERO

CHAR, VARCHAR, NUMBER, TIME, DATE, TIMESTAMP

ORACLE

CHAR, VARCHAR, NUMBER

지원비교조건

CHAR, VARCHAR

EQUAL (=), NOT_EQUAL (!=)

NUMBER, TIME, DATE, TIMESTAMP

EQUAL (=), NOT_EQUAL (!=), INEQUALITY (<, <=, >, >=)

SKIP OPTION은 다음과 같이 설정한다. SKIP_CONDITION이 True인 Row들은 동기화하지 않는다.

MAP=(... SKIP=(SKIP_CONDITION))

예제

Source DB의 PROSYNC 사용자의 T1 테이블을 Target DB의 PROSYNC 사용자의 T1 테이블로 동기화하고, column c1의 값이 'example'이 아니면 DML을 skip할 경우 다음과 같이 MAP 파라미터를 설정한다.

MAP=(TABLE PROSYNC.T1, PROSYNC.T1 SKIP=(c1!="example"))

위의 조건에 추가로 Source DB의 PROSYNC 사용자의 T2 테이블을 Target DB의 PROSYNC 사용자의 T2 테이블로 동기화하고, column c2의 값이 'example2'이면 DML을 skip할 경우 다음과 같이 MAP 파라미터를 설정한다.

MAP=(TABLE PROSYNC.T1, PROSYNC.T1 SKIP=(c1!="example")
    TABLE PROSYNC.T2, PROSYNC.T2 SKIP=(c2="example2"))

참고

SKIP RULE를 사용할 때 UPDATE의 경우에서는 SET 절에 있는 값을 기준으로 skip을 할 것인지, 아니면 WHERE 절의 값을 기준으로 skip을 할 것인지 설정할 수 있다.

Apply Process Parameter 중에서 MAP_SKIP_UPD_WHERE의 값이 N 일 때 먼저 SET 절에 기준 컬럼이 있는지 확인 후 있으면 SET 절의 값을 기반으로, 없으면 WHERE 절에 있는 기준 컬럼의 값을 기반으로 skip한다. 해당 파라미터가 Y인 경우에는 무조건 WHERE에 있는 기준 컬럼의 값을 기반으로 Skip한다.

SKIP OPTION은 단방향 동기화에서만 지원한다. 양방향의 경우 정합성 문제로 지원하지 않는다.

Last updated