본문 바로가기
oracle

[ORACLE] Nologging 시 영향도

by 둥구리둥둥 2025. 7. 25.
728x90
반응형

NOLOGGING 모드란?
Oracle에서 NOLOGGING은 특정 DML 작업(특히 대량 데이터 적재 작업 등)에 대해 Redo 로그 생성을 최소화하여, 로그 기록으로 인한 I/O 오버헤드를 줄이는 방식입니다.

즉, 일반적으로는 모든 DML 작업이 Redo 로그를 생성하여 복구를 가능하게 하지만, NOLOGGING을 사용하면 이 Redo 로그 생성을 생략하거나 최소화합니다.


[성능 향상 이유]

  1. Redo 로그 생성 생략으로 I/O 부하 감소
    • 일반적으로 대량 데이터 적재 시 Redo 로그 생성이 전체 작업의 병목이 되기 쉽습니다.
    • NOLOGGING 모드를 사용하면 이 부분을 생략하므로 적재 속도가 향상됩니다.
  2. 대량 적재에 유리
    • 특히 INSERT /*+ APPEND */ 또는 DIRECT PATH INSERT와 함께 사용 시 효과가 큽니다.
    • 예:
    • sql
      복사편집
      INSERT /*+ APPEND */ INTO my_table SELECT * FROM source_table;
  3. 병렬 적재와 함께 사용 시 효과 배가
    • 병렬 처리 + NOLOGGING = 매우 빠른 적재

[주의사항]

  • 복구 불가능한 데이터 손실 위험
    NOLOGGING 모드에서 수행된 작업은 Redo 로그에 기록되지 않기 때문에, 만약 장애가 발생하면 해당 데이터는 복구가 불가능합니다.
  • 백업이 필요함
    NOLOGGING 작업 후에는 필히 백업을 수행해야 합니다. (RMAN 백업 또는 export 등)
  • 모든 작업에 적용되는 것은 아님
    일반적인 DML(INSERT, UPDATE, DELETE)은 NOLOGGING의 영향을 받지 않고, Direct Path INSERT와 같은 특정 작업에만 적용됩니다.

Oracle에서 Direct Path Insert는 일반적으로 INSERT /*+ APPEND */ 또는 INSERT /*+ APPEND_VALUES */ 힌트를 사용해서 수행합니다.


✅  기본 Direct Path Insert 예제

sql
복사편집
INSERT /*+ APPEND */ INTO target_table SELECT * FROM source_table;
  • /*+ APPEND */ 힌트는 Oracle에게 Direct Path Insert 방식으로 수행하라고 명령합니다.
  • 기존 데이터를 고려하지 않고 테이블의 High Water Mark(최대 사용 블록) 이후에 바로 데이터 기록함.
  • NOLOGGING 모드와 함께 쓰면 속도가 더욱 빨라집니다.

✅  APPEND_VALUES (Oracle 11g 이후)

Oracle 11g부터는 VALUES 구문에서도 Direct Path Insert가 가능합니다.

sql
복사편집
INSERT /*+ APPEND_VALUES */ INTO target_table (col1, col2) VALUES (1, 'ABC');
  • 다만, APPEND_VALUES는 제한적인 환경에서만 효과가 있으며, 대량 적재에는 주로 APPEND와 SELECT 형태를 사용합니다.

✅  NOLOGGING과 함께 사용 예시

sql
복사편집
ALTER TABLE target_table NOLOGGING; INSERT /*+ APPEND */ INTO target_table SELECT * FROM source_table;

💡 이 경우 target_table은 LOGGING이 비활성화된 상태에서 Direct Path로 데이터를 받기 때문에 적재 속도 향상 효과가 큽니다.


 

✅ Direct Path Insert만 가능한 이유

  • Direct Path Insert는 데이터를 기존 테이블 구조와 무관하게, 테이블의 빈 블록 영역에 바로 기록하는 방식입니다.
  • 이는 기존 레코드를 건드리지 않기 때문에 가능한 방식입니다.
  • 반면, UPDATEDELETE는 기존 레코드의 위치와 관계된 작업이므로, 기존 데이터 블록에 접근하여 변경 사항을 반영해야 하며, 이에 따라 Redo 로그, Undo 데이터, 트리거, 제약조건 등을 모두 고려해야 합니다.

📌 요약 비교표

구분Direct Path 지원 여부특징
INSERT ✅ 지원 (APPEND, APPEND_VALUES) 빠름, NOLOGGING 가능
UPDATE ❌ 미지원 기존 레코드 변경 → 기존 블록 접근
DELETE ❌ 미지원 기존 레코드 삭제 → Undo/Redo 필수

 

728x90
반응형

'oracle' 카테고리의 다른 글

[ORACLE] SQL PLAN 고정  (0) 2024.06.24
[ORACLE] ORACLE LIFETIME SUPPORT POLICY  (0) 2024.06.20
[ORACLE] AWR DATA export/import  (0) 2024.06.14
[ORACLE] FRA 설정  (0) 2024.06.13
[ORACLE] ORA-600 [kkdlcob-objn-exists] [1087263]  (0) 2024.06.11