2013년 7월 5일 금요일

SQL * Loader의 로드 방식의 차이

1.conventional path 방식

- sql*loader 내부적으로 insert into 문장을 이용하여 데이터 입력

- 일반적인 방식

- SGA영역(db buffer cache)을 경유하여 데이터가 입력됨

- 시퀀스, 오라클 내장 함수를 이용할 수 있음

- 클러스터 테이블에 대해서 수행 가능

- redo log는 테이블 생성 옵션 또는 오라클의 archive 구동방식에 따라 달라짐

- ‘bindsize’ 옵션을 설정하여 데이터 삽입을 위해서 sql*loader에 의해 사용될 버퍼의 크기를 지정할 수 있음

2.direct path 방식

- sqlldr user=? control=? direct=true

- SGA영역(db buffer cache)을 거치지 않고 메모리에 직접 데이터 블록을 만들어 해당 테이블에 할당된 extent에 저장

- 메모리에 구축해 놓았던 블록의 내용이 모두 load되면 해당 블록을 데이터 파일에 씀(즉, 로드 되어지는 중간에 테이블의 extent가 증가 한다.)

- Load 시작시에 테이블에 lock을 걸고 load가 끝나면 unlock을 함

- 테이블의 HWM 윗부분에 block을 추가한다.

- 클러스터 테이블에는 수행할 수 없다.

- 시스템이 archive 로그 모드로 구동되고 있다면 리두로그를 생성한다.

- archive로그 모드로 구동 되고 있더라도 테이블이 nologging 이거나 control 파일내에 ‘unrecoverable’ 을 사용하면 redo log를 발생 시키지 않는다.

- primary key, unique key, not null 제약조건만 체크한다.

- 시퀀스 및 오라클 내장 함수를 사용할 수 없다.

3.direct path + parallel 방식

- sqlldr user=? control=? direct=true parallel=true

- parallel direct load는 로드할 때 여러 개의 load session 이 한 테이블에 데이터를 load 하여 속도가 더 증가한다.

- 각각의 session은 서로 다른 data log를 사용해야 한다.

- parallel 옵션을 사용하면 sql*loader는 임시 세그먼트에 데이터를 load하고 load가 끝나는 시점에서 임시 세그먼트를 하나로 묶고 이것을 테이블 세그먼트에 추가한다.(즉, 로드 되어지는 중간에 테이블의 extent가 증가하지 않는다.)

- ‘file’ 옵션을 이용하여 각각의 session이 임시 세그먼트를 할당할 데이터 파일을 지정 할 수 있음. (임시 세그먼트를 작성하는 경합을 감소 시킬 수 있음) 만일 지정되지 않으면, 로드의 대상이 되는 테이블이 있는 테이블 스페이스가 사용됨.
(임시 테이블스페이스를 사용하는 것이 아님에 주의)

- load시에 인덱스가 걸려 있다면 disable한 후 작업을 하고, 작업 완료 후 enable해야 한다.

- append 모드에서만 가능하며, insert, replace, truncate 모드에서는 지원되지 않는다.

- 시퀀스 및 오라클 내장 함수를 사용할 수 없다.

댓글 없음:

댓글 쓰기