Oracle 데이터베이스에서 Undo 세그먼트는 트랜잭션에 의해 수행된 변경 내용을 롤백하기 위해 사용되는 공간입니다.
Undo 세그먼트는 주로 롤백 세그먼트라고도 불리며, 트랜잭션의 변경 내용을 보관하여 해당 트랜잭션이 롤백될 때 이를 이용해 데이터베이스를 이전 상태로 되돌릴 수 있도록 합니다.
Undo 세그먼트의 구조는 다음과 같습니다:
1. Extent(익스텐트): Undo 세그먼트는 하나 이상의 익스텐트로 구성됩니다.
익스텐트는 데이터베이스에서 할당된 연속적인 블록 그룹을 나타냅니다.
2. Segment Header(세그먼트 헤더): Undo 세그먼트는 세그먼트 헤더를 가지고 있습니다.
세그먼트 헤더는 세그먼트에 대한 메타데이터 정보를 저장하며, 세그먼트의 크기, 현재 사용 중인 익스텐트 등을 추적합니다.
3. Transaction Table(트랜잭션 테이블): Undo 세그먼트에는 트랜잭션 테이블이라고 불리는 특수한 데이터 구조가 있습니다. 트랜잭션 테이블은 현재 활성화된 트랜잭션에 대한 정보를 추적합니다. 이 정보에는 트랜잭션 ID, 시작 및 종료 시간, 사용 중인 언도 익스텐트 등이 포함됩니다.
4. **Undo 데이터 레코드:**
Undo 세그먼트에는 실제로 변경 내용을 저장하는 데이터 레코드가 포함되어 있습니다. 각각의 트랜잭션에 대해 해당 트랜잭션이 수행한 변경 내용(예: 행 삭제, 업데이트 등)이 저장됩니다.
Undo 세그먼트는 트랜잭션이 커밋되거나 롤백될 때까지 데이터를 유지하며, 롤백이 필요한 경우 해당 트랜잭션의 변경 내용을 이용하여 데이터베이스를 이전 상태로 복원합니다. 이러한 Undo 메커니즘은 데이터베이스의 일관성과 무결성을 보장하는 데 중요한 역할을 합니다.