행위

DIRECT PATH LOAD 장단점

DB CAFE

Dbcafe (토론 | 기여)님의 2020년 1월 8일 (수) 15:42 판 (INSERT DIRECT PATH)
thumb_up 추천메뉴 바로가기


1 INSERT DIRECT PATH[편집]

  1. 데이터베이스가 REDO 및 UNDO 데이터를 생성하는 방식은 부분적으로 일반 이나direct-path INSERT 사용 여부에 따라 달라짐.
 (일반 INSERT는 테이블 LOGGING 설정에 관계없이 항상 데이터와 메타 데이터의 변경에 대해 최대 REDO 및 UNDO 를 생성함)
  1. 데이터베이스의 direct-path INSERT는 메타,데이터 변경이 작업 복구에 필요하기 때문에 REDO 및 UNDO 를 모두 생성.
 데이터 변경의 경우 REDO 및 UNDO 가 다음과 같이 생성됨.
    1. DIRECT PATH INSERT는 항상 데이터 변경에 대한 UNDO 생성 되지 않음.
    2. 데이터베이스가 ARCHIVE LOG 모드 또는 FORCE LOGGING 모드에 있지 않으면 각 테이블의 LOGGING 설정에 관계없이 데이터 변경에 따른 REDO가 생성되지 않음.
    3. 데이터베이스가 ARCHIVE LOG 모드에 있지만 FORCE LOGGING 모드가 아닌 경우 direct-path INSERT는 LOGGING 테이블은 데이터 REDO 생성,NOLOGGING 테이블은 REDO 생성않함.
    4. 데이터베이스가 ARCHIVE LOG 및 FORCE LOGGING 모드인 경우 direct-path SQL은 LOGGING 및 NOLOGGING 테이블 모두에 대한 데이터 REDO 생성.
  • INSERT가 완료된 직후에 direct-path .INSERT 데이터를 쿼리하거나 수정할 수 없습니다. 이렇게하면 ORA-12838 오류가 발생합니다.

새로 삽입 된 데이터를 읽거나 수정하기 전에 먼저 COMMIT 문 실행 해야함.

2 DIRECT PATH 제약 사항[편집]

  1. 직접 경로 INSERT에는 여러 제한이 적용됨.
  2. 제약사항 중 하나라도 위반하면 별도로 명시하지 않는 한 Oracle Database는 메시지를 반환하지 않고 기존 INSERT를 실행.
  3. 다른 DML 문을 사용하거나 사용하지 않고 단일 트랜잭션에서 여러 직접 경로 INSERT 문을 가질 수 있습니다.

그러나 하나의 DML 문이 특정 테이블, 파티션 또는 인덱스를 변경 한 후에는 트랜잭션의 다른 DML 문이 해당 테이블, 파티션 또는 인덱스에 액세스 할 수 없음.

  1. 동일한 테이블, 파티션 또는 인덱스에 액세스하는 쿼리는 direct-path INSERT 문 앞에 허용되지만 그 뒤에는 허용되지 않음.
  2. 직렬 또는 PARALLEL 명령문이 동일한 트랜잭션에서 direct-path INSERT에 의해 이미 수정 된 테이블에 액세스하려고하면 데이터베이스는 오류를 리턴하고 명령은 거부됨.
  3. 타겟 테이블이 클러스터이면 안됨.
  4. 타겟 테이블은 OBJECT TYPE 컬럼을 포함 할 수 없음.
  5. direct-path INSERT는 맵핑 테이블이 있거나 구체화 된 뷰에서 참조하는 경우 인덱스 구성 테이블(IOT)은 안됨.

IOT가 병렬 모드로 작성된 경우에도 IOT (index-organized table)의 단일 파티션, 하나의 파티션 만있는 파티션 된 IOT 또는 파티션되지 않은 IOT 로의 직접 경로 삽입 또는 APPEND 또는 APPEND_VALUES 힌트를 지정. 그러나 파티션 확장 이름을 사용하지 않고 IOT에 둘 이상의 파티션이있는 경우 파티션 된 IOT에 대한 direct-path INSERT는 병렬 모드를 준수함.

  1. 타겟 테이블에는 트리거 또는 참조 무결성 제한 조건이 정의되면 안됨.
  2. 타겟 테이블을 복제될수 없음.
  3. 트랜잭션이 포함된 direct-path INSERT문은 분산 하거나 및 분산 될 수 없음.