데이터베이스

Consistent Mode vs. Current Mode in Oracle

Oracle 데이터베이스에서 데이터를 읽고 처리할 때, Consistent Mode(일관성 모드)Current Mode(현재 모드) 두 가지 방식이 존재합니다.
이 모드는 쿼리의 실행 방식과 데이터 일관성을 유지하는 방법에 따라 결정됩니다.

1. Consistent Mode (일관성 모드)

Consistent Mode(일관성 모드)쿼리 실행 시점의 일관된 데이터를 제공하는 방식입니다.
즉, 쿼리가 시작된 시점의 SCN(System Change Number, 변경 번호) 기준으로 데이터를 반환합니다.

특징

  1. 쿼리 실행 시점의 데이터 스냅샷을 유지
    • 실행 중 트랜잭션이 다른 데이터 변경을 수행하더라도 쿼리는 변경 전 데이터(UNDO를 이용하여 재구성됨)를 반환
  2. 일관성 유지 (Read Consistency)
    • 여러 개의 테이블을 조회하는 경우, 동일한 시간의 데이터를 기준으로 일관된 결과 제공
  3. UNDO를 사용하여 일관된 데이터 유지
    • UPDATE, DELETE 등의 연산이 수행되면 변경 이전 데이터가 UNDO에 저장됨
    • UNDO 데이터를 사용하여 쿼리 실행 시점의 데이터를 복구함
  4. SELECT 쿼리에서 사용
    • SELECT 문은 기본적으로 Consistent Mode에서 실행됨
    • 트랜잭션이 실행되더라도 쿼리가 시작된 시점의 데이터만 반환

📌 Consistent Mode 예제

다른 트랜잭션이 데이터를 변경해도 기존 데이터를 반환

-- 세션 1: 데이터 조회 (Consistent Mode)
SELECT * FROM employees WHERE emp_id = 100;

-- 세션 2: 데이터 변경 (Current Mode)
UPDATE employees SET salary = 5000 WHERE emp_id = 100;
COMMIT;

결과:

  • SELECT는 변경된 데이터가 아니라 쿼리 시작 시점의 데이터(SCN 기준) 반환
  • 변경된 데이터(salary = 5000)는 이후 새로운 트랜잭션에서 조회 가능

2. Current Mode (현재 모드)

Current Mode(현재 모드)가장 최신 상태의 데이터를 읽고 수정하는 방식입니다.
즉, 데이터가 변경되면 가장 최신 값을 반환하며, UNDO를 사용하지 않음.

특징

  1. 변경된 데이터의 최신 상태를 반환
    • 실행 중인 트랜잭션이 변경한 데이터가 있으면, UNDO를 거치지 않고 즉시 최신 데이터를 반환
  2. UNDO를 사용하지 않음
    • Consistent Mode와 달리, 변경 이력이 저장된 UNDO를 이용하지 않고, 현재 블록의 최신 값을 직접 조회
  3. DML(INSERT, UPDATE, DELETE) 및 FOR UPDATE 문에서 사용
    • UPDATE, DELETE 등의 DML 문장은 Current Mode를 사용하여 최신 데이터를 참조
    • SELECT ... FOR UPDATE 문장은 Current Mode로 실행되어 최신 데이터를 잠금(Locking)할 수 있음
  4. 변경 충돌 가능성 존재
    • 여러 트랜잭션이 동시에 실행될 경우, 다른 트랜잭션에서 변경한 최신 데이터가 바로 반영됨

📌 Current Mode 예제

최신 데이터를 반영하여 업데이트

-- 세션 1: 데이터 변경
UPDATE employees SET salary = 5000 WHERE emp_id = 100;

-- 세션 2: 같은 데이터를 조회 (현재 변경된 값이 반영됨)
SELECT salary FROM employees WHERE emp_id = 100 FOR UPDATE;

결과:

  • SELECT ... FOR UPDATECurrent Mode에서 실행되므로 최신 데이터(salary = 5000) 반환
  • UNDO를 사용하지 않고 현재 커밋되지 않은 데이터도 볼 수 있음

3. Consistent Mode vs. Current Mode 비교

비교 항목Consistent Mode (일관성 모드)Current Mode (현재 모드)
데이터 조회 시점쿼리 실행 시작 시점의 데이터 반환 (SCN 기준)변경된 최신 데이터 반환
UNDO 사용 여부✅ UNDO 사용 (변경 전 데이터 조회)❌ UNDO 사용하지 않음
DML 적용 여부❌ DML(UPDATE, DELETE)에는 적용되지 않음✅ DML에서 사용됨
트랜잭션 일관성 유지✅ 모든 테이블이 동일한 시점의 데이터를 반환❌ 트랜잭션 변경 사항이 즉시 반영됨
사용되는 SQL 문SELECT, SELECT JOIN, SELECT WHEREUPDATE, DELETE, SELECT ... FOR UPDATE
변경된 최신 데이터 조회 가능 여부❌ 불가능 (쿼리 시작 시점 기준)✅ 가능 (가장 최신 데이터 조회)
성능비교적 낮음 (UNDO 데이터 필요)빠름 (최신 블록 바로 조회)

핵심 차이점

  • Consistent Mode: UNDO를 사용하여 쿼리 실행 시점의 일관된 데이터를 반환SELECT 문에서 기본적으로 사용됨
  • Current Mode: 가장 최신 데이터 즉시 반영UPDATE, DELETE, SELECT ... FOR UPDATE에서 사용됨

4. Consistent Mode & Current Mode 활용 전략

읽기 일관성이 중요한 경우 (Consistent Mode 사용)

  • 보고서 생성, 데이터 분석과 같이 특정 시점의 데이터를 유지해야 할 때
  • SELECT 문이 실행될 때 트랜잭션이 변경해도 영향을 받지 않도록 해야 하는 경우
  • ❗ 주의: UNDO 테이블 공간이 부족하면 ORA-01555 (Snapshot Too Old) 오류 발생 가능

📌 예제: 일관된 데이터 조회

SELECT * FROM employees WHERE department = 'IT';

최신 데이터가 필요한 경우 (Current Mode 사용)

  • 가장 최신 상태의 데이터를 읽어야 하는 경우
  • UPDATE, DELETE 같은 DML 작업이 수행될 때 현재 값 기준으로 실행
  • SELECT ... FOR UPDATE를 통해 최신 데이터를 잠금 처리하여 동시 수정 방지

📌 예제: 최신 데이터 조회 및 잠금

SELECT salary FROM employees WHERE emp_id = 100 FOR UPDATE;

5. 결론

Consistent Mode쿼리 실행 시점의 일관된 데이터를 제공하며, UNDO를 사용하여 이전 상태를 복구
Current Mode가장 최신 데이터를 즉시 반영하며, DML 문장과 SELECT … FOR UPDATE에서 사용
트랜잭션 충돌을 방지하고 성능을 최적화하려면 상황에 맞게 두 모드를 적절히 활용해야 함 🚀

zerg96

Recent Posts

MCP(Model Context Protocol)

오늘은 AI 생태계에 혁신적인 변화를 가져올 것으로 예상되는 MCP(Model Context Protocol)에 대해 상세히 알아보겠습니다. 2024년…

2주 ago

TPM(Trusted Platform Module)

1. TPM이란? TPM(Trusted Platform Module)은 국제 표준 기반의 보안 하드웨어 칩으로, 컴퓨터나 디지털 장비 내에서…

2주 ago

BitLocker

BitLocker는 Microsoft Windows 운영 체제에 내장된 디스크 전체 암호화(Full Disk Encryption) 기능입니다. 기업 환경뿐만 아니라…

2주 ago

《데블스 플랜 시즌2》: 게임인가, 연애인가? 소희 이렇게까지..?

시즌2, 기대했는데... 실망도 두 배!두뇌싸움을 기대했는데, 전략도 없는 자기들만의 감정에 따른 편가르기, 정치싸움이 되어 버린…

2주 ago

BPF도어(BPFdoor)

BPF(Berkeley Packet Filter) 도어는 해커가 관리자 몰래 뒷문을 새로 만든 것입니다.해커가 명령을 내려 특정 데이터들을 뒷문을…

2주 ago

IPC (Inter-Process Communication)

1. IPC의 개념과 목적 1.1 IPC란 무엇인가? IPC (Inter-Process Communication)는 운영체제 내의 서로 독립적인 프로세스…

3주 ago