본문 바로가기

프로그램/oracle

[ORACLE]오라클 대용량 insert

반응형


오라클 대용량 insert

 

3만건 insert하는데 속도가 너무 많이 걸려서 대용량 INSERT 하는 것을 정리해보기로 함

 

대강 알고 있던 내용은 다음과 같음

l  Insert 쿼리에 /*+append*/ 힌트를 추가

l  테이블에 nologging 추가(alter table xxx nologging; => 리두 레두 쌓지 않음

 

Append의 대한 더 자세한 내용

http://egloos.zum.com/zzie/v/8768498

http://www.jigi.net/entry/%EC%98%A4%EB%9D%BC%ED%81%B4-APPEND-%ED%9E%8C%ED%8A%B8

 

1) NOARCHIVELOG 모드 데이터베이스가 사용되고 있는 경우

2) NOLOGGING으로 표시된 테이블을 대상으로 작업하고 있는 경우

 

위의 두 경우에는 APPEND 가 의미가 없는 듯 함

1번을 만족시키기 쉽지 않아 보임

 

URL에서 제시하는 방법

선행 alter table big_table nologging 데이터 적재후 다시 변경

1. alter index big_table_idx unusable;

2. alter session set skip_unusable_indexes=true;

3. insert /*+ append */ into big_table select * from all_objects;

4. alter index big_table_idx rebuild nologging;

 

 

내가 작업하는 버전은 오라클 10g로 알고 있음

10g에서는 insert value /*+append*/ 가 무시된다고 함

http://ukja.tistory.com/317

 

그래서 생각해본게 차라리 insert 쿼리를 dual로 바꿔서 처리를 해볼 까 함

오오 10여분 걸렸던 5천건 insert11초만에 끝남.-_-;;

 

문제는 토드가 만건을 union all 로 묶어서 돌렸더니 사망함.-_-

(메모리 문제이지 않을까 싶음)

 

결국 5천건씩 끊어서 돌려야 하는 상황. 하아.

 

다음과 같이 정리해야 겠다.

l  완전 대용량이면 import 기능 활용

l  적당한 건수면 union all 활용

l  Oracle 11i 이상이면 insert value /*+append*/ 추가

 

 

URL

http://applejara.tistory.com/407

http://ukja.tistory.com/317

http://egloos.zum.com/zzie/v/8768498

http://www.jigi.net/entry/%EC%98%A4%EB%9D%BC%ED%81%B4-APPEND-%ED%9E%8C%ED%8A%B8