DDL

유효 기간

추출 및 복제

주: DDL 복제는 Oracle에서 Oracle 데이터베이스로, 그리고 MySQL에서 MySQL 데이터베이스로만 지원됩니다.

설명

DDL 매개변수를 사용하여 다음을 수행할 수 있습니다.

옵션 없이 사용할 경우 DDL 매개변수는 필터링을 수행하지 않으며 다음과 같이 모든 DDL 작업이 전달됩니다.

옵션과 함께 사용할 경우 DDL 매개변수는 다음을 기반으로 DDL 작업을 포함하거나 제외하는 필터링 에이전트 역할을 합니다.

하나의 DDL 매개변수만 매개변수 파일에 사용할 수 있지만 다중 포함 및 제외 옵션을 결합하여 DDL를 필수 레벨로 필터링할 수 있습니다.

주: Extract 데이터 펌프에 DDL 매개변수를 사용하지 마십시오. 이러한 프로세스 유형은 DDL의 매핑 또는 변환을 허용하지 않으며 통과 모드에서 DDL 레코드를 자동으로 전파합니다. 소스 테이블(예: ALTER TABLE TableA...)에서 수행되는 DDL은 동일한 테이블 이름(ALTER TABLE TableA)으로 Replicat에 의해 적용됩니다. ALTER TABLE TableB로 매핑할 수 없습니다.

Oracle GoldenGate DDL 지원 사용 방법에 대한 자세한 내용은 Oracle GoldenGate Microservices Documentation에서 Oracle: DDL Replication 및 MySQL: DDL Replication을 참조하십시오.

구문

DDL [
{AUTOSCHEMA}
{INCLUDE | EXCLUDE}
  [, ALLOWEMPTYOBJECT]
  [, ALLOWEMPTYOWNER]
  [, MAPPED | UNMAPPED | OTHER | ALL]
  [, OPTYPE <type>]
  [, OBJTYPE '<type>']
  [, OBJNAME <name>]
  [, INSTR '<string>']
  [, INSTRWORDS '<word_list>']
  [, INSTRCOMMENTS '<comment_string>']
  [, INSTRCOMMENTSWORDS '<word_list>']
  [, SOURCECATALOG <catalog> | ALLCATALOGS]
  [, STAYMETADATA]
  [, EVENTACTIONS (<action>)]
]
[...]

AUTOSCHEMA

MySQL에서 Oracle로, Oracle에서 MySQL로, MySQL에서 MySQL으로의 데이터 복제에 적합합니다.

DDL AUTOSCHEMA 매개변수 옵션은 자동 스키마 전개 기능을 사용으로 설정하는 데 사용됩니다. 기본적으로 이 옵션은 사용 안함으로 설정됩니다.

구문

DDL AUTOSCHEMA

MAPPED DDL 작업만 자동 스키마 전개와 관련이 있습니다. 따라서 포함/제외 기준에서 OBJNAME 절의 일부로 지정된 객체 이름은 소스 테이블 이름이 아닌 대상 테이블 이름과 일치해야 합니다.

Replicat 매개변수 파일에서 OBJNAME를 MAPPED와 함께 사용하는 경우 OBJNAME에 대한 값은 MAP 문의 TARGET 절로 지정된 이름을 참조해야 합니다.

자세한 내용은 자동 스키마 전개 사용을 참조하십시오.

INCLUDE | EXCLUDE

DDL 필터링 옵션

다음 구문 옵션을 사용하면 Oracle GoldenGate에 의해 복제된 DDL에서 필터링 및 작동할 수 있습니다. 이러한 옵션은 DDL 매개변수의 INCLUDE 및 EXCLUDE 절과 DDL 복제를 지원하는 기타 매개변수에 적용됩니다.

포함 또는 제외 절의 시작을 식별하려면 INCLUDE 또는 EXCLUDE를 사용합니다.

포함 또는 제외 절은 INCLUDE 또는 EXCLUDE 키워드와 DDL 매개변수의 다른 필터링 옵션의 적합한 조합으로 구성되어야 합니다.

EXCLUDE를 사용하는 경우 해당 INCLUDE 절을 생성해야 합니다. 예를 들어, 다음 항목이 잘못되었습니다.

DDL EXCLUDE OBJNAME "hr".*

그러나 다음을 사용할 수 있습니다.

DDL INCLUDE ALL, EXCLUDE OBJNAME "hr"."*"
DDL INCLUDE OBJNAME fin.* EXCLUDE OBJNAME "fin.ss"

EXCLUDE는 동일한 조건이 포함된 INCLUDEs보다 우선합니다. 여러 포함 및 제외 절을 사용할 수 있습니다.

DDL 매개변수, TABLE 매개변수, MAP 매개변수 또는 TABLEEXCLUDE 또는 MAPEXCLUDE 매개변수에 설치된 Oracle GoldenGate DDL 객체를 포함하지 마십시오. 해당 매개변수의 와일드카드 사양에 Oracle GoldenGate에서 설치한 DDL 객체가 포함되지 않았는지 확인합니다. 이러한 객체는 Oracle GoldenGate 구성에 포함되지 않아야 하지만 Extract 프로세스는 해당 객체에 대한 작업을 인식해야 하며, 따라서 EXCLUDE, TABLEEXCLUDE 또는 MAPEXCLUDE 매개변수 문을 사용하여 구성에서 명시적으로 제외하면 안 됩니다.

ALLOWEMPTYOBJECT

ALLOWEMPTYOBJECT를 사용하여 OBJNAME 지정이 객체 이름을 포함하지 않는 DDL를 처리하도록 허용합니다. 예:

DDL INCLUDE OBJNAME sch.* ALLOWEMPTYOBJECT

ALLOWEMPTYOWNER

ALLOWEMPTYOWNER를 사용하여 OBJNAME 사양이 소유자 이름을 포함하지 않는 DDL를 처리하도록 허용합니다. 예:

DDL INCLUDE OBJNAME pdb.sch.* ALLOWEMPTYOWNER

EVENTACTIONS (action)

추출 또는 복제 프로세스가 트랜잭션 로그 또는 추적(이벤트 레코드라고 함)의 DDL 레코드를 기반으로 정의된 작업을 수행합니다. DDL 레코드가 Extract 또는 데이터 펌프에 의해 트레일에 기록되거나 DDL 매개변수의 다른 필터링 옵션에 의해 결정된 대로 Replicat에 의해 실행될 수 있는 경우 DDL 이벤트가 트리거됩니다. 이 시스템을 사용하여 데이터베이스 이벤트를 기반으로 처리를 사용자정의할 수 있습니다.

<action>의 경우 MAP 및 TABLE 매개변수 아래의 EVENTACTIONS를 참조하십시오.

DDL 레코드에서 EVENTACTIONS를 사용하기 위한 지침:

EVENTACTIONS는 파생된 객체이므로 다음 DDL 객체를 지원하지 않습니다.

MAPPED | UNMAPPED | OTHER | ALL

MAPPED, UNMAPPED, OTHER 및 ALL를 사용하여 DDL 작업 범위에 따라 INCLUDE 또는 EXCLUDE를 적용합니다.

DDL EXCLUDE ALL는 DDL 작업 자체의 복제를 차단하면서 Oracle GoldenGate에 대한 최신 객체 메타데이터를 유지 관리하는 특수 처리 옵션입니다. DDL EXCLUDE ALL는 Oracle GoldenGate 이외의 메소드를 사용하여 대상에 DDL를 적용할 수 있지만, Oracle GoldenGate가 대상 객체에 데이터 변경사항을 복제하도록 할 때 사용할 수 있습니다. 객체가 변경될 때 Oracle GoldenGate에 현재 메타데이터를 제공하므로 Oracle GoldenGate 프로세스를 정지 및 시작할 필요가 없습니다. DDL EXCLUDE ALL에는 다음과 같은 특수 조건이 적용됩니다.

OBJNAME name

OBJNAME를 사용하여 객체의 전체 이름에 INCLUDE 또는 EXCLUDE를 적용합니다. 두 부분 및 세 부분 객체 이름과 와일드카드를 올바르게 지정하려면 명령 인수에 와일드카드 사용을 참조하십시오.

대소문자를 구분하는 객체 이름은 큰 따옴표로 묶습니다.

대소문자 비구분 예제:

DDL INCLUDE OBJNAME accounts.*

대소문자 구분 예제:

DDL INCLUDE OBJNAME accounts."cust"

OBJNAME에는 <owner.object> 또는 <container.owner.object>가 필요한 반면 USER에는 스키마만 있으므로 Oracle USER 객체에 OBJNAME를 사용하지 마십시오.

Replicat 매개변수 파일에서 OBJNAME를 MAPPED와 함께 사용하는 경우 OBJNAME에 대한 값은 MAP 문의 TARGET 절로 지정된 이름을 참조해야 합니다. 예를 들어, 다음 MAP 문이 제공된 경우 올바른 값은 OBJNAME fin2.*입니다.

MAP fin.exp_*, TARGET fin2.*;

다음 예제에서 CREATE TABLE 문은 <source>에서 다음과 같이 실행됩니다.

CREATE TABLE fin.exp_phone;

동일한 명령문이 대상에서 다음과 같이 실행됩니다.

CREATE TABLE fin2.exp_phone;

대상 소유자가 MAP 문에 지정되지 않은 경우 Replicat는 이를 USERIDALIAS 매개변수로 지정된 데이터베이스 사용자에게 매핑합니다.

트리거와 같은 파생 객체를 생성하는 DDL의 경우 OBJNAME의 값은 파생 객체의 이름이 아니라 기본 객체의 이름이어야 합니다.

예를 들어, 다음 DDL 문을 포함하려면 올바른 값은 hr.insert_trig가 아니라 hr.accounts입니다.

CREATE TRIGGER hr.insert_trig ON hr.accounts;

RENAME 작업의 경우 OBJNAME에 대한 값이 새 테이블 이름이어야 합니다. 예를 들어, 다음 DDL 문을 포함하려면 올바른 값은 hr.acct입니다.

ALTER TABLE hr.accounts RENAME TO acct;

OBJTYPE <type>

OBJTYPE를 사용하여 특정 유형의 데이터베이스 객체에 INCLUDE 또는 EXCLUDE를 적용합니다. <type>의 경우 데이터베이스에 적합한 객체 유형(예: TABLE, INDEX 및 TRIGGER)을 사용합니다. Oracle 구체화된 뷰 및 구체화된 뷰 로그의 경우 올바른 유형은 각각 snapshot 및 snapshot log입니다. 객체 유형의 이름을 작은 따옴표로 묶습니다. 예:

DDL INCLUDE OBJTYPE 'INDEX'
DDL INCLUDE OBJTYPE 'SNAPSHOT'

Oracle 객체 유형 USER의 경우 OBJNAME에는 owner.object 또는 <container.owner.object>가 필요하지만 USER에는 스키마만 있으므로 OBJNAME 옵션을 사용하지 마십시오.

OPTYPE <type>

OPTYPE를 사용하여 INCLUDE 또는 EXCLUDE를 CREATE, ALTER 및 RENAME와 같은 특정 유형의 DDL 작업에 적용합니다. <type>의 경우 데이터베이스에 적합한 DDL 명령을 사용합니다. 예를 들어, ALTER 연산을 포함하려면 올바른 구문은 다음과 같습니다.

DDL INCLUDE OPTYPE ALTER

INSTR string

INSTR를 사용하여 INCLUDE 또는 EXCLUDE를 명령 구문 자체 내에 특정 문자열이 포함되지만 설명 내에 포함되지 않는 DDL 문에 적용합니다. 예를 들어, 다음은 인덱스를 생성하는 DDL를 제외합니다.

DDL INCLUDE ALL EXCLUDE INSTR 'CREATE INDEX'

문자열을 작은 따옴표로 묶습니다. 문자열 검색은 대소문자를 구분하지 않습니다.

INSTR는 문자열 내에 있는 작은 따옴표(' ')를 지원하지 않으며 NULL 값을 지원하지 않습니다.

INSTRCOMMENTS comment_string

(Oracle에 적합) INSTRCOMMENTS를 사용하여 DDL 명령 자체가 아닌 주석 내에 특정 문자열이 포함된 DDL 문에 INCLUDE 또는 EXCLUDE를 적용합니다. INSTRCOMMENTS를 사용하여 설명을 필터링 에이전트로 사용할 수 있습니다.

예를 들어, 다음은 설명에 'source only' 문자열이 포함된 DDL 문을 제외합니다.

DDL INCLUDE ALL EXCLUDE INSTRCOMMENTS 'SOURCE ONLY'

이 예에서는 다음과 같은 DDL 문이 복제되지 않습니다.

CREATE USER john IDENTIFIED BY john /<source only>/;

문자열을 작은 따옴표로 묶습니다. 문자열 검색은 대소문자를 구분하지 않습니다. INSTR 및 INSTRCOMMENTS를 결합하여 명령 구문 및 동일한 DDL 문의 설명에서 문자열을 필터링할 수 있습니다.

INSTRCOMMENTS는 문자열 내에 있는 작은 따옴표(' ')를 지원하지 않으며 NULL 값을 지원하지 않습니다.

INSTRWORDS word_list

INSTRWORDS를 사용하여 지정된 단어가 포함된 DDL 문에 INCLUDE 또는 EXCLUDE를 적용합니다.

<word_list>의 경우 임의의 순서로 작은 따옴표 안에 단어를 제공합니다. 공백을 포함하려면 공백(및 해당하는 경우 단어)을 큰따옴표로 묶습니다. 큰따옴표를 사용하여 문장을 묶을 수도 있습니다.

INSTRWORDS를 적용하려면 지정된 모든 단어가 DDL에 있어야 합니다.

예제:

DDL INCLUDE OPTYPE ALTER OBJTEYP 'TABLE' INSTRWORDS 'ALTER CONSTRAINT " xyz"'

이 예에서는 다음 DDL 문과 일치합니다.

ALTER TABLE ADD CONSTRAINT xyz CHECK
ALTER TABLE DROP CONSTRAINT xyz

INSTRWORDS는 문자열 내에 있는 작은 따옴표(' ')를 지원하지 않으며 NULL 값을 지원하지 않습니다.

INSTRCOMMENTSWORDS word_list

(Oracle에 적합) INSTRWORDS와 동일한 방식으로 작동하지만 DDL 구문 자체가 아닌 DDL 문 내의 설명에만 적용됩니다. INSTRCOMMENTS를 사용하여 설명을 필터링 에이전트로 사용할 수 있습니다.

INSTRCOMMENTSWORDS는 문자열 내에 있는 작은 따옴표(' ')를 지원하지 않으며 NULL 값을 지원하지 않습니다.

INSTRWORDS 및 INSTRCOMMENTSWORDS를 결합하여 명령 구문 및 동일한 DDL 문의 설명에서 문자열을 필터링할 수 있습니다.

SOURCECATALOG catalog | ALLCATALOGS

다음 옵션을 사용하여 OBJNAME 절의 부적격 객체 이름이 올바른 컨테이너로 분석되는 방법을 지정합니다. 소스 데이터베이스가 Oracle 컨테이너 데이터베이스인 경우 이 옵션을 사용합니다.

SOURCECATALOG는 동일한 INCLUDE 또는 EXCLUDE 절에 지정된 모든 객체 이름에 대한 기본 컨테이너를 지정합니다. 적용하려면 SOURCECATALOG를 OBJNAME 사양보다 먼저 지정해야 합니다. 두 부분 이름이 포함된 명령문을 사용하는 것과 같은 자세한 내용은 "SOURCECATALOG"을 참조하십시오. 여기서 세 부분 객체 이름은 객체를 완전히 식별하는 데 필요합니다.

ALLCATALOGS는 동일한 INCLUDE 또는 EXCLUDE 절에 지정된 객체 이름을 분석할 때 데이터베이스의 모든 컨테이너를 고려하도록 지정합니다. ALLCATALOGS는 OBJNAME 사양 앞이나 뒤에 배치할 수 있습니다.

다음은 파라미터 파일에 다른 카탈로그 사양이 있을 때 제공되는 우선 순위입니다.

  1. INCLUDE 또는 EXCLUDE 절의 ALLCATALOGS는 INCLUDE 또는 EXCLUDE 절과 매개변수 파일의 루트에 있는 모든 SOURCECATALOG 사양을 무효화하고, OBJNAME 절에 있는 전체 객체 이름의 컨테이너 사양을 무효화합니다.

  2. OBJNAME 절의 명시적 카탈로그 지정은 ALLCATALOGS가 아닌 SOURCECATALOG의 모든 인스턴스를 무효화합니다.

  3. INCLUDE 또는 EXCLUDE 절의 SOURCECATALOG는 TABLE 또는 MAP 문의 루트에 지정된 전역 SOURCECATALOG 매개변수를 무효화합니다.

  4. INCLUDE 또는 EXCLUDE 절이 SOURCECATALOG 또는 ALLCATALOGS를 지정하지 않은 경우 전역 SOURCECATALOG 매개변수는 OBJNAME 절의 부적격 객체 이름에 적용됩니다.

  5. 위의 파라미터가 없으면 모든 카탈로그가 고려됩니다.

STAYMETADATA

(Oracle의 경우 적합합니다). 메타데이터가 Extract에 의해 캡처되거나 Replicat에 의해 적용되지 않도록 합니다.

Extract가 테이블에서 DML를 처음 발견하면 해당 테이블의 메타데이터가 검색됩니다. 해당 테이블에서 DDL가 발견되면 이전 메타데이터가 무효화됩니다. 해당 테이블의 다음 DML는 새 메타데이터와 일치하므로 대상 테이블 구조는 항상 소스의 구조와 최신 상태입니다.

그러나 특정 DDL 작업이 테이블의 메타데이터에 영향을 주지 않는다는 것을 알고 있는 경우 현재 메타데이터가 검색되거나 복제되지 않도록 STAYMETADATA를 사용할 수 있습니다. 이와 같이 성능이 향상되어 임포트 및 익스포트와 같은 작업에 도움이 됩니다. 이러한 작업에서는 DDL를 자르고 제약 조건을 사용 안함으로 설정하는 경우가 많습니다. 이러한 작업은 후속 데이터 복제의 무결성과 관련이 있으므로 테이블 구조에 영향을 주지 않으므로 이러한 경우에는 무시해도 됩니다. 예를 들어, ALTER TABLE ADD FOREIGN KEY는 테이블 메타데이터에 영향을 주지 않습니다.

이를 선택적으로 적용할 수 있는 방법의 예는 다음과 같습니다.

DDL INCLUDE ALL INCLUDE STAYMETADATA OBJNAME xyz

이 예에서는 모든 DDL가 복제에 포함되지만 xyz 객체에서 작동하는 DDL만 STAYMETADATA에 적용됨을 나타냅니다.

STAYMETADATA도 EXCLUDE 절에서 동일한 방법으로 사용할 수 있습니다.

STAYMETADATA는 메타데이터 무결성을 보장하기 위해 소스 및 대상에서 동일한 방식으로 사용해야 합니다.

STAYMETADATA를 사용 중인 경우 보고서 파일에 메시지가 추가됩니다. DDL 보고는 REPORT 옵션을 사용하여 DDLOPTIONS 매개변수로 제어됩니다.

이 동일한 기능은 @ddl_staymetadata 스크립트를 사용하여 소스에서 발생하는 모든 DDL에 전역적으로 적용할 수 있습니다.

이 옵션은 Oracle GoldenGate 기술 지원 직원의 지원과 함께 사용해야 합니다. DDL가 객체 메타데이터에 영향을 미치는 것이 항상 분명하지는 않을 수 있기 때문입니다. 부적절하게 사용되는 경우 복제 환경의 무결성이 손상될 수 있습니다.

예제

다음은 다양한 사용 사례의 몇 가지 예입니다.

예제 1: DDL AUTOSCHEMA 사용

DDL AUTOSCHEMA INCLUDE/EXCLUDE OPTYPE 절을 사용하여 DDL 유형을 기반으로 필터링(예제 1에 표시된 것과 유사)을 사용으로 설정할 수도 있습니다.

예를 들어, hr 스키마에 대해 AUTOSCHEMA를 사용으로 설정하지만 finance 스키마를 제외하려면 다음 스크립트를 사용합니다.

 DDL AUTOSCHEMA &
 INCLUDE OBJNAME hr.* &
 EXCLUDE OBJNAME finance.*

 MAP hr.*, TARGET hr.*;
 MAP finance.*, TARGET finance.*;

예제 2: DDL 매개변수 옵션 결합

다음은 DDL 매개변수의 옵션을 결합하는 방법의 예입니다.

DDL  &
INCLUDE UNMAPPED &
    OPTYPE alter &
    OBJTYPE 'table' &
    OBJNAME users.tab* &
INCLUDE MAPPED OBJNAME * &
EXCLUDE MAPPED OBJNAME temporary.tab

이 명령문의 결합된 필터 조건은 다음을 지정합니다.

예 3: 이벤트 작업 포함

다음 예에서는 모든 DDL 레코드에 대해 REPORT의 이벤트 작업을 지정합니다.

DDL INCLUDE ALL EVENTACTIONS (REPORT)

예 4: DDL의 하위 세트에서 이벤트 작업 사용

다음 예에서는 DDL의 하위 세트에서 EVENTACTIONS를 사용하는 방법을 보여줍니다. 모든 DDL는 복제되지만 명시적으로 이름이 지정된 객체에서 실행되는 DDL만 REPORT 및 LOG의 이벤트 작업을 트리거할 수 있습니다.

DDL INCLUDE ALL &
    INCLUDE OBJNAME sales.t* EVENTACTIONS (REPORT) &
    INCLUDE OBJNAME fin.my_tab EVENTACTIONS (LOG INFO)

예제 5: <source> Oracle 컨테이너 데이터베이스의 객체에 대해 실행되는 DDL에 대해 <catalog> 이름을 지정하는 다양한 방법

다음 예제는 소스 Oracle 컨테이너 데이터베이스의 객체에 대해 실행되는 DDL에 대한 카탈로그 이름을 지정하는 다양한 방법을 보여줍니다.

SOURCECATALOG pdb1
DDL INCLUDE OBJNAME sch1.obj1 INCLUDE SOURCECATALOG pdb2 OBJNAME sch2.obj2
DDL INCLUDE ALLCATALOGS OBJNAME sch.obj
DDL INCLUDE ALLCATALOGS OBJNAME pdb.sch.obj

예제 6: ALLOWEMPTYOBJECT 및 ALLOWEMPTYOWNER의 조합된 사용을 보여줍니다.

다음은 ALLOWEMPTYOBJECT 및 ALLOWEMPTYOWNER의 결합된 사용을 보여줍니다.

DDL INCLUDE pdb.*.* ALLOWEMPTYOWNER ALLOWEMPTYOBJECT