DATOR


INSERT 유형 (DIRECT-PATH INSERT) SQL가이드


 

 

DIRECT-PATH INSERT에 대해 정리해보고자 여기저기 자료들을 보고 제 나름 개념을 정리하였습니다.

이 역시 많이 미흡한 정리일거라 생각됩니다. 틀린 부분이 있거나 추가적인 의견이 있으시면 알려주시면 자료정리에 도움이 될 것 같네요...

 

==================================================================================================

1. SGA의 buffer cache를 거치지 않고 직접 Oracle data를 구성하고 입력하는 방법.

2. INSERT VALUES 구문이 아닌 INSERT SELECT구문만 지원 가능.( 11G부터 지원)
3. DIRECT-PATH INSERT 유형
    1) Serial Direct-Load Insert
    2) Parallel Direct-Load Insert into a nonpartitioned table
    3) Parallel Direct-Load Insert into a partitioned table

==================================================================================================

 

Direct Path Insert 방식으로 데이터를 입력하거나 병렬 방식으로 DML을 수행하면 Exclusive 모드 테이블 Lock이 걸린다.

즉, 다른 트랜잭션이 수행할 수 없다. 트랜잭션이 빈번한 때에는 사용하지 말자.

 

 

1. DIRECT-PATH INSERT (APPEND 와 LOGGING 모드)
DIRECT-PATH INSERT 방법은 LOGGING과 NOLOGGING mode를 둘 다 사용할 수 있다.

IMG2.png

 

2.DIRECT-PATH INSERT (APPEND hint, PARALLEL hint 사용)

   1) Serial Direct-Load Insert : APPEND hint를 통해 사용
   2) Parallel Direct-Load Insert  : APPEND 없이 PARALLEL hint만으로도 사용 가능 

                                          Insert시에 PARALLEL을 지정하면 무조건 Direct-Load로 작동

 

   3) APPEND   : 오라클 buffer cache를 거치지 않고 DB의 table에 insert하므로 ROLLBACK SEGMENT를 발생시키지 않음.
                  NOLOGGING모드 사용시 명시적 지정 필요.  
   4) PARALLEL : DML문장을 병렬로 수행. 해당 Session에 대해서 Parallel DML을 Enable시켜야 한다.

 

------------------------------------------------------------------------------------------------------

/*+ append */ ==> append 모드 Serial Insert

 

# parallel dml을 활성화한 상태 (Parallel Insert는 항상 Append모드로 작동함.)
/*+ append parallel(target 4) */ ==> append 모드 Parallel Insert
/*+ parallel(target 4) */        ==> append 모드 Parallel Insert

 

# parallel dml을 활성화하지 않은 상태
/*+ append parallel(target 4) */ ==> append 모드 Serial Insert
/*+ parallel(target 4) */        ==> Noappend 모드 Serial Insert

------------------------------------------------------------------------------------------------------

 

3. 참고사항

 IMG3.GIF

 

 

********************   DIRET-PATH INSERT 사용 예제   **********************

 

1. 해당 세션에 PARALLEL DML 옵션을 enable 해준다.
ALTER SESSION ENABLE PARALLEL DML;


2. 임시테이블에 insertNOLOGGING 옵션으로 redo를 남지 않게 하여 수행속도를 향상시킨다.
ALTER TABLE member_temp NOLOGGING;

 

3.1 APPEND hint의 사용

INSERT /*+ APPEND */ INTO member_temp SELECT * FROM member;

3.2 PARALLEL hint의 사용 (parallel degree 8로 주었다.)
INSERT /*+ PARALLEL (member_temp, 8) */ INTO member_temp
SELECT
/*+ PARALLEL (member, 8) */ * FROM member;

 

COMMIT;

 

4. 테이블을 다시 LOGGING되도록 한다.
ALTER TABLE member_temp LOGGING;


5. 해당 세션에 PARALLEL DML 옵션을 disable 해준다.
ALTER SESSION DISABLE PARALLEL DML;

 

 

 

 


 

Tag :

Leave Comments