모든 페이지
1 / 1

Loading...

DDL Rule

ProSync 사용자는 적용 프로세스의 설정 파일에서 DDL 파라미터를 설정할 수 있다. DDL 파라미터는 동기화할 DDL에 대한 설정이다.

DDL 파라미터는 하나 이상의 DDL Rule 문장으로 구성된다. DDL Rule에는 DDL 동기화를 포함/배제할 대상과 DDL 종류를 명시할 수 있다.

사용법

DDL=([SET] [RANGE], TYPE=('[DDL OPERATION] [DDL OBJECT]', ...))
항목
설명

[SET]

INCLUDE 또는 EXCLUDE를 명시할 수 있다.

  • INCLUDE: 기술된 규칙에 대해 동기화한다.

  • EXCLUDE: 기술된 규칙에 대해 동기화하지 않는다. 어떠한 INCLUDE보다 EXCLUDE를 우선시한다.

다음은 설정 가능한 [DDL OPERATION]과 [DDL OBJECT]의 조합이다. Source DB가 Tibero인 경우와 Oracle인 경우 동일하게 지원한다.

  • O : 지원

  • △ : 특정 조건에서만 지원 (비고 참조)

  • X : 미지원

DDL OBJECT
CREATE
ALTER
DROP
비고

위 조합 외에 COMMENT ON과 TRUNCATE TABLE을 지원한다.

다음 DDL은 동기화를 지원하지 않으며, 추출 단계에서 skip 처리된다.

  • GRANT, REVOKE

  • RENAME (ALTER ... RENAME 구문은 ALTER로 동기화 설정하여 사용할 수 있다.)

  • ALTER DATABASE LINK,

다음은 모든 스키마에 대해서 모든 종류의 DDL 동기화를 하지만, 스키마 EXCLUDED_USR의 모든 테이블에 대한 DDL 동기화는 배제하는 예제이다.

다음은 동기화 대상 테이블에 대해 TABLE을 대상으로 하는 DDL을 동기화하고, INCLUDED_USR의 모든 오브젝트 이름에 대해 INDEX를 대상으로 하는 DDL을 동기화한다. 반면, 오브젝트 이름이 EXCLUDED_USR.IDX1일 경우 INDEX를 대상으로 하는 DDL을 동기화하지 않는다.

다음은 SRCUSR의 모든 테이블에 대해 TYPE에 해당되는 DDL을 동기화하지만, SRCUSR.T1에 대해서는 DROP TABLE과 CREATE TABLE에 해당되는 DDL을 동기화하지 않는다.

  • DDL 문장 크기 동기화할 DDL 문장의 각 요소는 128글자를 넘을 수 없다.

  • 설정 전 확인 DDL 파라미터의 대상과, 동기화할 DDL 종류가 정확한지 Wildcard를 고려하여 확인하고 설정한다. 다른 DB나 대상에게 먼저 적용해보고 설정하는 것을 권장한다.

  • CREATE TABLE 이후 동기화 CREATE TABLE에 대한 DDL 동기화 후 생성된 테이블을 DML 동기화 하려면 동기화 대상에 추가해야 한다. Admin 명령으로 수동 등록하거나 AUTO_SYNC_ON_CREATE=Y로 자동 등록할 수 있다. 반면 DDL은 Rule에 의해 생성된 직후부터 동기화 될 수 있으므로 주의한다.

TRUNCATE TABLE도 지원한다.

INDEX

O

O

O

VIEW

O

O

O

MATERIALIZED VIEW

O

△

O

ALTER MATERIALIZED VIEW는 추출·전달되며, Target DB가 Tibero인 경우에만 반영(apply) 단계에서 skip된다.

MATERIALIZED VIEW LOG

O

O

O

SEQUENCE

O

O

O

SYNONYM

O

X

O

PUBLIC SYNONYM도 SYNONYM과 동일한 종류로 처리된다.

PROCEDURE

O

O

O

FUNCTION

O

O

O

PACKAGE

O

O

O

PACKAGE BODY

O

O

O

TRIGGER

O

O

O

TYPE

O

O

O

TYPE BODY

O

O

O

USER

O

O

O

ROLE

△

△

△

스키마 비종속 객체로 INCLUDE ALL에서만 동기화된다. CREATE / ALTER는 비밀번호를 명시하지 않은 경우에만 지원한다.

TABLESPACE

△

△

△

스키마 비종속 객체로 INCLUDE ALL에서만 동기화된다. Target DB가 Oracle CDB-PDB 구성인 경우 아래 유의사항의 제약을 함께 확인한다.

DATABASE LINK

△

X

△

스키마 비종속 객체로 INCLUDE ALL에서만 동기화된다. PUBLIC DATABASE LINK도 DATABASE LINK와 동일한 종류로 처리된다.

DIRECTORY

△

X

△

스키마 비종속 객체로 INCLUDE ALL에서만 동기화된다.

LIBRARY

△

X

△

스키마 비종속 객체로 INCLUDE ALL에서만 동기화된다.

ALTER PUBLIC DATABASE LINK
implicit DDL CREATE TABLE에 대한 DDL 동기화 실행 중 컬럼의 PRIMARY KEY로 인해 INDEX 생성이 되는 것처럼 명시되지 않은 DDL을 implicit DDL이라 하며, 동기화 설정할 때 이를 주의한다.
  • RENAME 지원 DDL 중 RENAME은 지원하지 않는다. ALTER ... RENAME을 이용한 DDL 구문은 ALTER를 동기화 설정하여 사용할 수 있다.

  • ORACLE LOGMNR Source DB가 Oracle, logmnr 를 사용할 때 동기화 대상에 대한 DDL 동기화만 지원한다.

  • INDEX / CONSTRAINTS 관련 주의사항 INDEX / CONSTRAINTS의 경우 SRC/TAR DB에서 이름이 다를 경우 동기화가 불가능하다.

  • DDL 설정 조합 복수 개의 DDL 룰에 대한 설정 시 아래와 같은 형태로 명시한다.

  • OBJECT 동기화 DDL 동기화의 경우 INCLUDE DEFAULT 사용 시 오브젝트에 대한 DDL 동기화는 수행되지 않으며, 오브젝트에 대한 DDL 동기화 수행을 원하는 경우 직접 명시해야한다

  • 스키마 미명시 DDL 구문의 동기화 제한 DDL 구문에서 대상 객체의 스키마(Schema) 가 명시되지 않은 경우, 해당 구문은 동기화가 수행되지 않는다. 따라서 스키마를 명시한 형태의 DDL 구문으로 작성해야만 동기화가 가능하다.

    예시

  • SYS 스키마 DDL 동기화 제약사항 스키마가 SYS인 경우, 해당 스키마를 대상으로 수행되는 모든 DDL은 동기화 시 Skip 처리된다.

  • 스키마 비종속 객체(Non-Schema Object) 동기화 제약사항

    TABLESPACE, DIRECTORY, DATABASE LINK, ROLE, LIBRARY 객체는 특정 스키마에 종속되지 않는 객체로, DDL 동기화 시 INCLUDE ALL 옵션이 설정된 경우에만 동기화를 지원한다. INCLUDE DEFAULT인 경우 동기화를 지원하지 않는다.

  • Password 포함 DDL 동기화 제약사항

    CREATE ROLE, ALTER ROLE, CREATE [PUBLIC] DATABASE LINK 등 비밀번호 정보가 포함될 수 있는 DDL 문장은 비밀번호를 명시하지 않는 경우에만 DDL 동기화를 지원한다.

  • Target Oracle CDB-PDB 환경의 TABLESPACE 동기화 제약사항

    ProSync는 DDL 문장을 Target DB 세션에서 그대로 수행하며, DATAFILE 경로를 Target DB 기준으로 변환하지 않는다. Target DB가 Oracle CDB-PDB 구성인 경우 TABLESPACE 관련 DDL은 다음 제약을 갖는다.

    • TABLESPACE는 Target 접속 정보(TAR_DB_NAME)가 가리키는 컨테이너에 생성된다. 접속 서비스가 PDB가 아닌 CDB(CDB$ROOT)를 가리키면 TABLESPACE도 CDB에 생성되므로, 동기화 대상 PDB의 서비스로 접속하도록 설정해야 한다.

    • DATAFILE을 파일명만(상대 경로) 명시한 DDL은 PDB 전용 디렉터리가 아니라 CDB와 모든 PDB가 공유하는 디렉터리($ORACLE_HOME/dbs)에 데이터 파일을 생성한다. Target에 DB_CREATE_FILE_DEST가 설정되어 있는 경우에만 해당 위치에 PDB별로 생성된다. 공유 디렉터리에 생성되므로 다른 컨테이너가 같은 이름의 데이터 파일을 이미 사용 중이면 ORA-01537, 이전에 생성된 파일이 남아 있으면 ORA-01119 / ORA-27038로 CREATE TABLESPACE가 실패한다. Source DB 기준의 절대 경로가 명시된 경우에도 Target에 동일한 경로가 없으면 실패한다.

    • CREATE TABLESPACE가 실패한 뒤 해당 TABLESPACE를 참조하는 CREATE TABLE이 동기화되면 ORA-00959: tablespace ... does not exist로 실패한다. 반영에 실패한 DDL은 기본 설정(DISCARD_DDL_YN=N)에서 계속 재시도되므로 이후 동기화가 진행되지 않는다. DISCARD_DDL_YN=Y로 설정하면 실패한 TABLESPACE DDL은 discard되지만, CREATE TABLE은 discard 대상이 아니므로 동일하게 재시도된다.

    따라서 Target이 CDB-PDB 구성인 환경에서는 Target PDB에 TABLESPACE를 미리 생성해 두고 DDL Rule에서 TABLESPACE 관련 DDL을 동기화 대상에서 제외하거나, Target에 DB_CREATE_FILE_DEST를 설정하여 데이터 파일이 PDB별 경로에 생성되도록 구성할 것을 권장한다.

  • [RANGE]

    ALL 또는 DEFAULT 중 하나를 명시하거나, DB의 오브젝트 이름을 직접 명시할 수 있다.

    • ALL: 모든 스키마, 테이블에 대해 적용된다.

    • DEFAULT: 모든 동기화 대상 테이블에 대해 적용된다.

    • 오브젝트 이름을 직접 명시: 대상에 대해 적용된다.

    TYPE

    TYPE은 하나 이상의 DDL OPERATION과 DDL OBJECT 쌍으로 구성된다. 지정되어 있지 않는 경우, Wildcard로 처리한다.

    [DDL OPERATION]

    Rule에 적용할 DDL 종류를 명시한다.

    [DDL OBJECT]

    Rule에 적용할 DDL 종류에 대한 대상을 명시한다.

    TABLE

    O

    O

    참고

    [RANGE]의 오브젝트 이름이나 [DDL OPERATION], [DDL OBJECT]에 %를 포함시켜 wildcard로 처리할 수 있다.

    Source DB가 Oracle인 경우 [DDL OPERATION]과 [DDL OBJECT]에 '%'를 사용할 수 없다.

    지원 DDL 종류

    참고

    TYPE에는 위 표의 이름을 그대로 명시해야 한다. 예를 들어 Materialized View는 TYPE=('CREATE MATERIALIZED VIEW')와 같이 명시하며, MVIEW와 같은 약어는 인식되지 않는다.

    지원하지 않는 DDL

    예제

    DDL 동기화 설정 시 유의사항

    주의 DDL=(INCLUDE ALL, TYPE=('%')) 설정 시, Source DB의 모든 스키마에서 수행되는 모든 타입의 DDL이 동기화된다. 동기화 대상 여부와 관계없이 모든 DDL이 적용되므로 사용 시 주의가 필요하다. 추가적으로 INCLUDE ALL로 설정하는 경우 설치될 Instance 는 단일 Instance 로 구성되어야 한다.

    O

    DDL=([SET] [RANGE], TYPE=('[DDL OPERATION] [DDL OBJECT]', ...)
                    [SET] [RANGE], TYPE=('[DDL OPERATION] [DDL OBJECT]', ...) ....)
    CREATE TABLE TEST_TABLE2 (
        c1 NUMBER,
        CONSTRAINT fk_test FOREIGN KEY (c1) REFERENCES [스키마명].TEST_TABLE1 (c1)
    );
    DDL=(
        INCLUDE ALL, TYPE=('%')
        EXCLUDE EXCLUDED_USR.%, TYPE=('%')
    )
    DDL=(
        INCLUDE DEFAULT, TYPE=('% TABLE')
        INCLUDE INCLUDED_USR.%, TYPE=('% INDEX')
        EXCLUDE EXCLUDED_USR.IDX1, TYPE=('% INDEX')
    )
    DDL=(
        INCLUDE SRCUSR.%, TYPE=('DROP TABLE', 'ALTER TABLE', 'TRUNCATE TABLE')
        EXCLUDE SRCUSR.T1, TYPE=('DROP TABLE', 'CREATE TABLE')
    )