DBMS_REDEFINITION
DBMS_REDEFINITION 패키지의 기본 개념과 패키지 내의 프러시저를 사용하는 방법을 설명합니다.
개요
DBMS_REDEFINITION은 온라인 상태에서 특정 테이블을 재정의하기 위한 프러시저를 제공하는 패키지 입니다.
재정의할 대상인 원본 테이블을 지정된 컬럼 대응 정보에 따라 새 테이블로 재정의할 수 있습니다. 새 테이블은 재정의 수행 이전에 미리 생성되어 있어야 하며, 재정의가 끝나면 원본 테이블의 구조와 새 테이블의 구조가 서로 바뀝니다.
제약사항
현재 재정의를 지원하지 않는 원본 테이블 스펙은 다음과 같습니다.
options_flag == 1일 때(PK 옵션), PK가 존재하지 않는 경우
실체화 뷰가 정의되어 있는 경우
전역 임시 테이블인 경우
SYS 계정 소유의 테이블인 경우
Virtual 테이블인 경우
외부 테이블인 경우
Read-only인 경우
XML index 내부 테이블인 경우
CTXCAT index 내부 테이블인 경우
IOT 테이블이고 options_flag == 2 (ROWID 옵션)인 경우
VPD가 걸려있는 경우
이미 재정의 중인 테이블인 경우
특정 파티션에 대해 재정의할 때 lob 컬럼이 있는 경우
프러시저
본 절에서는 DBMS_REDEFINITION 패키지에서 제공하는 프러시저를 알파벳 순으로 설명합니다.
ABORT_REDEF_TABLE
온라인 테이블 재정의를 취소하는 프러시저입니다. 이 프러시저에 원본 테이블과 새 테이블의 이름을 지정 하면, 온라인 테이블을 재정의하기 위해 생성한 내부 객체는 제거되고 재정의가 취소됩니다. 이때 원본 테이블과 새 테이블은 취소 시점의 상태로 남습니다.
프로토타입
파라미터
uname
원본 테이블과 새 테이블이 속한 스키마의 이름
orig_table
원본 테이블의 이름
int_table
새 테이블의 이름
part_name
재정의 중인 파티션의 이름
한 테이블의 단 하나의 파티션이 재정의 중 일 경우에는 파티션의 이름을 해당 파라미터로 명시해야 함
NULL은 전체 테이블이 재정의 중이라는 것을 의미
테이블의 여러 파티션이 재정의 중일 경우에는 각 파티션 이름을 콤마로 구 분해서 명시
예제
CAN_REDEF_TABLE
온라인 테이블 재정의가 가능한지 확인하는 프러시저입니다. 이 테이블에 테이블 이름과 옵션을 주면 온라 인 테이블 재정의가 가능한지 확인한 후, 가능하지 않은 경우 에러를 발생시킵니다.\
CAN_REDEF_TABLE 프러시저의 세부 내용은 다음과 같습니다.
프로토타입
파라미터
uname
테이블이 속한 스키마의 이름
tname
온라인 테이블 재정의가 가능한지 확인할 테이블의 이름
options_flag
원본 테이블에서 새 테이블로 데이터를 옮길 때 어떤 정보를 사용할 것인지를 지정
cons_use_pk : 기본 키의 정보를 사용 (지정하지 않을 경우 기본값)
cons_use_rowid : ROWID를 사용
part_name
재정의할 파티션의 이름
한 테이블의 단 하나의 파티션을 재정의하는 경우에는 파티션의 이름을 해당 파라미터로 명시해야 함
NULL은 전체 테이블이 재정의된다는 것을 의미
테이블의 여러 파티션을 재정의하는 경우에는 각 파티션 이름을 콤마로 구분해서 명시
예제
COPY_TABLE_DEPENDENTS
테이블을 온라인 재정의를 수행하면서, 테이블과 관련된 다른 객체들도 복사해주는 프러시저입니다. 인덱스, 제약사항, 트리거, 권한 등에 대해서 기존 테이블의 관련 객체를 새 테이블에 복사해줄지 파라미터로 명시할 수 있습니다.
COPY_TABLE_DEPENDENTS 프러시저의 세부 내용은 다음과 같습니다.
프로토타입
파라미터
uname
원본 테이블과 새 테이블이 속한 스키마의 이름
orig_table
원본 테이블의 이름
int_table
새 테이블의 이름
copy_indexes
인덱스들도 복사해 줄 것인지 명시
0 : 인덱스를 복사하지 않음
dbms_redefinition.cons_orig_params : 인덱스를 복사. 단, domain 인덱스, global partitioned 인덱스, function-based 인덱스가 있을 경우, 수행이 불가능
copy_triggers
TRUE : 트리거를 복사
FALSE : 트리거를 복사하지 않음
copy_constraints
TRUE : 제약 사항들을 복사
FALSE : 제약 사항들을 복사하지 않음
copy_privileges
TRUE : 테이블의 권한을 복사
FALSE : 테이블의 권한을 복사하지 않음
ignore_errors
TRUE : 관련있는 객체를 복사하며 발생하는 에러는 무시하고 넘어감
FALSE : 관련있는 객체를 복사하며 에러가 발생하면 멈춤
num_errors
에러가 발생한 횟수를 담아줌
copy_statistics
테이블의 통계 정보를 복사
미지원 기능
copy_mvlog
테이블의 Materialized View LOG들을 복사 미지원 기능
예제
FINISH_REDEF_TABLE
온라인 테이블 재정의를 종료하는 프러시저입니다. 이 프러시저에 원본 테이블과 새 테이블의 이름을 지정하면, 재정의 중에 변경된 데이터를 서로 교체한 후 원본 테이블과 새 테이블의 이름을 동기화합니다. 이로 써 재정의가 종료됩니다. 단, 시스템이 객체를 바꾸는 등의 작업을 하기 때문에 해당 테이블에서 수행되는 트랜잭션이 없는 경우에만 프러시저가 종료 작업을 수행합니다.
FINISH_REDEF_TABLE 프러시저의 세부 내용은 다음과 같습니다.
프로토타입
파라미터
uname
원본 테이블과 새 테이블이 속한 스키마의 이름
orig_table
원본 테이블의 이름
int_table
새 테이블의 이름
part_name
재정의 중인 파티션의 이름
한 테이블의 단 하나의 파티션이 재정의중일 경우에는 파티션의 이름을 해당 파라미터로 명시해야 함
NULL은 전체 테이블이 재정의 중이라는 것을 의미
테이블의 여러 파티션이 재정의중일 경우에는 각 파티션 이름을 콤마로 구분해서 명시
예제
REGISTER_DEPENDENT_OBJECT
기존 테이블의 관련 객체와 새 테이블의 관련 객체를 매핑시킵니다. 온라인 테이블 재정의가 끝나면 매핑시 킨 객체들의 이름이 서로 바뀌게 됩니다. 단, 관련 객체가 제약조건이고 제약조건의 이름과 테이블 이름이 같을 경우 수행이 불가능합니다.
REGISTER_DEPENDENT_OBJECT 프러시저의 세부 내용은 다음과 같습니다.
프로토타입
파라미터
uname
원본 테이블과 새 테이블이 속한 스키마의 이름
orig_table
원본 테이블의 이름
int_table
새 테이블의 이름
dep_type
관련 객체의 타입
현재 2(인덱스), 3(제약조건), 4(트리거) 외에는 미지원 기능
dep_owner
관련 객체를 소유한 사용자 이름
dep_orig_name
원본 테이블의 관련 객체 이름
dep_int_name
새 테이블의 관련 객체 이름
예제
START_REDEF_TABLE
온라인 테이블 재정의를 시작하는 프러시저입니다. 이 프러시저에 원본 테이블과 새 테이블의 이름 그리고 컬럼 대응 정보를 지정하면, 원본 테이블의 데이터를 새 테이블에 옮기기 시작합니다.
여기서 새 테이블은 이 프러시저를 실행하기 전에 미리 생성해야 하며, 원본 테이블과 같은 스키마에 존재 해야 합니다. 단, 파티셔닝, 인덱스, 제약조건, 트리거와 같은 테이블의 구조와 관련된 객체는 원본 테이블과 같지 않아도 됩니다.
참고
컬럼 대응 정보는 원본 테이블의 어떤 컬럼을 새 테이블의 어떤 컬럼에 저장할지를 지정하는 것을 말함
START_REDEF_TABLE 프러시저의 세부 내용은 다음과 같습니다.
프로토타입
파라미터
uname
원본 테이블과 새 테이블이 속한 스키마의 이름
orig_table
원본 테이블의 이름
int_table
새 테이블의 이름
col_mapping
원본 테이블과 새 테이블의 컬럼 대응 정보
현재 미지원 기능
options_flag
원본 테이블에서 새 테이블로 데이터를 옮길 때 어떤 정보를 사용할 것인지를 지정
cons_use_pk : 기본 키의 정보를 사용 (지정하지 않을 경우 기본값)
cons_use_rowid : ROWID를 사용
part_name
재정의할 파티션의 이름
한 테이블의 단 하나의 파티션을 재정의하는 경우에는 파티션의 이름을 해당 파라미터로 명시해야 함
NULL은 전체 테이블이 재정의된다는 것을 의미
테이블의 여러 파티션을 재정의하는 경우에는 각 파티션 이름을 콤마로 구분해서 명시
예제
SYNC_INTERIM_TABLE
원본 테이블과 새 테이블의 데이터를 동기화하는 프러시저입니다. 물론 FINISH_REDEF_TABLE 프러시저 를 실행해도 동기화가 되지만, 온라인 테이블을 재정의하는 중에 해당 테이블에 DML 문장이 많이 수행되 는 경우라면 변경된 데이터를 한꺼번에 반영해야 하므로 처리 속도가 늦어질 수 있습니다. 또한, 재정의를 종료하는 동안에도 해당 테이블에 트랜잭션이 없어야 하기 때문에 DML 문장의 수행이 제한됩니다.
SYNC_INTERIM_TABLE 프러시저는 이러한 경우와는 다르게 재정의 중에도 동기화를 수행할 수 있으며, 재정의를 종료하는 시간을 줄일 수 있습니다.
SYNC_INTERIM_TABLE 프러시저의 세부 내용은 다음과 같습니다.
프로토타입
파라미터
uname
원본 테이블과 새 테이블이 속한 스키마의 이름
orig_table
원본 테이블의 이름
int_table
새 테이블의 이름
part_name
재정의 중인 파티션의 이름
한 테이블의 단 하나의 파티션이 재정의 중 일 경우에는 파티션의 이름을 해당 파라미터로 명시해야 함
NULL은 전체 테이블이 재정의 중이라는 것을 의미
테이블의 여러 파티션이 재정의 중일 경우에는 각 파티션 이름을 콤마로 구분해서 명시
예제
UNREGISTER_DEPENDENT_OBJECT
원본 테이블과 새 테이블 사이에 매핑되어 있는 관련 객체들의 정보를 해제합니다.
UNREGISTER_DEPENDENT_OBJECT 프러시저의 세부 내용은 다음과 같습니다.
프로토타입
파라미터
uname
원본 테이블과 새 테이블이 속한 스키마의 이름
orig_table
원본 테이블의 이름
int_table
새 테이블의 이름
dep_type
관련 객체의 타입
현재 2(인덱스), 3(제약조건), 4(트리거) 외에는 미지원 기능
dep_owner
관련 객체를 소유한 사용자 이름
dep_orig_name
원본 테이블의 관련 객체 이름
dep_int_name
새 테이블의 관련 객체 이름
예제
Last updated

