DBMS 1

DA, SQL, DB보안 등 실무자를 위한 위한 DB기술 바이블!

DBMS_REDEFINITION

DBMS 1
Tibero 가이드
Tibero System Package Guide
DBMS_REDEFINITION
작성자
dataonair
작성일
2021-02-18 10:35
조회
867




제14장DBMS_REDEFINITION




내용 목차






14.1. 개요

14.2. 프로시저


14.2.1. ABORT_REDEF_TABLE

14.2.2. FINISH_REDEF_TABLE

14.2.3. START_REDEF_TABLE

14.2.4. SYNC_INTERIM_TABLE





14.1. 개요




DBMS_REDEFINITION은 온라인 상태에서 특정 테이블을 재정의하기 위한 프로시저를 제공하는 패키지이다.재정의할 대상인 원본 테이블을 지정된 컬럼 대응 정보에 따라 새 테이블로 재정의할 수 있다. 새 테이블은 재정의 수행 이전에 미리 생성되어 있어야 하며, 재정의가 끝나면 원본 테이블의 구조와 새 테이블의 구조가 서로 바뀐다.




14.2. 프로시저




본 절에서는 DBMS_REDEFINITION 패키지에서 제공하는 프로시저를 알파벳 순으로 설명한다.




14.2.1. ABORT_REDEF_TABLE




온라인 테이블 재정의를 취소하는 프로시저이다. 이 프로시저에 원본 테이블과 새 테이블의 이름을 지정하면, 온라인 테이블을 재정의하기 위해 생성한 내부 객체는 제거되고 재정의가 취소된다. 이때 원본 테이블과 새 테이블은 취소 시점의 상태로 남는다.

ABORT_REDEF_TABLE 프로시저의 세부 내용은 다음과 같다.

  • 프로토타입
    PROCEDURE ABORT_REDEF_TABLE
    (
    uname IN VARCHAR2,
    orig_table IN VARCHAR2,
    int_table IN VARCHAR2
    );
  • 파라미터

    파라미터 설명
    uname 원본 테이블과 새 테이블이 속한 스키마의 이름이다.
    orig_table 원본 테이블의 이름이다.
    int_table 새 테이블의 이름이다.
  • 예제
    BEGIN
    DBMS_REDEFINITION.ABORT_REDEF_TABLE('TIBERO', 'ORIG_TABLE', 'INT_TABLE');
    END;
    /





14.2.2. FINISH_REDEF_TABLE




온라인 테이블 재정의를 종료하는 프로시저이다. 이 프로시저에 원본 테이블과 새 테이블의 이름을 지정하면, 재정의 중에 변경된 데이터를 서로 교체한 후 원본 테이블과 새 테이블의 이름을 동기화한다. 이로써 재정의가 종료된다. 단, 시스템이 객체를 바꾸는 등의 작업을 하기 때문에 해당 테이블에서 수행되는 트랜잭션이 없는 경우에만 프로시저가 종료 작업을 수행한다.

FINISH_REDEF_TABLE 프로시저의 세부 내용은 다음과 같다.

  • 프로토타입
    PROCEDURE FINISH_REDEF_TABLE
    (
    uname IN VARCHAR2,
    orig_table IN VARCHAR2,
    int_table IN VARCHAR2
    );
  • 파라미터

    파라미터 설명
    uname 원본 테이블과 새 테이블이 속한 스키마의 이름이다.
    orig_table 원본 테이블의 이름이다.
    int_table 새 테이블의 이름이다.
  • 예제
    BEGIN
    DBMS_REDEFINITION.FINISH_REDEF_TABLE('TIBERO', 'ORIG_TABLE', 'INT_TABLE');
    END;
    /





14.2.3. START_REDEF_TABLE




온라인 테이블 재정의를 시작하는 프로시저이다. 이 프로시저에 원본 테이블과 새 테이블의 이름 그리고 컬럼 대응 정보를 지정하면, 원본 테이블의 데이터를 새 테이블에 옮시저를 실행하기 전에 미리 생성해야 하며, 원본 테이블과 같은 스키마에 존재해야 한다. 단, 파티셔닝, 인덱스, 제약조건, 트리거와 같은 테이블의 구조와 관련된 객체는 원본 테이블과 같지 않아도 된다.

참고

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



START_REDEF_TABLE 프로시저의 세부 내용은 다음과 같다.

  • 프로토타입
    PROCEDURE START_REDEF_TABLE
    (
    uname IN VARCHAR2,
    orig_table IN VARCHAR2,
    int_table IN VARCHAR2,
    col_mapping IN VARCHAR2 DEFAULT NULL,
    options_flag IN BINARY_INTEGER DEFAULT cons_use_pk
    );
  • 파라미터

    파라미터 설명
    uname 원본 테이블과 새 테이블이 속한 스키마의 이름이다.
    orig_table 원본 테이블의 이름이다.
    int_table 새 테이블의 이름이다.
    col_mapping 원본 테이블과 새 테이블의 컬럼 대응 정보이다.
    options_flag 원본 테이블에서 새 테이블로 데이터를 옮길 때 어떤 정보를 사용할 것인지를 지정한다.

    • cons_use_pk: 기본 키의 정보를 사용한다. (지정하지 않을 경우 기본값)
    • cons_use_rowid: ROWID를 사용한다.
  • 예제
    create table ORIG_TABLE
    (
    PRODUCT_ID NUMBER primary key,
    PRODUCT_NAME VARCHAR2(20),
    PRICE NUMBER,
    SOLD_DATE DATE
    )
    /
    insert into ORIG_TABLE values (1, 'Tibero', 10000, SYSDATE)
    /
    commit
    /
    create table INT_TABLE
    (
    ID NUMBER primary key,
    NAME VARCHAR2(30),
    PRICE NUMBER(8,2),
    SOLD_DATE DATE
    )
    partition by range (SOLD_DATE)
    (
    partition P_2008 values less than ('2009-01-01'),
    partition P_2009 values less than (maxvalue)
    )
    /
    BEGIN
    DBMS_REDEFINITION.START_REDEF_TABLE('TIBERO', 'ORIG_TABLE', 'INT_TABLE',
    'PRODUCT_ID ID, PRODUCT_NAME NAME, PRICE PRICE, SOLD_DATE SOLD_DATE');
    END;
    /





14.2.4. SYNC_INTERIM_TABLE




원본 테이블과 새 테이블의 데이터를 동기화하는 프로시저이다. 물론 FINISH_REDEF_TABLE 프로시저를 실행해도 동기화가 되지만, 온라인 테이블을 재정의하는 중에 해당 테이블에 DML 문장이 많이 수행되는 경우라면 변경된 데이터를 한꺼번에 반영해야 하므로 처리 속도가 늦어질 수 있다. 또한, 재정의를 종료하는 동안에도 해당 테이블에 트랜잭션이 없어야 하기 때문에 DML 문장의 수행이 제한된다.SYNC_INTERIM_TABLE 프로시저는 이러한 경우와는 다르게 재정의 중에도 동기화를 수행할 수 있으며, 재정의를 종료하는 시간을 줄일 수 있다.

SYNC_INTERIM_TABLE 프로시저의 세부 내용은 다음과 같다.

  • 프로토타입
    PROCEDURE SYNC_INTERIM_TABLE
    (
    uname IN VARCHAR2,
    orig_table IN VARCHAR2,
    int_table IN VARCHAR2
    );
  • 파라미터

    파라미터 설명
    uname 원본 테이블과 새 테이블이 속한 스키마의 이름이다.
    orig_table 원본 테이블의 이름이다.
    int_table 새 테이블의 이름이다.
  • 예제
    BEGIN
    DBMS_REDEFINITION.SYNC_INTERIM_TABLE('TIBERO', 'ORIG_TABLE', 'INT_TABLE');
    END;
    /





n