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를 우선시한다.
[RANGE]
ALL 또는 DEFAULT 중 하나를 명시하거나, DB의 오브젝트 이름을 직접 명시할 수 있다.
ALL: 모든 스키마, 테이블에 대해 적용된다.
DEFAULT: 모든 동기화 대상 테이블에 대해 적용된다.
오브젝트 이름을 직접 명시: 대상에 대해 적용된다.
TYPE
TYPE은 하나 이상의 DDL OPERATION과 DDL OBJECT 쌍으로 구성된다. 지정되어 있지 않는 경우, Wildcard로 처리한다.
[DDL OPERATION]
Rule에 적용할 DDL 종류를 명시한다.
[DDL OBJECT]
Rule에 적용할 DDL 종류에 대한 대상을 명시한다.
지원 DDL 종류
다음은 설정 가능한 [DDL OPERATION]과 [DDL OBJECT]의 조합이다. Source DB가 Tibero인 경우와 Oracle인 경우 동일하게 지원한다.
O : 지원
△ : 특정 조건에서만 지원 (비고 참조)
X : 미지원
TABLE
O
O
O
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에서만 동기화된다.
위 조합 외에 COMMENT ON과 TRUNCATE TABLE을 지원한다.
지원하지 않는 DDL
다음 DDL은 동기화를 지원하지 않으며, 추출 단계에서 skip 처리된다.
GRANT,REVOKERENAME(ALTER ... RENAME구문은 ALTER로 동기화 설정하여 사용할 수 있다.)ALTER DATABASE LINK,ALTER PUBLIC 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 문장 크기 동기화 할 DDL 문장의 각 요소는 128글자를 넘을 수 없다.
설정 전 확인 DDL 파라미터의 대상과, 동기화 할 DDL 종류가 정확한지 Wildcard를 고려하여 확인하고 설정한다. 다른 DB나 대상에게 먼저 적용해보고 설정하는 것을 권장한다.
CREATE TABLE 이후 동기화 CREATE TABLE에 대한 DDL 동기화 후 생성된 테이블을 DML 동기화 하려면 동기화 대상에 추가해야 한다. Admin 명령으로 수동 등록하거나
AUTO_SYNC_ON_CREATE=Y로 자동 등록할 수 있다. 반면 DDL은 Rule에 의해 생성된 직후부터 동기화 될 수 있으므로 주의한다.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별 경로에 생성되도록 구성할 것을 권장한다.
주의 DDL=(INCLUDE ALL, TYPE=('%')) 설정 시, Source DB의 모든 스키마에서 수행되는 모든 타입의 DDL이 동기화된다. 동기화 대상 여부와 관계없이 모든 DDL이 적용되므로 사용 시 주의가 필요하다. 추가적으로 INCLUDE ALL로 설정하는 경우 설치될 Instance 는 단일 Instance 로 구성되어야 한다.