콘텐츠로 이동

5. DDL 문 복제#

개요#

DDL 문 복제는 지역 서버에서 이중화 대상에 수행된 DDL 문을 원격 서버로도 동일하게 복제하는 기능이다.

DDL 문 복제를 수행하면 트랜잭션은 동기식으로 동작하여, 주 트랜잭션 또는 복제 트랜잭션 중 하나에서 DDL 문이 실패할 경우 해당 DDL 문은 실패한다. 또한, 지역 서버와 원격 서버의 이중화 대상 테이블이 잠금 상태가 되어 트랜잭션 접근이 제한된다.

DDL 문 복제 프로퍼티#

DDL 문 복제는 관련 프로퍼티를 활성화하여 사용할 수 있다.

프로퍼티 설명 기본값
REPLICATION_DDL_SYNC DDL 문 복제 기능을 활성화 한다. 0

수행 조건#

DDL 문 복제 기능을 사용하려면 다음 조건을 만족해야 한다.

  • 지역 서버와 원격 서버에서 이중화가 모두 시작된 상태여야 한다.
  • 지역 서버와 원격 서버의 이중화 프로토콜 버전이 같아야 한다.
  • 지역 서버와 원격 서버에서 DDL 문을 수행할 이중화 대상의 이름과 소유자가 같아야 한다.

제약 사항#

다음과 같은 이중화 객체 또는 대상에는 DDL 문 복제를 수행할 수 없다.

  • EAGER 모드 이중화 객체
  • 글로벌 논파티션드 인덱스가 있는 파티션드 테이블
  • PROPAGATION 롤이 지정된 이중화 객체
  • 복구 옵션을 설정한 이중화 객체

다음의 구문은 DDL 문 복제를 수행할 수 없다.

  • 인덱스 파티션 재구축
  • 권한 부여/회수
  • 트리거 생성/삭제


DDL 문 복제 수행 방법#

이 절에서는 DDL 문 복제를 수행하는 방법에 대하여 설명한다. 보다 자세한 절차는 DDL 문 복제 예제를 참고한다.

아래 수행 방법에서는 DDL 문을 수행할 서버를 지역 서버, DDL 문 복제가 수행되는 서버를 원격 서버로 가정한다. 또한, 이중화는 두 서버에서 모두 시작한 상태라고 가정한다.

절차 1. 서비스 이전#

  1. 서비스를 DDL 문을 수행하는 지역 서버로 이전한다.

  2. 서비스가 정상적으로 이전되었는지 확인한다.

    원격 서버에서 아래 조회 구문을 실행하여 결과가 0인지 확인한다.

    SELECT COUNT(*) FROM V$SESSION WHERE ID <> SESSION_ID();
    

절차 2. 프로퍼티 설정#

지역 서버와 원격 서버에서 DDL 문 수행에 필요한 프로퍼티를 설정한다.

REPLICATION_DDL_SYNC 설정 시 지역 서버에서는 ALTER SESSION, 원격 서버에서는 ALTER SYSTEM을 사용해야 한다는 점에 주의한다.

  • 지역 서버에서 변경해야 할 프로퍼티

    ALTER SYSTEM SET REPLICATION_DDL_ENABLE = 1;
    ALTER SYSTEM SET REPLICATION_DDL_ENABLE_LEVEL = 1;
    ALTER SESSION SET REPLICATION_DDL_SYNC = 1;
    
  • 원격 서버에서 변경해야 할 프로퍼티

    ALTER SYSTEM SET REPLICATION_DDL_ENABLE = 1;
    ALTER SYSTEM SET REPLICATION_DDL_ENABLE_LEVEL = 1;
    ALTER SYSTEM SET REPLICATION_DDL_SYNC=1;
    ALTER SYSTEM SET REPLICATION_SQL_APPLY_ENABLE = 1;
    

절차 3. 세션의 이중화 모드 설정#

지역 서버에서 세션의 이중화 모드1DEFAULT로 설정하여 이중화 객체의 설정을 따르도록 한다.

ALTER SESSION SET REPLICATION = DEFAULT;

절차 4. DDL 문 수행#

  1. DDL 문을 수행하기 전, 지역 서버와 원격 서버에서 다음 구문을 실행하여 남아있는 이중화 갭을 모두 반영한다.

    ALTER REPLICATION replication_name FLUSH;
    
  2. 지역 서버에서 DDL 문을 수행한다.

절차 5. 프로퍼티 설정 원복#

DDL 문 복제에 사용된 프로퍼티들은 DDL 문 복제가 끝나는 즉시 기본값으로 변경해야 한다.

  • 지역 서버에서 기본값으로 원복

    ALTER SYSTEM SET REPLICATION_DDL_ENABLE = 0; 
    ALTER SYSTEM SET REPLICATION_DDL_ENABLE_LEVEL = 0;   
    ALTER SESSION SET REPLICATION_DDL_SYNC = 0;
    
  • 원격 서버에서 기본값으로 원복

    ALTER SYSTEM SET REPLICATION_DDL_ENABLE = 0;
    ALTER SYSTEM SET REPLICATION_DDL_ENABLE_LEVEL = 0;
    ALTER SYSTEM SET REPLICATION_DDL_SYNC = 0;
    ALTER SYSTEM SET REPLICATION_SQL_APPLY_ENABLE = 0;
    

절차 6. 서비스 분배#

서비스를 원래대로 분배한다.

작업 절차 표#

작업 절차 지역 서버 원격 서버
절차 1. 서비스 이전 서비스 이전 지역 서버로 서비스 이전
서비스 이전 확인 SELECT COUNT(*) FROM V$SESSION WHERE ID <> SESSION_ID();
절차 2. 프로퍼티 설정 DDL 문 수행 활성화 ALTER SYSTEM SET REPLICATION_DDL_ENABLE = 1; ALTER SYSTEM SET REPLICATION_DDL_ENABLE = 1;
DDL 문 수행 레벨 설정 ALTER SYSTEM SET REPLICATION_DDL_ENABLE_LEVEL = 1; ALTER SYSTEM SET REPLICATION_DDL_ENABLE_LEVEL = 1;
SQL 반영 모드 활성화 ALTER SYSTEM SET REPLICATION_SQL_APPLY_ENABLE = 1;
DDL 문 복제 활성화 ALTER SESSION SET REPLICATION_DDL_SYNC = 1; ALTER SYSTEM SET REPLICATION_DDL_SYNC = 1;
절차 3. 세션의 이중화 모드 설정 ALTER SESSION SET REPLICATION = DEFAULT;
절차 4. DDL 문 수행 이중화 갭 해소(원격서버) ALTER REPLICATION rep1 FLUSH;
이중화 갭 해소(지역서버) ALTER REPLICATION rep1 FLUSH;
DDL 문 수행 DDL 문 수행
이중화 갭 해소(지역서버) ALTER REPLICATION rep1 FLUSH;
절차 5. 프로퍼티 설정 원복 DDL 문 수행 비활성화 ALTER SYSTEM SET REPLICATION_DDL_ENABLE = 0; ALTER SYSTEM SET REPLICATION_DDL_ENABLE = 0;
DDL 문 수행 레벨 비활성화 ALTER SYSTEM SET REPLICATION_DDL_ENABLE_LEVEL = 0; ALTER SYSTEM SET REPLICATION_DDL_ENABLE_LEVEL = 0;
SQL 반영 모드 비활성화 ALTER SESSION SET REPLICATION_SQL_APPLY_ENABLE = 0;
DDL 문 복제 비활성화 ALTER SESSION SET REPLICATION_DDL_SYNC = 0; ALTER SYSTEM SET REPLICATION_DDL_SYNC = 0;
절차 6. 서비스 분배 원격 서버로 서비스 분배


DDL 문 복제 예제#

이 절에서는 DDL 문 복제 기능을 사용하여 이중화 대상에 DDL 문을 수행하는 세 가지 예제를 소개한다.

모든 예제에서 다음과 같은 용어를 사용한다.

  • 지역 서버: DDL 문을 수행하는 서버
  • 원격 서버: DDL 문 복제가 수행되는 서버

또한, 모든 예제는 두 서버에서 이중화가 이미 시작된 상태를 전제로 한다.

예제 1 : TRUNCATE 문 복제#

이 예제는 지역 서버에서 t1 테이블에 대해 TRUNCATION 문을 수행하면, 해당 문이 원격 서버로 복제되는 과정을 보여준다.

여기서 t1 테이블은 이중화 객체 rep1에 포함된 이중화 대상 테이블이라고 가정한다.

작업 절차 지역 서버 원격 서버
절차 1. 서비스 이전 서비스 이전 지역 서버로 서비스 이전
서비스 이전 확인 SELECT COUNT(*) FROM V$SESSION WHERE ID <> SESSION_ID();
절차 2. 프로퍼티 설정 DDL 문 수행 활성화 ALTER SYSTEM SET REPLICATION_DDL_ENABLE = 1; ALTER SYSTEM SET REPLICATION_DDL_ENABLE = 1;
DDL 문 복제 활성화 ALTER SESSION SET REPLICATION_DDL_SYNC = 1; ALTER SYSTEM SET REPLICATION_DDL_SYNC = 1;
절차 3. 세션의 이중화 모드 설정 ALTER SESSION SET REPLICATION = DEFAULT;
절차 4. DDL 문 수행 이중화 갭 해소 ALTER REPLICATION rep1 FLUSH;
이중화 갭 해소 ALTER REPLICATION rep1 FLUSH;
DDL 문 수행 TRUNCATE TABLE t1;
이중화 갭 해소 ALTER REPLICATION rep1 FLUSH;
절차 5. 프로퍼티 설정 원복 DDL 문 수행 비활성화 ALTER SYSTEM SET REPLICATION_DDL_ENABLE = 0; ALTER SYSTEM SET REPLICATION_DDL_ENABLE = 0;
DDL 문 복제 비활성화 ALTER SESSION SET REPLICATION_DDL_SYNC = 0; ALTER SYSTEM SET REPLICATION_DDL_SYNC = 0;
절차 6. 서비스 분배 원격 서버로 서비스 분배

예제 2 : NOT NULL 제약조건 추가 문 복제#

이 예제는 지역 서버에서 t1 테이블의 컬럼 c1NOT NULL 제약조건을 추가하면, 해당 문이 원격 서버로 복제되는 과정을 보여준다.

여기서 t1 테이블은 이중화 객체 rep1에 포함된 이중화 대상 테이블이라고 가정한다.

작업 절차 지역 서버 원격 서버
절차 1. 서비스 이전 서비스 이전 지역 서버로 서비스 이전
서비스 이전 확인 SELECT COUNT(*) FROM V$SESSION WHERE ID <> SESSION_ID();
절차 2. 프로퍼티 설정 DDL 문 수행 활성화 ALTER SYSTEM SET REPLICATION_DDL_ENABLE = 1; ALTER SYSTEM SET REPLICATION_DDL_ENABLE = 1;
DDL 문 수행 레벨 설정 ALTER SYSTEM SET REPLICATION_DDL_ENABLE_LEVEL = 1; ALTER SYSTEM SET REPLICATION_DDL_ENABLE_LEVEL = 1;
SQL 반영 모드 활성화 ALTER SYSTEM SET REPLICATION_SQL_APPLY_ENABLE = 1;
DDL 문 복제 활성화 ALTER SESSION SET REPLICATION_DDL_SYNC = 1; ALTER SYSTEM SET REPLICATION_DDL_SYNC = 1;
절차 3. 세션의 이중화 모드 설정 ALTER SESSION SET REPLICATION = DEFAULT;
절차 4. DDL 문 수행 이중화 갭 해소 ALTER REPLICATION rep1 FLUSH;
이중화 갭 해소 ALTER REPLICATION rep1 FLUSH;
DDL 문 수행 ALTER TABLE t1 ALTER COLUMN ( c1 NOT NULL );
이중화 갭 해소 ALTER REPLICATION rep1 FLUSH;
절차 5. 프로퍼티 설정 원복 DDL 문 수행 비활성화 ALTER SYSTEM SET REPLICATION_DDL_ENABLE = 0; ALTER SYSTEM SET REPLICATION_DDL_ENABLE = 0;
DDL 문 수행 레벨 설정 ALTER SYSTEM SET REPLICATION_DDL_ENABLE_LEVEL = 0; ALTER SYSTEM SET REPLICATION_DDL_ENABLE_LEVEL = 0;
SQL 반영 모드 비활성화 ALTER SYSTEM SET REPLICATION_SQL_APPLY_ENABLE = 0;
DDL 문 복제 비활성화 ALTER SESSION SET REPLICATION_DDL_SYNC = 0; ALTER SYSTEM SET REPLICATION_DDL_SYNC = 0;
절차 6. 서비스 분배 원격 서버로 서비스 분배

예제 3 : 삼중화 환경에서 DDL 문 복제 수행#

다음은 삼중화 환경에서 이중화 대상 테이블에 NOT NULL 제약조건을 가진 칼럼을 추가하는 예제이다.

이 예제에서 쓰인 이중화와 관련된 관련 정보는 다음과 같다.

  • 삼중화에 참여하는 각 서버의 명칭:

    • 지역 서버: DDL 문을 수행하는 서버
    • 원격 서버 1: DDL 동기화가 수행되는 서버
    • 원격 서버 2: DDL 동기화가 수행되는 서버
  • 이중화 객체 이름:

    • rep1: 지역 서버와 원격 서버 1 간의 이중화 객체
    • rep2: 지역 서버와 원격 서버 2 간의 이중화 객체
    • rep3: 원격 서버 1과 원격 서버 2 간의 이중화 객체
  • 이중화 대상 테이블: T1
작업 절차 지역 서버 원격 서버 1 원격 서버 2
절차 1. 서비스 이전 서비스 이전 지역 서버로 서비스 이전 지역 서버로 서비스 이전
서비스 이전 확인 SELECT COUNT(*) FROM V$SESSION WHERE ID <> SESSION_ID(); SELECT COUNT(*) FROM V$SESSION WHERE ID <> SESSION_ID();
절차 2. 프로퍼티 설정 DDL 문 수행 활성화 ALTER SYSTEM SET REPLICATION_DDL_ENABLE = 1; ALTER SYSTEM SET REPLICATION_DDL_ENABLE = 1; ALTER SYSTEM SET REPLICATION_DDL_ENABLE = 1;
DDL 문 수행 레벨 설정 ALTER SYSTEM SET REPLICATION_DDL_ENABLE_LEVEL = 1; ALTER SYSTEM SET REPLICATION_DDL_ENABLE_LEVEL = 1; ALTER SYSTEM SET REPLICATION_DDL_ENABLE_LEVEL = 1;
SQL 반영 모드 활성화 ALTER SYSTEM SET REPLICATION_SQL_APPLY_ENABLE = 1; ALTER SYSTEM SET REPLICATION_SQL_APPLY_ENABLE = 1;
DDL 문 복제 활성화 ALTER SESSION SET REPLICATION_DDL_SYNC = 1; ALTER SESSION SET REPLICATION_DDL_SYNC = 1; ALTER SESSION SET REPLICATION_DDL_SYNC = 1;
절차 3. 세션의 이중화 모드 설정 ALTER SESSION SET REPLICATION = DEFAULT;
절차 4. DDL 문 수행 이중화 갭 해소 ALTER REPLICATION rep1 FLUSH;
ALTER REPLICATION rep3 FLUSH;
ALTER REPLICATION rep2 FLUSH;
ALTER REPLICATION rep3 FLUSH;
이중화 갭 해소 ALTER REPLICATION rep1 FLUSH;
ALTER REPLICATION rep2 FLUSH;
DDL 문 수행 ALTER TABLE t1 ALTER COLUMN ( c1 NOT NULL );
이중화 갭 해소 ALTER REPLICATION rep1 FLUSH;
ALTER REPLICATION rep2 FLUSH;
절차 5. 프로퍼티 설정 원복 DDL 문 수행 비활성화 ALTER SYSTEM SET REPLICATION_DDL_ENABLE = 0; ALTER SYSTEM SET REPLICATION_DDL_ENABLE = 0; ALTER SYSTEM SET REPLICATION_DDL_ENABLE = 0;
DDL 문 수행 레벨 설정 ALTER SYSTEM SET REPLICATION_DDL_ENABLE_LEVEL = 0; ALTER SYSTEM SET REPLICATION_DDL_ENABLE_LEVEL = 0; ALTER SYSTEM SET REPLICATION_DDL_ENABLE_LEVEL = 0;
SQL 반영 모드 비활성화 ALTER SYSTEM SET REPLICATION_SQL_APPLY_ENABLE = 0; ALTER SYSTEM SET REPLICATION_SQL_APPLY_ENABLE = 0;
DDL 문 복제 비활성화 ALTER SESSION SET REPLICATION_DDL_SYNC = 0; ALTER SYSTEM SET REPLICATION_DDL_SYNC = 0; ALTER SYSTEM SET REPLICATION_DDL_SYNC = 0;
절차 6. 서비스 분배 원격 서버 1과 원격 서버 2로 서비스 분배

  1. 세션의 이중화 모드를 DEFAULT로 설정하면, 이중화 객체에 설정된 모드(LAZY 또는 EAGER)에 따라 이중화가 수행된다. 반면, NONE으로 설정하면 모든 이중화가 비활성화된다.