운영중인 데이터 웨어하우스에 많은 양의 텍스트 데이터가 입력되어 있는 환경에서는, LONG 데이터타입을 갖는 컬럼이 여럿 존재할 가능성이 높습니다.
LONG 데이터타입은 SUBSTR과 같은 데이터 처리 함수에서 활용될 수 없다는 단점이 있으며, 따라서 LOB 컬럼으로 변환하는 것이 바람직합니다.
DBMS_REDEFINITION 패키지를 이용하면 온라인 상태에서 LONG 데이터타입을 LOB 데이터타입으로 변환할 수 있습니다. 하지만 Oracle Database 10g Release 2 이전 버전에는 중요한 제약사항이 존재했습니다.
LONG 컬럼을 LOB 컬럼으로 변환하는 작업은 최대한 신속하게 완료되어야 합니다. 테이블이 파티셔닝되어 있는 경우, 프로세스는 각 파티션 별로 병렬적으로 수행됩니다. 하지만 테이블이 파티셔닝되어 있지 않다면, 모든 작업은 순차적으로 수행되며 따라서 매우 오랜 시간이 걸릴 수 있습니다.
Oracle Database 10g Release 2는 파티셔닝되어 있지 않은 테이블에 대해서도 LONG->LOB 변환 작업을 병렬적으로 수행합니다. 예를 들어 설명해 보기로 하겠습니다. 고객에게 전송할 이메일 메시지를 저장한 테이블이 있습니다. 메시지 본문의 저장에 사용되는 MESG_TEXT 컬럼은 매우 긴 텍스트를 포함하므로, 이 컬럼은 LONG 데이터타입으로 정의되었습니다.
SQL> desc acc_mesg Name Null? Type ----------------------------------------- -------- --------- ACC_NO NOT NULL NUMBER MESG_DT NOT NULL DATE MESG_TEXT LONG이 컬럼을 CLOB 데이터타입으로 변환하려 합니다. 먼저, 마지막 컬럼(CLOB 데이터타입)을 제외하고는 동일한 구조를 갖는 임시 테이블을 생성합니다:
create table ACC_MESG_INT ( acc_no number, mesg_dt date, mesg_text clob );이제 재정의 작업을 시작합니다.
1 begin 2 dbms_redefinition.start_redef_table ( 3 UNAME => 'ARUP', 4 ORIG_TABLE => 'ACC_MESG', 5 INT_TABLE => 'ACC_MESG_INT', 6 COL_MAPPING => 'acc_no acc_no, mesg_dt mesg_dt, to_lob(MESG_TEXT) MESG_TEXT' 7 ); 8* end;6번째 라인에서, 컬럼이 매핑되는 과정을 주목하시기 바랍니다. 처음 두 컬럼에는 아무런 변화가 없지만 세 번째 MESG_TEXT 컬럼은 소스 테이블 컬럼에 TO_LOB 함수를 적용한 후 타겟 테이블의 MESG_TEXT 컬럼으로 변환하도록 정의되어 있습니다. 테이블의 사이즈가 큰 경우에는, 소스 테이블과 타겟 테이블을 정기적으로 동기화시켜 주어야 합니다. 이렇게 해 두면 최종적인 동기화 작업을 훨씬 빨리 끝낼 수 있습니다.
begin dbms_redefinition.sync_interim_table( uname => 'ARUP', orig_table => 'ACC_MESG', int_table => 'ACC_MESG_INT' ); end; /위 커맨드의 실행시간은 테이블의 사이즈에 따라 크게 달라질 수 있습니다. 마지막으로, 아래와 같이 재정의 작업을 마무리합니다:
begin dbms_redefinition.finish_redef_table ( UNAME => 'ARUP', ORIG_TABLE => 'ACC_MESG', INT_TABLE => 'ACC_MESG_INT' ); end; /ACC_MESG 테이블이 다음과 같이 변경되었습니다:
SQL> desc acc_mesg Name Null? Type ----------------------------------------- -------- --------- ACC_NO NOT NULL NUMBER MESG_DT NOT NULL DATE MESG_TEXTMESG_TEXT 컬럼은 이제 LONG 대신 CLOB 데이터타입으로 구성되었습니다. 이 기능은 잘못 정의된 테이블, 또는 레거시 테이블을 변환하는 경우에 매우 유용하게 활용됩니다.
출처:오라클