[Hint]병렬처리(APPEND)
[Hint]병렬처리(APPEND)
Insert 문에 append 힌트를 사용하게 되면 insert되는 테이블에 이미 존재하는 블록의 빈공간은 사용하지 않고 ROW들이 Append 되는데 새롭게 입력되는 데이터는 Database Buffer Cache를 거치지 않고 direct로 블록에 삽입 됩니다… 이 힌트는 모든 insert에 적용되는 것은 아니며 insert ~ select~ 에만 사용 가능한 힌트 구문 입니다.
참고로 데이터 삽입 시 데이터베이스 버퍼 캐시를 거치지 않고 바로 삽입되는 경우를 direct load라고 하는데 sql*loader와 같은 경우에 direct=y라고 하는 경우가 해당 됩니다.
C:>sqlload scott/tiger control=emp.ctl direct=y
보통 insert 시간을 줄이기 위해 insert되는 테이블의 속성을 nologging으로 바꾼 후 append 힌트를 이용하여 데이터를 삽입하는 경우가 많이 있습니다. (이 경우 리두 로그에 기록되지 않으므로 수행시간을 단축 할 수 있습니다. 물론 nologging mode로 전환하여 insert 시간의 단축을 위해서는 반드시 /*+ append */ 힌트를 사용해야 합니다.)
SQL>alter table emp nologging;
SQL>insert /*+ append */ into emp select * from emp_bak;
리두로그에 기록하지 않으므로 복구 시 문제가 발생할 수 있으므로 이 작업 이후엔 해당 테이블을 logging mode로 전환 후 데이터베이스를 hot backup 받아 두는 것이 좋습니다…
SQL>alter table emp logging;
'프로그래밍 > oracle' 카테고리의 다른 글
oracle - [Hint]병렬처리(PARALLEL) (0) | 2012.08.17 |
---|---|
oracle - [Hint]병렬처리(NOPARALLEL) (0) | 2012.08.17 |
oracle - [Hint]규칙 기반 옵티마이저(Rule-Based Optimizer) (0) | 2012.07.19 |
oracle - [Hint]Oracle 9i(9.0.2)에서 사용가능한 힌트 (0) | 2012.07.19 |
oracle - [Hint]Optimizer Mode를 변경하는 힌트(FIRST_ROWS) (0) | 2012.07.19 |