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

온라인 테이블 재정의를 시작하는 프러시저입니다. 이 프러시저에 원본 테이블과 새 테이블의 이름 그리고 컬럼 대응 정보를 지정하면, 원본 테이블의 데이터를 새 테이블에 옮기기 시작합니다.

여기서 새 테이블은 이 프러시저를 실행하기 전에 미리 생성해야 하며, 원본 테이블과 같은 스키마에 존재 해야 합니다. 단, 파티셔닝, 인덱스, 제약조건, 트리거와 같은 테이블의 구조와 관련된 객체는 원본 테이블과 같지 않아도 됩니다.

circle-info

참고

컬럼 대응 정보는 원본 테이블의 어떤 컬럼을 새 테이블의 어떤 컬럼에 저장할지를 지정하는 것을 말함

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