SQL* Loader로 외부 데이터 입력하기
Oracle



오라클에서 데이터를 입력하는 방식은 2가지로 나뉩니다.
1. Convertional path
2. Direct path
Direct path는 다른말로 Bulk Load방식이라고 부르기도 합니다.

SQL Loader는 위 기능 중 Direct path 방식을 이용하여 대량의 데이터를 아주 빠른 속도로 입력할수 있는 유틸리티 중에 하나인데,
이 기능을 사용하려면 입력하는 테이블에 select 할 수 있는 권한만 있으면 가능합니다.

1) Convertonal Path Method 기본모드
데이터가 입력되거나 조회될때 항상 메모리(database buffer cache)를 통해서 작업된다.
사용자가 select를 수행하면 우선 database buffer cache에 해당 블록이 load되어 있는지를 살펴보고
있으면 바로 Fetch를 하고 없으면 data file에서 해당 block을 불러와(load) Fetch를 하게 됩니다.





또한 새로운 데이터를 insert할 경우 database buffer cache의 free list에서 빈 블록을 찾아보고 없을 경우 

data file에서 빈 블록을 database buffer cache로 이동(load)한 후 데이터를 insert하게 됩니다.


단, 데이터를 load하는 도중에 다른 사용자와 작업 승인 테이블을 공유해서 작업 할 수 있다는 장점이 있지만

속도가 Direct load보다 느리고 redo log와 undo data가 많이 발생한다는 단점이 있습니다.


convertional path방식은 자주 사용하는 블록을 메모리에 공유해서 디스크 I/O를 줄이기 위해서 도입된 방식입니다.

그래서 자주 사용하는  블록은 메모리에 저장해서 재활용하고 없을경우에만 디스크에 찾아서 메모리로 적재합니다.

하지만 만약에라도 재사용하지 않는 블록이 메모리에 남게되면 오히려 심각한 성능 저하를 발생시킬 수가 있습니다.


이럴경우 메모리에 걸쳐 사용하지 않고 직접 블록에 작업하는것이 훨씬 더 빠를건데 그래서 등장한 방법이

Direct Path 방법입니다. 아래에서 더 자세하게 살펴보겠습니다.


2)Direct path Mothod



위 그림에서 보는것처럼 메모리(database buffer cache)에 저장하지않고 바로 data file로 데이터를 입력합니다.


3) 입력원리


Convertional Path 방법에서는 위 그림처럼 High Water Mark 왼쪽에 있는 빈 블록(free block)에 데이터를 입력하게 됩니다.

*HWM*

Data file에서 사용한  블록을 표시하는 마크로써 일종의 책갈피와 같은 역할을 하게 해주는게 HWM이다.

데이터를 입력할 때는 HWM 왼쪽부터 입력하는데 왼쪽블록을 다 사용하게 되면 잠시 일시정지하고 HWM을

오른쪽으로 이동하여 빈 블록들(EXTENT)을 확보한후 다시 데이터를 입력하게 됩니다. 

이러한 과정을 반복하게 되는데 이것을 HWM Bump up 이라고 한다.


하지만 이렇게 HWM Bump Up을 하면서 데이터를 입력하게 되면 HWM Bump up을 하면서 소요되는 시간이 많이 걸리기 때문에

대량의 데이터를 입력할 때는 문제가 많은 방식입니다.


반면에 Direct path 방식은 처음부터 HWM 오른쪽에 비어있는 블록을 한꺼번에 데이터를 입력하고 commit을 한 번만 하는 방식입니다.

그래서 HWM Bump up이 별도로 필요 없고 HWM오른쪽에 입력되는 블록이라 다른 세산과 공유도 되지 않기에 undo data도 필요없습니다.

만약 roll back을 하더라도 실제 block을 그대로 두고 dictionary 정보만 roll back 하기에 roll back시간도 적게 걸립니다.


하지만, redo를 사용하지 않으므로 중간에 장애가 생길 경우 처음부터 다시 입력해야 합니다. 

속도고 빠르다는 장점이 있지만 반면에 Direct path의 단점은 data를 입력하는 작업을 할때 해당 테이블에 Exclusive Lock을 설정하기 때문에

다른 트랜잭션이 DML을 일으키지 못하도록 막게 되어 동시에 변경 작업을 할 수 없게 된다는 점입니다.


즉 Direct path로 입력하는 작업은 사용량이 적은 시간에 해야한다는 점과 해당 테이블에서 nologging 옵션이 활성화 되어있어야 합니다.

오라클에서는 대량의 데이터를 입,출력할때 Direct path방법을 지원하며, Direct path방법은 아래와 같이 분류됩니다.

          1.정렬할 때 (Temp segment에 읽고 쓰기 합니다)

          2.병렬 작업 할 때(Parallel,Append 옵션을 사용할때)

          3.Direct 옵션 사용시(export,datapump 등)

disk I/O가 오라클 성능에 괸장한 영향을 주므로 각 상황에 맞도록 방법을 선택해서 사용하여야 합니다.

'Oracle' 카테고리의 다른 글

SQL*Loader 수행 전 확인해야 할 사항들  (0) 2014.11.10
윈도우 Client로 Oracle Server 접속하기  (0) 2014.11.04
toad for oracle 설치 및 세팅  (0) 2014.11.04
OEL5 + Oracle 11g rac rawdevice  (0) 2014.09.28
oracld 11g rac asm  (0) 2014.09.26