-
[Oracle] 오라클 UndoIT/etc 2022. 4. 3. 20:54
오라클 Undo
9i 부터 AUM(Automatic Undo Management) 기능이 도입되면서 그런 수동 작업이 불필요해져 Undo 세그먼트 개념을 많이 생소하게 느끼는 것 같다. Undo 세그먼트가 일반 세그먼트와 많이 다르다고 생각 할 수 있지만, Undo 세그먼트는 구조적으로 볼 때 데이터를 저장하는 일반 테이블 세그먼트와 별반 다르지 않다. 테이블 세그먼트와 마찬가지로 익스텐트 단위로 확장되고, 빠른 읽기/쓰기를 위해 Undo 블록들을 버퍼 캐시에 캐싱하며, 데이터 유실 방지하기 위해 그 변경사항을 Redo 로그에 로깅하는 점도 같다.다른 점이라면 Undo 세그먼트에 저장하는 내용인데, 각 트랜잭션 별로 Undo 세그먼트를 할당해 주고(두 개 이상의 트랜젹션이 하나의 Undo 세그먼트를 할당받아 같이 사용 할 수 있음) 그 트랜잭션이 발생시킨 테이블과 인덱스에 대한 변경사항들을 Undo 레코드 단위로 Undo 세그먼트 블록에 차곡차곡 기록한다.Undo 세그먼트에 저장된 정보는 아래 3가지 목적을 위해 사용한다.1. Transaction Rollback2. Transaction Recovery (Instance Recovery 시 rollback 단계)3. Read Consistency첫째, 트랜잭션에 의한 변경사항을 최종 커밋하지 않고 롤백하고자 할 때 Undo 데이터를 이용한다.둘째, 앞서 Redo에서 설명했듯이 Instance Crash 발생 후 Redo 를 이용해 Roll forward 단계가 완료되면 최종 커밋되지 않은 변경사항까지 모두 복구된다. 따라서 시스템이 셧다운된 시점에 아직 커밋되지 않았던 트랜잭션들을 모둥 롤백해야 하는데, 이때 Undo 세그먼트에 저장된 Undo 데이터를 사용한다.마지막으로, Undo 데이터는 읽기 일관성(Read Consistency)을 위해 사용되는데, DB2, SQLServer, Sybase등은 Lock을 통해 읽기 읽관성을 구혀하지만, 오라클은 Undo 데이터를 이용해 읽기 일관성을 구현한다.※ 오라클 아키텍처에 대해 다시 Remind 하기 위해 2009년에 발간된 "오라클 성능 고도화 원리와 해법 1"을 책장에서 꺼내어 블로그로 옮겨 보았다.
'IT > etc' 카테고리의 다른 글
[Postgresql]FATAL: could not create lock file "/var/run/postgresql/.s.PGSQL.5432.lock" (0) 2022.04.06 [Oracle] 오라클 옵티마이저 (0) 2022.04.04 [Oracle] 오라클 Redo (0) 2022.04.02 [Oracle] 오라클 버퍼 Lock (0) 2022.04.01 [Oracle] 오라클 DB 버퍼 캐시_(버퍼 상태) (0) 2022.03.31