와일드카드를 사용하여 여러 객체 지정
와일드카드 문자를 사용하여 구성 파일의 한 항목에 스키마의 여러 객체를 지정할 수 있습니다. SharePlex는 명시적으로 제외된 객체를 제외하고 와일드카드를 충족하는 어떤 객체든 복제합니다.
참고: 객체 이름만 와일드카드로 사용할 수 있습니다. 소유자 이름은 와일드카드로 사용할 수 없습니다.
와일드카드 지원 요구 사항 및 제한 사항
지원되는 와일드카드 구문
SharePlex는 다음과 같은 SQL 와일드카드를 지원합니다.
- 문자열을 지정하는 백분율(%) 와일드카드 (와일드카드를 사용하여 여러 객체 지정 참조)
- 단일 문자를 지정하려면 밑줄(_) 와일드카드를 사용합니다.
- 백분율 기호 또는 밑줄 문자(예: emp_salary)가 포함된 테이블 이름의 경우 SharePlex는 백슬래시(\)를 이스케이프 문자로 인식하여 해당 문자를 와일드카드가 아닌 리터럴로 표시합니다.
구성 파일에 와일드카드 이름 지정
구성 파일에 와일드카드 이름을 지정할 때 도움이 필요한 경우 이 템플릿을 사용합니다.
와일드카드 객체 이름을 사용한 구성
datasource_specification |
expand src_owner.wildcard_name [not (list)] |
tgt_owner.wildcard_name |
routing_map |
구문 요소 설명
expand |
사양에 확장해야 하는 와일드카드 문자가 포함되어 있음을 나타냅니다. SharePlex가 expand 키워드를 감지하면 와일드카드 사양의 기준과 일치하는 모든 객체에 대해 데이터베이스를 쿼리합니다. 이 필수 키워드가 없으면 와일드카드 문자는 명시적인 객체 이름의 일부로 간주되며 와일드카드 확장이 수행되지 않습니다.
참고: expand와 소스 객체 사양의 시작 사이에 공백을 둡니다. |
src_owner.wildcard_name |
- src_owner는 소스 객체의 소유자입니다. 소유자 이름은 와일드카드로 사용할 수 없습니다. 소유자 이름에 와일드카드를 사용하는 경우 SharePlex는 해당 와일드카드가 소유자(스키마) 이름에 속한다고 가정합니다.
- wildcard_name은 소스 객체의 와일드카드 이름입니다.
규칙:
Oracle: 타겟 객체의 이름은 소스 객체의 이름과 동일해야 하지만 객체는 다른 소유자에 속할 수 있습니다. |
not (list) |
와일드카드 확장에서 생략할 객체를 정의하는 제외 목록입니다. 복제하지 않을 객체를 제외하려면 이 옵션을 사용합니다.
참고: 이 not 키워드는 SQL 와일드카드 NOT 연산자와 동일한 의미를 갖지 않습니다.
- not 키워드와 괄호는 필수 요소입니다.
- list는 동일한 소유자가 소유한 쉼표로 구분된 테이블 목록(와일드카드 또는 명시적)입니다. 예: not (spo%, gen%, product)
not 키워드 앞뒤에 공백을 둡니다. 목록의 각 쉼표 뒤에는 공백이 허용됩니다.
참고: 와일드카드를 충족하는 객체가 구성 파일의 다른 곳에 나열되는 경우 해당 항목은 와일드카드 항목에 지정된 처리 또는 라우팅을 재정의합니다. 이 경우 not 절은 필요하지 않습니다. 예를 참조하십시오. |
tgt_owner.wildcard_name |
- tgt_owner는 타겟 객체의 소유자입니다.
- wildcard_name은 타겟 객체의 와일드카드 이름입니다.
타겟 사양은 owner.% 형식이어야 합니다. owner.tab%와 같이 부분적으로 확장된 타겟 와일드카드 이름은 지원되지 않습니다. |
routing_map |
유효한 라우팅 맵입니다. 자세한 내용은 구성 파일의 라우팅 사양를 참조하십시오. |
와일드카드 사양 검증
와일드카드 사양이 복제할 특정 테이블 목록을 생성하는지 확인하려면 구성을 활성화하기 전에 sp_ctrl에서 verify config 명령을 실행합니다. 이 명령은 SharePlex가 캡처하고 복제할 객체 목록과 발생한 문제 목록을 생성합니다. 이 명령에 대한 자세한 내용은 SharePlex 참조 안내서를 참조하십시오.
유효한 와일드카드 사양 예
예 1: 다음 와일드카드 사양은 SharePlex가 scott이 소유한 모든 테이블을 활성화하도록 지시합니다. 여기서, 테이블 이름은 %temp%와 같은 경우를 제외하고는 prod%와 같습니다. 이 설명과 일치하는 모든 테이블은 hal 스키마의 타겟에 있는 동일한 이름의 테이블에 복제됩니다. SharePlex는 자동으로 이름을 상향 이동하므로 실제로 테이블 이름이 'PROD%'와 비슷하지만 '%TEMP%'와 같지 않은 모든 테이블을 활성화합니다.
Datasource:o.sidA
expand scott.prod% not (%temp%) hal.% sysa@o.sidB
예 2: 다음 예에서는 와일드카드 사양의 테이블 중 하나(이 경우 photo 테이블)에 대해 특수 처리를 지정하는 방법을 보여줍니다. photo를 제외한 모든 테이블은 기본 Post 큐를 통해 라우팅됩니다. photo 테이블에 대한 별도의 항목은 와일드카드 항목을 무시하고 명명된 Post 큐를 통해 photo 테이블을 처리합니다. 자세한 내용은 명명된 Post 큐 구성를 참조하십시오.
Datasource:o.sidA
cust.% cust.% hostB@o.oraB
cust.photo cust.photo hostB:lobQ@o.oraB
다음은 유효한 와일드카드 사양의 추가 예입니다.
Datasource:o.sidA
expand scott.%test% scott.% sysa@o.sidB
Datasource:o.sidA
expand scott.%t__t% fred.% sysa@o.sidB
Datasource:o.sidA
expand scott.% not (spo%, gen%, prodct) scott.% sysa@o.sidB
Datasource:o.sidA
expand scott.prod% not (%temp%) hal.% sysa@o.sidB
유효하지 않은 와일드카드 사양의 예
다음 예에는 허용되지 않는 와일드카드 스키마가 포함되어 있습니다.
Datasource:o.sidA
expand rob%.%test% scott.% sysa@o.sidB
다음 예에는 허용되지 않는 부분적으로 와일드카드로 지정된 타겟 객체 이름이 포함되어 있습니다.
Datasource:o.sidA
expand scott.%test% scott.%obj% sysa@o.sidB
와일드카드를 사용하여 PostgreSQL에 대한 여러 테이블 지정
데이터 복제 구성 > 와일드카드를 사용하여 PostgreSQL에 대한 여러 테이블 지정
와일드카드 문자를 사용하여 구성 파일의 한 항목에 스키마의 여러 테이블을 지정할 수 있습니다. SharePlex는 명시적으로 제외된 객체를 제외하고 와일드카드를 충족하는 어떤 테이블이든 복제합니다.
참고: 테이블 이름만 와일드카드로 사용할 수 있습니다. 스키마 이름은 와일드카드로 사용할 수 없습니다.
와일드카드 지원 요구 사항 및 제한 사항
구성이 활성화되기 전에 와일드카드 테이블 이름을 포함하는 스키마가 소스와 타겟에 있어야 합니다.
지원되는 와일드카드 구문
SharePlex는 다음과 같은 PostgreSQL 와일드카드를 지원합니다.
- 문자열을 지정하는 백분율(%) 와일드카드 (예 참조)
- 단일 문자를 지정하려면 밑줄(_) 와일드카드를 사용합니다.
- 백분율 기호 또는 밑줄 문자(예: emp_salary)가 포함된 테이블 이름의 경우 SharePlex는 백슬래시(\)를 이스케이프 문자로 인식하여 해당 문자를 와일드카드가 아닌 리터럴로 표시합니다.
구성 파일에 와일드카드 이름 지정
구성 파일에 와일드카드 이름을 지정할 때 도움이 필요한 경우 이 템플릿을 사용합니다.
와일드카드 테이블 이름을 사용한 구성
datasource_specification |
expand src_schema.wildcard_name [not (list)] |
tgt_schema.wildcard_name |
routing_map |
구문 요소 설명
expand |
사양에 확장해야 하는 와일드카드 문자가 포함되어 있음을 나타냅니다. SharePlex가 expand 키워드를 감지하면 와일드카드 사양의 기준과 일치하는 모든 테이블에 대해 데이터베이스를 쿼리합니다. 이 필수 키워드가 없으면 와일드카드 문자는 명시적인 테이블 이름의 일부로 간주되며 와일드카드 확장이 수행되지 않습니다.
참고: expand와 소스 테이블 사양의 시작 사이에 공백을 둡니다. |
src_schema.wildcard_name |
- src_schema는 소스 테이블의 스키마입니다. 스키마 이름은 와일드카드로 사용할 수 없습니다. 스키마 이름에 와일드카드를 사용하는 경우 SharePlex는 해당 와일드카드가 스키마 이름에 속한다고 가정합니다.
- wildcard_name은 소스 테이블의 와일드카드 이름입니다.
PostgreSQL: 타겟 테이블의 이름은 소스 테이블의 이름과 동일해야 하지만 테이블은 다른 스키마에 속할 수 있습니다. |
not (list) |
와일드카드 확장에서 생략할 테이블을 정의하는 제외 목록입니다. 복제하지 않을 테이블을 제외하려면 이 옵션을 사용합니다. 참고: 이 not 키워드는 SQL 와일드카드 NOT 연산자와 동일한 의미를 갖지 않습니다.
- not 키워드와 괄호는 필수 요소입니다.
- list는 동일한 스키마가 소유한 쉼표로 구분된 테이블 목록(와일드카드 또는 명시적)입니다. 예: not (spo%, gen%, product)
not 키워드 앞뒤에 공백을 둡니다. 목록의 각 쉼표 뒤에는 공백이 허용됩니다.
참고: 와일드카드를 충족하는 테이블이 구성 파일의 다른 곳에 나열되는 경우 해당 항목은 와일드카드 항목에 지정된 처리 또는 라우팅을 재정의합니다. 이 경우 not 절은 필요하지 않습니다. 예를 참조하십시오. |
tgt_schema.wildcard_name |
- tgt_schema는 타겟 테이블의 스키마입니다.
- wildcard_name은 타겟 테이블의 와일드카드 이름입니다.
타겟 사양은 schema.% 형식이어야 합니다. schema.tab%와 같이 부분적으로 확장된 타겟 와일드카드 이름은 지원되지 않습니다. |
routing_map |
유효한 라우팅 맵입니다. |
와일드카드 사양 검증
와일드카드 사양이 복제할 특정 테이블 목록을 생성하는지 확인하려면 구성을 활성화하기 전에 sp_ctrl에서 verify config 명령을 실행합니다. 이 명령은 SharePlex가 캡처하고 복제할 테이블 목록과 발생한 문제 목록을 생성합니다. 이 명령에 대한 자세한 내용은 SharePlex 참조 안내서를 참조하십시오.
예
유효한 와일드카드 사양 예
예 1: 다음 와일드카드 사양은 SharePlex가 scott이 소유한 모든 테이블을 활성화하도록 지시합니다. 여기서, 테이블 이름은 %temp%와 같은 경우를 제외하고는 prod%와 같습니다. 이 설명과 일치하는 모든 테이블은 hal 스키마의 타겟에 있는 동일한 이름의 테이블에 복제됩니다.
Datasource:r.dbname
expand scott.prod% not (%temp%) hal.% hostB@r.dbname
예 2: 다음 예에서는 와일드카드 사양의 테이블 중 하나(이 경우 photo 테이블)에 대해 특수 처리를 지정하는 방법을 보여줍니다. photo를 제외한 모든 테이블은 기본 Post 큐를 통해 라우팅됩니다. photo 테이블에 대한 별도의 항목은 와일드카드 항목을 무시하고 명명된 Post 큐를 통해 photo 테이블을 처리합니다.
Datasource:r.dbname
cust.% cust.% hostB@r.dbname
cust.photo cust.photo hostB:queuename@r.dbname
다음은 PostgreSQL에서 PostgreSQL로의 복제에 대한 유효한 와일드카드 사양의 추가 예입니다.
Datasource:r.dbname
expand scott.%test% scott.% hostB@r.dbname
Datasource:r.dbname
expand scott.%t__t% fred.% hostB@r.dbname
Datasource:r.dbname
expand scott.% not (spo%, gen%, prodct) scott.% hostB@r.dbname
Datasource:r.dbname
expand scott.prod% not (%temp%) hal.% hostB@r.dbname
다음은 PostgreSQL에서 Oracle로의 복제에 대한 유효한 와일드카드 사양의 예입니다.
Datasource:r.dbname
expand "scott"."%test%" "scott"."%" hostB@o.target_dbname
다음은 PostgreSQL에서 SQL Server로의 복제에 대한 유효한 부분 와일드카드 사양의 예입니다.
Datasource:r.dbname
expand scott.%test% scott.%test% hostB@r.target_dbname
유효하지 않은 와일드카드 사양의 예
다음 예에는 허용되지 않는 와일드카드 스키마가 포함되어 있습니다.
Datasource:r.dbname
expand rob%.%test% scott.% hostB@r.dbname
다음 예에는 허용되지 않는 부분적으로 와일드카드로 지정된 타겟 테이블 이름이 포함되어 있습니다.
Datasource:r.dbname
expand scott.%test% scott.%obj% hostB@r.dbname
Oracle 데이터베이스에 대한 유니크 키 정의
유니크 키 정의
기본 키나 유니크 키를 사용하여 테이블을 생성하지 않은 경우 구성 파일에서 객체를 지정할 때 키로 사용할 컬럼을 지정할 수 있습니다. SharePlex는 지정된 컬럼을 WHERE 절의 유니크 키로 사용하여 게시할 타겟 행을 찾습니다.
참고:
- 기본 키나 유니크 키가 없으면 SharePlex는 테이블의 모든 컬럼(또는 컬럼 파티션의 모든 컬럼)을 키로 사용하므로 복제 성능이 저하됩니다.
- 기본 키나 유니크 키가 있는 테이블에 키 정의가 지정되면 키 정의가 정의된 키를 재정의합니다. 이 기능은 SharePlex에서 기존 키를 사용하지 않으려는 경우 유용할 수 있습니다.
|
유니크 키 정의 - Oracle-Oracle
키로 지정하는 컬럼은 다음 기준을 충족해야 합니다.
- LONG 또는 LOB 컬럼일 수 없습니다.
- 행을 고유하게 식별할 수 있어야 합니다. 식별할 수 없으면 복제가 동기화 중단 오류를 반환하거나 잘못된 타겟 행에 게시될 수 있습니다.
- 테이블이 수직으로 파티셔닝된 복제를 위해 구성된 경우 컬럼 파티션의 일부여야 합니다. 수직 파티셔닝에서 제외 컬럼 표기법을 사용하면 제외된 컬럼을 키 정의에 사용할 수 없습니다. 자세한 내용은 파티셔닝된 복제 구성를 참조하십시오.
- 추가 로그 그룹에 컬럼을 포함합니다. 포함하지 않으면 SharePlex는 데이터베이스에서 해당 값을 쿼리해야 합니다.
- 타겟 테이블에 인덱스를 생성하고 variable-data 디렉토리에 있는 SharePlex 힌트 파일에 인덱스를 추가합니다. 이는 Post 프로세스가 인덱스를 사용하도록 지시합니다.
키 정의 구문
키 정의를 생성하려면 소스 객체 뒤에 공백을 입력하고 괄호를 포함하여 다음 구문을 사용합니다.
src_owner.table !key (column_list)
여기서,
- !key는 필수 키워드입니다.
- column_list는 키에 포함할 컬럼 목록입니다. 컬럼 이름은 쉼표로 구분합니다. 쉼표 뒤의 공백은 선택 사항입니다.
datasource_specification |
|
|
src_owner.table !key (col_name, col2_name, ...) |
tgt_owner.table |
host@o.SID |
예
Datasource:o.ora1
scott.tab !key(name,ID) scott.tab2 sysB@oraB
유니크 키 정의 - PostgreSQL-PostgreSQL
키로 지정하는 컬럼은 다음 기준을 충족해야 합니다.
-
유니크 키는 TEXT, BYTEA, JSON, JSONB, 2,000자를 초과하는 CHAR, 크기가 없거나 4,000자를 초과하는 VARCHAR일 수 없습니다.
- 행을 고유하게 식별할 수 있어야 합니다. 식별할 수 없으면 복제가 동기화 중단 오류를 반환하거나 잘못된 타겟 행에 게시될 수 있습니다.
-
테이블이 수직으로 파티셔닝된 복제를 위해 구성된 경우 컬럼 파티션의 일부여야 합니다. 수직 파티셔닝에서 제외 컬럼 표기법을 사용하면 제외된 컬럼을 키 정의에 사용할 수 없습니다. 자세한 내용은 파티셔닝된 복제 구성을 참조하십시오.
- 타겟 테이블에 인덱스를 생성하면 Post 프로세스가 인덱스를 사용하도록 지시합니다.
키 정의 구문
키 정의를 생성하려면 소스 객체 뒤에 공백을 입력하고 괄호를 포함하여 다음 구문을 사용합니다.
src_schema.table !key (column_list)
여기서,
- !key는 필수 키워드입니다.
- column_list는 키에 포함할 컬럼 목록입니다. 컬럼 이름은 쉼표로 구분합니다. 쉼표 뒤의 공백은 선택 사항입니다.
datasource_specification |
|
|
src_schema.table !key (col_name, col2_name, ...) |
tgt_schema.table |
host@r.dbname |
예
Datasource:r.dbname
scott.tab !key(name,ID) scott.tab2 sysB@dbname
유니크 키 정의 - PostgreSQL-Oracle
키로 지정하는 컬럼은 다음 기준을 충족해야 합니다.
키 정의 구문
키 정의를 생성하려면 소스 객체 뒤에 공백을 입력하고 괄호를 포함하여 다음 구문을 사용합니다.
src_schema.table !key (column_list)
여기서,
- !key는 필수 키워드입니다.
- column_list는 키에 포함할 컬럼 목록입니다. 컬럼 이름은 쉼표로 구분합니다. 쉼표 뒤의 공백은 선택 사항입니다.
datasource_specification |
|
|
src_schema.table !key (col_name, col2_name, ...) |
tgt_owner.table |
host@o.SID |
예
Datasource:r.dbname
"scott"."tab" !key(name,ID) "scott"."tab2" sysB@o.oraB
Oracle 데이터베이스에 대한 DML 작업 필터링
와일드카드를 사용하는 경우 복제에서 다음 DML을 필터링하도록 SharePlex를 구성할 수 있습니다.
- Oracle DML 유형(INSERT, UPDATE, DELETE)
- Oracle 시퀀스 및 Oracle SQL*Loader direct-path loads와 관련된 DML입니다.
DML 유형 필터링
어떤 유형의 DML 작업이든 필터링하도록 SharePlex를 구성할 수 있으므로 작업이 타겟 테이블에 복제되지 않습니다. DML 필터링은 대부분의 다른 SharePlex 구성 구문과 호환됩니다.
DML 필터 구성
DML 필터를 구성하려면 소스 테이블 사양에 다음 구문을 추가합니다. 테이블 사양과 필터 사양 사이에 공백을 둡니다. 필터링할 여러 작업 유형을 지정할 수 있습니다. 컬럼 목록이나 키 정의와 같은 다른 기능에 대한 추가 구문은 DML 필터 사양을 따라야 합니다.
!dml(DML_type[,DML_type][,...])
여기서, DML_type은 다음 중 하나입니다.
i |
INSERT |
d |
DELETE |
u |
UPDATE |
예
예 1
다음 예에서는 DELETE 작업이 타겟 테이블에 복제되지 않도록 필터링합니다.
Datasource:o.ora |
|
|
scott.emp !dml(d) |
scott.emp |
prodsys@o.sysdb |
예 2
다음 예에서는 UPDATE만 타겟 테이블에 복제되도록 DELETE 및 INSERT를 필터링합니다. 이 예에서는 DML 필터가 컬럼 매핑 사양과 호환되는 방식도 보여줍니다.
Datasource:o.ora |
|
|
scott.stock !dml(d,i) (ID, name) |
scott.stock (SKU, prod) |
sys2@o.sysdb |
현재 DML 필터 보기
verify config 명령을 사용하여 구성 파일의 각 테이블에 대해 필터링되는 DML을 확인합니다. 이 명령은 활성 또는 비활성 구성 파일에 사용할 수 있습니다.
sp_ctrl> verify config myconfig
7: "SCOTT"."EMP" "SCOTT"."EMP" prodsys@o.proddb
Filter out >>>>> DELETES
Unique Key : (EMPLOYEE_ID)
제한
복제에서 특정 Oracle 객체와 관련된 DML 필터링
SharePlex가 시퀀스 및 SQL*Loader direct-path loads를 복제하는 것을 방지할 수 있습니다. 기본적으로 이러한 객체의 복제는 활성화되어 있습니다.
시퀀스 |
SP_OCT_REPLICATE_SEQUENCES |
0 |
SQL*Loader direct-path loads |
SP_OCT_REPLICATE_DLOAD |
0 |