콘텐츠로 이동

4. 이중화 환경에서 DDL 문 수행#

개요#

Altibase는 네트워크 기반의 이중화 기법을 활용하여 지역 서버에서 발생한 트랜잭션 로그를 상대 서버로 전송함으로써 데이터를 동기화한다. 그러나 DDL 작업으로 생성된 트랜잭션 로그는 전송되지 않는다. 이는 DDL 문이 이중화 대상의 메타 정보를 변경하여 서버 간 데이터 불일치를 초래할 수 있기 때문이다.

따라서 일반적으로 이중화 환경에서 DDL 문을 수행하려면, 먼저 해당 대상을 이중화 객체에서 제거한 후, 각 이중화 노드에서 DDL 작업을 개별적으로 수행해야 한다. 일반적인 DDL 문 수행 절차에 대한 자세한 내용은 부록 B. 일반적인 DDL 문 수행 절차를 참고하면 된다.

이 장에서는 Altibase 이중화 환경에서 이중화 대상을 제거하지 않고도 DDL 문을 안전하고 효율적으로 수행할 수 있는 방법을 소개한다.

DDL 문 수행 관련 프로퍼티#

기본적으로 이중화 대상에는 일부 DDL 문을 제외하고 DDL 문을 수행할 수 없다. 따라서 DDL 문을 실행하려면 관련 설정을 활성화해야 한다.

이중화 대상에 DDL 문을 수행하기 위해 설정해야 할 주요 프로퍼티는 다음과 같다.

프로퍼티 설명 기본값
REPLICATION_DDL_ENABLE DDL 문 수행을 활성화하는 프로퍼티이다. 이 값을 1로 설정하면 이중화 대상에 DDL 문을 수행할 수 있다. 0
REPLICATION_DDL_ENABLE_LEVEL 이중화 대상에 수행할 수 있는 DDL 문의 종류를 설정하는 프로퍼티이다. 0
REPLICATION_SQL_APPLY_ENABLE SQL 반영 모드를 활성화하는 프로퍼티이다. 0

제약사항#

관련 설정을 활성화하더라도 다음과 같은 이중화 객체에 속한 이중화 대상에는 DDL 문을 수행할 수 없다.

  • 복구 옵션이 설정된 이중화 객체

    먼저 이중화 객체를 삭제한 후 DDL 문을 수행하고, 이후 다시 이중화 객체를 생성해야 한다.

  • EAGER 모드로 동작하는 이중화 객체

    이러한 경우 부록 B. 일반적인 DDL 문 수행 절차를 참고해야 한다.

주의사항#

  • DDL 문을 수행하면 대상 테이블이 잠금(LOCK) 상태가 된다. 이 상태에서 주 트랜잭션이 발생하면, 수신 쓰레드는 잠금된 테이블에 복제 트랜잭션을 적용할 수 없다.

  • DDL 문을 수행하기 전이중화 갭해소해야 한다. 이중화 갭이 있는 상태에서 DDL 문을 수행하면 이중화 성능에 영향을 줄 수 있다.

  • 현재 칼럼보다 범위가 넓어질 때는 주 트랜잭션이 발생하지 않는 서버에서 먼저 DDL문을 수행해야 한다.

  • 현재 칼럼보다 범위가 좁아질 때는 주 트랜잭션이 발생하는 서버에서 먼저 DDL 문을 수행해야 한다.


수행할 수 있는 DDL 문#

이중화 대상에 수행할 수 있는 DDL 문은 REPLICATION_DDL_ENABLE_LEVEL 프로퍼티의 설정 값에 따라 달라지며, 이 값은 0 또는 1로 설정할 수 있다.

사용자는 수행하려는 DDL 문에 적합하게 이 프로퍼티를 설정해야 한다.

DDL 문 레벨 1#

다음은 REPLICATION_DDL_ENABLE_LEVEL을 1로 설정했을 때 수행할 수 있는 DDL 문이다.

Info

DDL 문 레벨 1에 속한 구문을 수행하려면, 반드시 SQL 반영 모드를 활성화해야 한다. SQL 반영 모드는 이중화 수신자 쪽에서 수행한다.

Tip

DDL 문 레벨 1로 설정하면 DDL 문 레벨 0의 구문도 모두 수행할 수 있다.

칼럼 추가 및 변경#

NOT NULL 및 유일 키 제약조건이 있는 칼럼을 추가하거나 기존 칼럼의 제약조건 및 데이터 타입을 변경할 수 있다.

ALTER TABLE table_name ADD COLUMN ( column_name DATA_TYPE NOT NULL );
ALTER TABLE table_name ADD COLUMN ( column_name DATA_TYPE UNIQUE );
ALTER TABLE table_name ADD COLUMN ( column_name DATA_TYPE LOCALUNIQUE );

ALTER TABLE table_name ALTER COLUMN ( column_name NOT NULL );
ALTER TABLE table_name ALTER COLUMN ( column_name NULL );

ALTER TABLE table_name MODIFY COLUMN ( column_name NOT NULL );
ALTER TABLE table_name MODIFY COLUMN ( column_name NULL );
ALTER TABLE table_name MODIFY COLUMN ( column_name DATA_TYPE );

칼럼 삭제#

제약조건이 있거나 함수 기반 인덱스에 사용된 칼럼을 삭제할 수 있다.

ALTER TABLE table_name DROP COLUMN column_name;

다음과 같은 칼럼은 삭제할 수 없다.

  • 프라이머리 키
  • 압축 칼럼

파티션 연산#

파티션을 분할, 합병 또는 삭제할 수 있다. 파티션 연산으로 생성되거나 삭제된 파티션은 자동으로 이중화 대상 파티션으로 추가되거나 제거된다.

ALTER TABLE table_name SPLIT PARTITION .....;
ALTER TABLE table_name MERGE PARTITIONS .....;
ALTER TABLE table_name DROP PARTITION partiton_name;

파티션 연산을 수행할 때는 다음 사항에 주의해야 한다.

  • 지역 서버와 원격 서버 모두 이중화를 중지해야 한다.
  • DDL 문에 사용된 파티션 이름은 지역 서버와 원격 서버 모두 같아야 한다.
  • 파티션 합병은 대상 파티션이 모두 이중화 대상일 때 수행할 수 있다.
  • 파티션 삭제는 파티션드 테이블에 최소 2개 이상의 파티션이 있을 때 수행할 수 있다.

테이블 제약조건 추가, 변경 및 삭제#

ALTER TABLE table_name ADD CONSTRAINT constraint_name UNIQUE ( column_name );
ALTER TABLE table_name ADD CONSTRAINT constraint_name LOCALUNIQUE ( column_name ) ;
ALTER TABLE table_name ADD CONSTRAINT constraint_name CHECK ( check_condition );
ALTER TABLE table_name RENAME CONSTRAINT constraint_name TO constraint_name;
ALTER TABLE table_name DROP CONSTRAINT constraint_name;

유일 키 인덱스와 함수 기반 인덱스 생성 및 삭제#

CREATE UNIQUE INDEX index_name ON table_name ( column_name );
CREATE INDEX index_name ON table_name ( expression );
DROP INDEX index_name; 

DDL 문 레벨 0#

다음은 REPLICATION_DDL_ENABLE_LEVEL이 0일 때 즉, DDL 문 레벨 0에서 수행할 수 있는 DDL 문이다.

제약조건이 없는 칼럼 추가#

ALTER TABLE table_name ADD COLUMN ( column_name DATA_TYPE );

다음과 같은 칼럼은 추가할 수 없다.

제약조건이 없는 칼럼 삭제#

ALTER TABLE table_name DROP COLUMN column_name;

다음과 같은 칼럼은 삭제할 수 없다.

  • 압축 칼럼
  • 프라이머리 키
  • 제약조건이 있는 칼럼
  • 함수 기반 인덱스에 사용된 칼럼

칼럼의 기본값 설정과 해제#

ALTER TABLE table_name ALTER COLUMN ( column_name SET DEFAULT value ); 
ALTER TABLE table_name ALTER COLUMN ( column_name DROP DEFAULT);

테이블 또는 파티션의 테이블스페이스 변경#

ALTER TABLE table_name ALTER TABLESPACE tablespace_name;
ALTER TABLE table_name ALTER PARTITION partition_name TABLESPACE;

테이블 또는 파티션의 데이터 전체 삭제#

ALTER TABLE table_name TRUNCATE PARTITION partition_name;
TRUNCATE TABLE table_name;

다음과 같은 칼럼을 가진 테이블의 데이터는 삭제할 수 없다.

  • 압축 칼럼

인덱스 생성과 삭제#

CREATE INDEX index_name ON table_name ( column_name );
DROP INDEX index_name;

다음과 같은 인덱스는 삭제할 수 없다.

  • 유일 키 인덱스
  • 함수 기반 인덱스

기타 구문#

다음 구문은 REPLICATION_DDL_ENABLE 프로퍼티 설정과 관계 없이 언제든지 이중화 대상에 수행할 수 있다.

디스크 인덱스 AGING#

ALTER INDEX index_name AGING;

빈 페이지 반환#

ALTER TABLE table_name COMPACT;
ALTER TABLE table_name COMPACT PARTITION partition_name;

인덱스 파티션 재구축#

ALTER INDEX REBUILD PARTITION index_partition_name;

권한 부여 및 회수#

GRANT OBJECT ...;
REVOKE OBJECT ...;

트리거 생성 및 삭제#

CREATE TRIGGER ...;
DROP TRIGGER ...;


DDL 문 수행 방법#

이중화 대상에 DDL 문 레벨 0과 DDL 문 레벨 1에 해당하는 DDL 문을 수행하는 절차를 설명한다. 권장 순서와 다르게 진행하면 데이터 불일치가 발생할 수 있다.

절차 1. 서비스 이전#

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

  2. 서비스가 모두 지역 서버로 이전되었는지 확인한다.

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

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

절차 2. 프로퍼티 설정#

지역 서버와 원격 서버에서 수행하고자 하는 DDL 문에 맞게 프로퍼티 설정을 변경한다.

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

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

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

ALTER SESSION SET REPLICATION = DEFAULT;

절차 4. DDL 문 수행#

지역 서버와 원격 서버에서 동일한 DDL 문을 수행한다.

    1. DDL 문 수행 전, 남아있는 이중화 갭을 해소:

      ALTER REPLICATION replication_name FLUSH;
      
    1. DDL 문 수행 전 이중화를 중지(파티션 대상):

      ALTER REPLICATON replication_name STOP;
      
    1. DDL 문 수행
    1. DDL 문 수행 후 이중화 시작(파티션 대상):

      ALTER REPLICATON replication_name START;
      
    1. DDL 문 수행 후 이중화 갭 해소(SQL 반영 모드를 활성화한 경우):

      ALTER REPLICATION replication_name FLUSH;
      

절차 5. SQL 반영 모드 동작 여부 확인#

원격 서버에서 모든 이중화 객체에서 SQL 반영 모드가 동작하는지 확인한다. 이중화 대상 서버에서 DDL 문이 정상적으로 수행되었으면, SQL 반영 모드로 동작 중인 이중화 객체가 없어야 한다.

다음 조회 구문을 실행하여 SQL_APPLY_TABLE_COUNT 값이 0인지 확인한다.

SELECT REP_NAME, SQL_APPLY_TABLE_COUNT FROM V$REPRECEIVER;

이 절차는 SQL 반영 모드를 활성화한 경우에만 수행한다.

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

절차 2.에서 변경한 프로퍼티들의 값은 DDL 문 수행이 끝나는 즉시 기본값으로 변경한다.

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

절차 7. 서비스 분배#

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

작업 절차 표#

작업 절차 DDL 문 레벨 0 DDL 문 레벨 1 : 테이블 혹은 칼럼 대상 DDL 문 레벨 1 : 파티션 대상
절차 1. 서비스 이전 서비스 이전 서비스를 DDL 문을 수행하는 지역 서버로 이전한다. 서비스를 DDL 문을 수행하는 지역 서버로 이전한다. 서비스를 DDL 문을 수행하는 지역 서버로 이전한다.
서비스 이전 확인 SELECT COUNT(*) FROM V$SESSION WHERE ID <> SESSION_ID(); 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;
SQL 반영 모드 활성화 - ALTER SYSTEM SET REPLICATION_SQL_APPLY_ENABLE = 1; ALTER SYSTEM SET REPLICATION_SQL_APPLY_ENABLE = 1;
절차 3. 세션의 이중화 모드 설정 ALTER SESSION SET REPLICATION_MODE = DEFAULT; ALTER SESSION SET REPLICATION_MODE = DEFAULT; ALTER SESSION SET REPLICATION_MODE = DEFAULT;
절차 4. DDL 문 수행 이중화 갭 해소 ALTER REPLICATION replication_name FLUSH; ALTER REPLICATION replication_name FLUSH; ALTER REPLICATION replication_name FLUSH;
이중화 중지(파티션 대상) - - ALTER REPLICATON replication_name STOP;
DDL 문 수행 DDL 문 수행 DDL 문 수행 DDL 문 수행
이중화 시작(파티션 대상) - - ALTER REPLICATON replication_name START;
이중화 갭 해소(SQL 반영 모드 활성화 시) - ALTER REPLICATION replication_name FLUSH; ALTER REPLICATION replication_name FLUSH;
절차 5. SQL 반영 모드 동작 여부 확인 - SELECT REP_NAME, SQL_APPLY_TABLE_COUNT FROM V$REPRECEIVER; SELECT REP_NAME, SQL_APPLY_TABLE_COUNT FROM V$REPRECEIVER;
절차 6. 프로퍼티 설정 원복 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;
절차 7. 서비스 분배 서비스를 원래대로 분배한다. 서비스를 원래대로 분배한다. 서비스를 원래대로 분배한다.


DDL 문 레벨 1 수행 예제#

예제 1 : 칼럼의 데이터 타입 변경 CHAR(5) -> CHAR(10)#

다음은 이중화 객체 rep1 에 속한 이중화 대상 테이블 T1의 칼럼 c2의 데이터 타입을 CHAR(5)에서 CHAR(10)으로 변경하는 예제이다.

이 예제는 기존보다 더 넓은 범위의 데이터 타입으로 변경하는 경우를 다룬다.

Info

기존보다 넓은 범위로 변경하는 경우, 주 트랜잭션이 발생하지 않는 서버에서 먼저 DDL문을 수행해야 한다.

Active-Standby 환경#

작업 절차 Active Standby
절차 1. 서비스 이전 Active-Standby 환경이므로 이전할 서비스가 없다.
절차 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;
절차 3. 세션의 이중화 모드 설정 ALTER SESSION SET REPLICATION = DEFAULT;
절차 4. DDL 문 수행 DDL 문 수행 ALTER TABLE T1 MODIFY COLUMN ( c2 CHAR(10) );
DDL 문 수행 전 이중화 갭 해소 ALTER REPLICATION rep1 FLUSH;
DDL 문 수행 ALTER TABLE T1 MODIFY COLUMN ( c2 CHAR(10) );
DDL 문 수행 후 이중화 갭 해소(SQL 반영 모드 활성화 시) ALTER REPLICATION rep1 FLUSH;
절차 5. SQL 반영 모드 동작 여부 확인 SELECT REP_NAME, SQL_APPLY_TABLE_COUNT FROM V$REPRECEIVER;
절차 6. 프로퍼티 원복 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;
절차 7. 서비스 분배 Active-Standby 환경이므로 분배할 서비스가 없다.

Active-Active 환경#

Active1을 DDL 문 수행 중 주 트랜잭션이 발생하는 지역 서버로 가정한다.

작업 절차 Active1 Active2
절차 1. 서비스 이전 서비스 이전 Active1로 서비스 이전
서비스 이전 확인 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; ALTER SYSTEM SET REPLICATION_SQL_APPLY_ENABLE = 1;
절차 3. 세션의 이중화 모드 설정 ALTER SESSION SET REPLICATION = DEFAULT; ALTER SESSION SET REPLICATION = DEFAULT;
절차 4. DDL 문 수행 DDL 문 수행 전 이중화 갭 해소 ALTER REPLICATION rep1 FLUSH;
DDL 문 수행 ALTER TABLE t1 MODIFY COLUMN ( C2 CHAR(10) );
DDL 문 수행 후 이중화 갭 해소(SQL 반영 모드 활성화 시) ALTER REPLICATION rep1 FLUSH;
DDL 문 수행 전 이중화 갭 해소 ALTER REPLICATION rep1 FLUSH;
DDL 문 수행 ALTER TABLE t1 MODIFY COLUMN ( C2 CHAR(10) );
DDL 문 수행 후 이중화 갭 해소(SQL 반영 모드 활성화 시) ALTER REPLICATION rep1 FLUSH;
절차 5. SQL 반영 모드 동작 여부 확인 SELECT REP_NAME, SQL_APPLY_TABLE_COUNT FROM V$REPRECEIVER; SELECT REP_NAME, SQL_APPLY_TABLE_COUNT FROM V$REPRECEIVER;
절차 6. 프로퍼티 설정 원복 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; ALTER SYSTEM SET REPLICATION_SQL_APPLY_ENABLE = 0;
절차 7. 서비스 분배 Active2로 서비스를 분배한다.

예제 2 : 테이블 제약조건 추가 - CHECK#

다음은 이중화 객체 rep1 에 속한 이중화 대상 테이블 T1의 칼럼 c2에 CHECK 제약조건을 추가하는 예제이다.

이 예제는 현재 칼럼의 값 허용 범위를 더 좁게 제한하는 경우를 다룬다.

Info

칼럼의 범위가 좁아지는 경우, 질 때는 주 트랜잭션이 발생하는 서버에서 먼저 DDL 문을 수행한다.

Active-Standby 환경#

작업 절차 Active Standby
절차 1. 서비스 이전 Active-Standby 환경이므로 이전할 서비스가 없다.
절차 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;
절차 3. 세션의 이중화 모드 설정 ALTER SESSION SET REPLICATION = DEFAULT;
절차 4. DDL 문 수행 이중화 갭 해소 ALTER REPLICATION rep1 FLUSH;
DDL 문 수행 ALTER TABLE T1 ADD CONSTRAINT T1_CHECK CHECK ( c2 < 10 );
DDL 문 수행 ALTER TABLE T1 ADD CONSTRAINT T1_CHECK CHECK ( c2 < 10 );
이중화 갭 해소(SQL 반영 모드 설정 시) ALTER REPLICATION rep1 FLUSH;
절차 5. SQL 반영 모드 동작 여부 확인 SELECT REP_NAME, SQL_APPLY_TABLE_COUNT FROM V$REPRECEIVER;
절차 6. 프로퍼티 원복 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;
절차 7. 서비스 분배 Active-Standby 환경이므로 분배할 서비스가 없다.

Active-Active 환경#

Active1을 DDL 문 수행 중 주 트랜잭션이 발생하는 지역 서버로 가정한다.

작업 절차 Active1 Active2
절차 1. 서비스 이전 서비스 이전 Active1로 서비스 이전
서비스 이전 확인 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; ALTER SYSTEM SET REPLICATION_SQL_APPLY_ENABLE = 1;
절차 3. 세션의 이중화 모드 설정 ALTER SESSION SET REPLICATION = DEFAULT; ALTER SESSION SET REPLICATION = DEFAULT;
절차. 4. DDL 문 수행 DDL 문 수행 전 이중화 갭 해소 ALTER REPLICATION rep1 FLUSH;
DDL 문 수행 ALTER TABLE t1 ADD CONSTRAINT T1_CHECK CHECK ( C2 < 10 );
DDL 문 수행 후 이중화 갭 해소(SQL 반영 모드 설정 시) ALTER REPLICATION rep1 FLUSH;
DDL 문 수행 전 이중화 갭 해소 ALTER REPLICATION rep1 FLUSH;
DDL 문 수행 ALTER TABLE t1 ADD CONSTRAINT T1_CHECK CHECK ( C2 < 10 );
DDL 문 수행 후 이중화 갭 해소(SQL 반영 모드 설정 시) ALTER REPLICATION rep1 FLUSH;
절차 5. SQL 반영 모드 동작 여부 확인 SELECT REP_NAME, SQL_APPLY_TABLE_COUNT FROM V$REPRECEIVER; SELECT REP_NAME, SQL_APPLY_TABLE_COUNT FROM V$REPRECEIVER;
절차 6. 프로퍼티 설정 원복 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; ALTER SYSTEM SET REPLICATION_SQL_APPLY_ENABLE = 0;
절차 7. 서비스 분배 Active2로 서비스를 분배

예제 3 : 파티션 분할#

다음은 이중화 객체 rep1에 속한 이중화 대상 테이블 T1의 파티션 P2를 파티션 P3P4로 분할하는 예제이다.

Active-Standby 환경#

작업 절차 Active Standby
절차 1. 서비스 이전 Active-Standby 환경이므로 이전할 서비스가 없다.
절차 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;
절차 3. 세션의 이중화 모드 설정 ALTER SESSION SET REPLICATION = DEFAULT;
절차 4. DDL 문 수행 이중화 갭 해소 ALTER REPLICATION rep1 FLUSH;
이중화 중지 ALTER REPLICATION rep1 STOP;
DDL 문 수행 ALTER TABLE T1 SPLIT PARTITION P2 INTO (PARTITION P3, PARTITION P4); ALTER TABLE T1 SPLIT PARTITION P2 INTO (PARTITION P3, PARTITION P4);
이중화 시작 ALTER REPLICATION rep1 START;
이중화 갭 해소(SQL 반영 모드 설정 시) ALTER REPLICATION rep1 FLUSH;
절차 5. SQL 반영 모드 동작 여부 확인 SELECT REP_NAME, SQL_APPLY_TABLE_COUNT FROM V$REPRECEIVER;
절차 6. 프로퍼티 설정 원복 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 반영 모드 비활성화 REPLICATION_SQL_APPLY_ENABLE = 0;
절차 7. 서비스 분배 Active-Standby 환경이므로 분배할 서비스가 없다.

Active-Active 환경#

Active1을 DDL 문 수행 중 주 트랜잭션이 발생하는 지역 서버로 가정한다.

작업 절차 Active1 Active2
절차 1. 서비스 이전 서비스 이전 Active1로 서비스 이전
서비스 이전 확인 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; ALTER SYSTEM SET REPLICATION_SQL_APPLY_ENABLE = 1;
절차 3. 세션의 이중화 모드 설정 ALTER SESSION SET REPLICATION = DEFAULT; ALTER SESSION SET REPLICATION = DEFAULT;
절차 4. DDL 문 수행 이중화 갭 해소 ALTER REPLICATION rep1 FLUSH; ALTER REPLICATION rep1 FLUSH;
이중화 중지 ALTER REPLICATION rep1 STOP; ALTER REPLICATION rep1 STOP;
DDL 문 수행 ALTER TABLE T1 SPLIT PARTITION P2 INTO (PARTITION P3, PARTITION P4); ALTER TABLE T1 SPLIT PARTITION P2 INTO (PARTITION P3, PARTITION P4);
이중화 시작 ALTER REPLICATION rep1 START; ALTER REPLICATION rep1 START;
이중화 갭 해소(SQL 반영 모드 설정 시) ALTER REPLICATION rep1 FLUSH ALTER REPLICATION rep1 FLUSH;
절차 5. SQL 반영 모드 동작 여부 확인 SELECT REP_NAME, SQL_APPLY_TABLE_COUNT FROM V$REPRECEIVER; SELECT REP_NAME, SQL_APPLY_TABLE_COUNT FROM V$REPRECEIVER;
절차 6. 프로퍼티 설정 원복 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; ALTER SYSTEM SET REPLICATION_SQL_APPLY_ENABLE = 0;
절차 7. 서비스 분배 Active2로 서비스 분배


DDL 문 레벨 0 수행 예제#

예제 1 : 칼럼 추가#

다음은 이중화 객체 rep1의 이중화 대상 테이블 T1i3 칼럼을 추가하는 예제이다.

Active-Standby 환경#

작업 절차 Active Standby
절차 1. 서비스 이전 Active-Standby 환경이므로 이전할 서비스가 없다.
절차 2. 프로퍼티 설정 DDL 문 수행 활성화 ALTER SYSTEM SET REPLICATION_DDL_ENABLE = 1; ALTER SYSTEM SET REPLICATION_DDL_ENABLE = 1;
절차 3. 세션의 이중화 모드 설정 ALTER SESSION SET REPLICATION = DEFAULT;
절차 4. DDL 문 수행 DDL 문 수행 ALTER TABLE T1 ADD COLUMN ( i3 INTEGER );
이중화 갭 제거 ALTER REPLICATION rep1 FLUSH;
DDL 문 수행 ALTER TABLE T1 ADD COLUMN ( i3 INTEGER );
이중화 갭 제거 ALTER REPLICATION rep1 FLUSH;
절차 5. SQL 반영 모드 동작 여부 확인 - -
절차 6. 프로퍼티 설정 원복 DDL 문 수행 비활성화 ALTER SYSTEM SET REPLICATION_DDL_ENABLE = 0; ALTER SYSTEM SET REPLICATION_DDL_ENABLE = 0;
절차 7. 서비스 분배 Active-Standby 환경이므로 분배할 서비스가 없다.

Active-Active 환경#

Active1을 DDL 문 수행 중에 주 트랜잭션이 발생하는 지역 서버로 가정한다.

작업 절차 Active1 Active2
절차 1. 서비스 이전 서비스 이전 서비스를 Active1으로 이전한다.
서비스 이전 확인 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;
절차 3. 세션의 이중화 모드 설정 ALTER SESSION SET REPLICATION = DEFAULT; ALTER SESSION SET REPLICATION = DEFAULT;
절차 4. DDL 문 수행 이중화 갭 제거 ALTER REPLICATION rep1 FLUSH;
DDL 문 수행 ALTER TABLE T1 ADD COLUMN ( i3 INTEGER );
이중화 갭 제거 ALTER REPLICATION rep1 FLUSH;
이중화 갭 제거 ALTER REPLICATION rep1 FLUSH;
DDL 문 수행 ALTER TABLE T1 ADD COLUMN ( i3 INTEGER );
이중화 갭 제거 ALTER REPLICATION rep1 FLUSH;
절차 5. SQL 반영 모드 동작 여부 확인 - -
절차 6. 프로퍼티 설정 원복 DDL 문 수행 비활성화 ALTER SYSTEM SET REPLICATION_DDL_ENABLE = 0; ALTER SYSTEM SET REPLICATION_DDL_ENABLE = 0;
절차 7. 서비스 분배 Active2로 서비스를 분배한다.

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