본문 바로가기

프로그래밍/oracle

oracle - [Hint]병렬처리(APPEND)

반응형

[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;

 

 

 

 


반응형