Skip to the content.

Oracle Database는 멀티버전 동시성 제어(MVCC) 및 트랜잭션 롤백(Rollback)을 실현하기 위해 데이터 블록 헤더 내 ITL(Interested Transaction List)Undo Segment 구조를 정교하게 활용합니다.

이 포스팅에서는 트랜잭션 수행 시 Oracle 데이터 블록 헤더에 기록되는 메타데이터와 UBA(Undo Block Address)를 통해 데이터 복구 및 Consistent Read(읽기 일관성)가 어떤 메커니즘으로 동작하는지 상세 분석해보겠습니다.


1. Oracle 데이터 블록과 ITL(Interested Transaction List)

Oracle의 데이터 블록(Data Block) 헤더에는 블록 내 튜플 변경 권한을 다투는 트랜잭션 슬롯 배열인 ITL(Interested Transaction List) 영역이 존재합니다 (INITRANS 매개변수로 초기 슬롯 개수 설정).

+-------------------------------------------------------+
| Data Block Header                                     |
|   - ITL Slot 1: Transaction ID (XID), UBA, Flag, Lock |
|   - ITL Slot 2: Transaction ID (XID), UBA, Flag, Lock |
+-------------------------------------------------------+
| Row Directory & Row Data                              |
|   - Row 1 (Header: ITL Slot 1을 가리키는 Lock Byte)    |
|   - Row 2                                             |
+-------------------------------------------------------+
  1. 트랜잭션 시작 및 ITL 슬롯 확보: DML(UPDATE/DELETE)이 실행되면 트랜잭션은 타겟 데이터 블록 헤더의 비어있는 ITL 슬롯 하나를 점유하고, 자신의 Transaction ID (XID)Undo Block Address (UBA) 정보를 기록합니다.
  2. Row Level Lock: 수정 대상 행의 헤더(Row Header) 내 Lock Byte에 해당 ITL 슬롯 번호를 기록하여 Row-Level Lock을 표시합니다.

2. Undo Segment와 UBA (Undo Block Address)

UBA(Undo Block Address)는 언두 테이블스페이스 내에 저장된 변경 전 이전 데이터(Old Version / Before Image)의 정확한 물리적 위치(File, Block, Slot 번호)를 가리키는 포인터입니다.

+-----------------------------------------+
| 데이터 블록 (User Data Block Header)       |
|-----------------------------------------|
| ITL Slot 1:                             |
|   - TXID = 10023                        |
|   - UBA  = Undo File 2, Block 405, Slot 2 |
|-----------------------------------------|
| Row Data                                |
|   - Value = "Updated Data" (New Version) |
+-----------------------------------------+
                    │
                    ▼ (UBA 포인터 참조)
+-----------------------------------------+
| Undo 블록 (Undo Tablespace)             |
|-----------------------------------------|
| File 2, Block 405, Slot 2               |
|   - Before Image: Value = "Original"    |
|   - TXID = 10023                        |
+-----------------------------------------+

3. ROLLBACK(롤백) 및 읽기 일관성(Consistent Read) 동작 흐름

1) ROLLBACK 실행 과정

  1. 세션에서 ROLLBACK을 요청하면 Oracle은 데이터 블록 ITL 슬롯의 UBA 포인터를 추적합니다.
  2. Undo Segment에 저장된 이전 버전 데이터(Before Image)를 읽어와 데이터 블록의 로우 값을 원본(“Original”) 상태로 되돌립니다.
  3. 해당 ITL 슬롯의 트랜잭션 상태를 해제하고 커밋 SCN을 정리합니다.

2) SELECT 질의와 CR(Consistent Read) 캐시 복제본 생성


💡 요약