입력되는 테이블을 NoLogging 상태로 만들기
alter table TFEI_TEMP_SND_RCV_FILE nologging;
append 힌트 사용하기
대용량 데이타를 insert 할 경우는 시간이 매우 많이 걸리게 된다.
그러다가 temp 사이즈나 데이타 오류로 인해 에러가 나더라도
바로 에러를 밷는것이 아니라 롤백을 모두 한후에야
에러를 나타낸다.
총 insert 하는 데 걸리는 시간이 3시간이라면
2시간 진행된 작업이 잘못 됐다는걸 알았다(또는 에러가 났다는걸 알았다)
그러면 바로 에러를 뱉어내는 것이 아니라 롤백을 2시간 해주어야 된다
즉.. 잘못된 insert 작업을 2시간 하다가 취소하면 2시간 기다려야(롤백하느라) 된다는 것이다..
얼마나 짜증나는 일인가???
해답이 있다 APPEND 를 쓰면 된다.
insert /*+append*/ into aaa
select * from ......
append 힌트는 롤백을 쌓지않고 바로 테이블스페이스에 저장하게 된다.
취소할 경우에는 그동안 저장된 데이타만 날리기때문에 취소도 즉시 된다.
정말 빠르다~~
하지만 단점이 있으니....
롤백을 쌓는 insert 의 경우에는 얼마나 작업이 진행됐는지 롤백 세그먼트 크기를
보면서 모니터를 할 수 있다.
하지만 append 는 롤백을 쌓지 않기 때문에 얼마나 진행됐는지 확인하기가 쉽지 않다.
한가지 힌트가 있다면
insert 되는
테이블의 크기라 1024M 이고 익스텐트를 128M이라면
insert 되는 데이타가 1024M의 용량을 넘었다면 익스텐트를 일으키기 때문에
extend 를 하는지 안하는지를 보면 작업이 어느정도 진행되는지 알수 있다.
출처 : 일부 나... 그외
http://shinyoung.kr/514
또한 프로세스 개수가 넉넉하다면 PARALLEL 옵션을 주면 더욱 좋다 ㅋ
'Database > ORACLE' 카테고리의 다른 글
RAC 자원 할당에 관한 질의/응답 (0) | 2009.03.08 |
---|---|
테이블별 용량 체크 쿼리 (0) | 2009.03.08 |
BULK COLLECT 구문을 이용한 검색처리 고속화 - 펌 (0) | 2009.03.08 |
BULK COLLECT and BULK BIND (0) | 2009.03.08 |
Implici vs. Explicit Cursor - Who Wins? (0) | 2009.03.08 |