행위

오라클 LOB 이관

DB CAFE

thumb_up 추천메뉴 바로가기


1 LOB(Large OBject)[편집]

1.1 LOB 데이터 타입 종류[편집]

 attach_file LOB 종류

 - BLOB	Internal	바이너리 데이터 저장 (최대 4G 저장)   
 - CLOB	Internal	Single-byte character data 저장(최대 4G 저장)   
 - NCLOB	Internal	Multi-byte character data 저장(최대 4G 저장)   
 - BFILE	External(OS)	OS 파일에 저장된 데이터의 포인터 저장 (최대 4G 저장) READ ONLY

1.2 LOB 사용 예시[편집]

1.2.1 LOB 타입 컬럼을 포함한 테이블 생성[편집]

 attach_file 제약사항 :

 - LOB 타입 컬럼을 cluster key로 사용하는 클러스터 테이블 생성 불가

CREATE TABLE LOB_TEST
 (ID NUMBER,
  CLOB CLOB, --CLOB
  BLOB BLOB, --BLOB
  NCLOB NCLOB, --NCLOB
  BFILE BFILE) --BFILE ;

1.2.2 LOB 데이터 저장[편집]

INSERT INTO LOB_TEST
       VALUES(1
             ,'CYKIM' -- CLOB
             ,UTL_RAW.CAST_TO_RAW('Hello') --BLOB
             ,'대용량' --NCLOB
             ,BFILENAME(null,null));
-- BFILENAME('경로or디렉토리객체명','파일명'))

1.2.3 LOB 데이터 조회[편집]

-- 일반 조회(컬럼 내용 중 일부는 조회되지 않음)

SELECT * 
  FROM LOB_TEST;

     ID CLOB     BLOB       NCLOB  BFILE
------- -------- ---------- ------ -----------------
      1 CYKIM    48656C6C6F 대용량  bfilename(NULL)

1.3 컬럼 길이 조회[편집]

SELECT ID
       ,DBMS_LOB.GETLENGTH(CLOB) CLOB
       ,DBMS_LOB.GETLENGTH(BLOB) BLOB
       ,DBMS_LOB.GETLENGTH(NCLOB) NCLOB
       ,DBMS_LOB.GETLENGTH(BFILE) BFILE
 FROM LOB_TEST;

1.4 LOB 타입 데이터를 포함하고 있는 테이블 이관 시 주의 사항[편집]

 attach_file 만약 LOB 타입을 포함하고 있는 테이블이 대용량이고 Archive log mode라면

archive log file의 생성이 기하급수적으로 늘어나게 되어 운영중인 시스템 장애가 발생될수 있다.

이러한 경우 Redo log를 쓰지 못하도록 설정해 이관해야 하는데

  • CTAS 와 export/import가 주로 사용
    • CTAS는 테이블 단위로 Local이나 Remote에서 간단한 명령어로 데이터를 이관할 수 있지만, 네트워크 속도에 따라 작업 속도의 차이가 나타난다.
    • export/import는 이관 대상 데이터에 대해 일괄 export해서 타겟 데이터베이스에 import하는 방식.

Oracle 10g에서는 data pump 개념이 등장해 export/ import에 비해서도 작업이 훨씬 수월해졌다.

1.4.1 CTAS 이용 하여 데이터 이관[편집]

 filter_1 이관 대상 테이블과 동일한 타겟 테이블 레이아웃 생성 (주의 : DEFAULT 값이 설정되어 있으면,

아래의 방법으로 테이블 생성 시 적용되지 않으므로 수동 적용해야 함)

CREATE TABLE TOBE_TEST -- 타겟 테이블
AS
SELECT * 
  FROM ASIS_TEST -- 이관대상 테이블명
 WHERE 1=2;

 filter_2 타겟 테이블에 데이터 저장

ALTER TABLE TOBE_TEST NOLOGGING; 
ALTER SESSION ENABLE PARALLEL DML; 
INSERT /*+ APPEND */ INTO TOBE_TEST
SELECT /*+ PARALLEL(A 8) */ * FROM ASIS_TEST A;

 filter_none 이와 같이 CTAS 사용시 다양한 설정을 통해 이관 속도를 단축시킬 수 있다.

LOB 타입 데이터는 데이터 이관시 많은 양의 로그로 인한 DISK FULL 현상에 각별히 주의해야 하는데

  1. NOLOGGING 옵션을 통해 작업에 대한 REDO 로그를 최소한으로 생성되게 함으로써 DISK I/O 부하 및 대량의 로그 기록으로 인한 시간을 단축시킨다.
  2. PARALLEL 설정을 통해 SELECT시 분산 작업이 가능하게 함으로써 작업시간을 단축시킨다.
  3. DIRECT LOAD(APPEND)를 통해 INSERT시 현재 세그먼트의 FREE BLOCK을 무시하고 HWM뒤에 WRITE함으로써 작업시간을 단축시킨다.

1.4.2 Data Pump(expdp/impdp) 이용[편집]

 filter_1 DATA PUMP 사용을 위한 디렉터리 객체 생성

CREATE DIRECTORY DMPDIR AS 'C:\DUMP';

 filter_2 expdp 유틸리티를 이용한 대상 백업

expdp system/*** directory=dmpdir tables=asis_test dumpfile= exp.dmp logfile=exp.log
  • EXP에는 FULL/SCHEMEA/TABLE 단위로 백업 가능

 filter_3 impdp 유틸리티를 이용한 대상 이관

CREATE TABLE TOBE_TEST NOLOGGING -- 타겟 테이블명
AS 
SELECT * FROM ASIS_TEST -- 이관대상 테이블명
WHERE 1=2;
impdp system/**** directory=dmpdir dumpfile=exp.dmp logfile=imp.log content=data_only

 attach_file LOB 컬럼을 포함하고 있는 데이터 이관시 IMPDP 작업 전 NOLOGGING 옵션을 적용한 타겟 테이블을 미리 생성해 놓고,

IMPDP 시에 데이터만 INSERT함으로써 대량의 데이터에 의한 로그 생성을 줄여야 한다.