-
[Oracle] Isolation level과 Snapshot too old공부 이야기/ORACLE 2024. 5. 19. 21:35
결론부터 말하면 둘은 관계가 없다.
Isolation level 3단계 Repeatable Read에서 처음 트랜잭션을 보장하는데 왜 Snapshot too old가 발생할 수 있을지 생각해봤다.
Repeatable Read는 트랜잭션을 보장하는 것이지 Undo 세그먼트를 보장하는 것이 아니기 때문이다.
Undo 세그먼트는 하나 이상의 트랜잭션에 씌워질 것이므로 Repeatable Read, Serializable에 의해 트랜잭션을 보장한다고 해도 다른 트랜잭션에서 메모리를 할당해버리면 도무지 피할 수 있는 방법이 없기 때문이다.
심지어 commit이 완료된 데이터일지라도 Undo 세그먼트에서 Retention보다 길어지면 덮어씌워진다.
물론 이 경우는 commit된 데이터를 flashback해서 굳이 사용하지 않는 이상 Snapshot too old가 발생하지는 않을 것이다.
Snapshot too old를 방지하기 위해서 Retention 파라미터 값을 늘리거나, Undo 세그먼트 할당 메모리 크기를 키울 수 밖에 없다.
'공부 이야기 > ORACLE' 카테고리의 다른 글
[Oracle] FLASH_CACHE 기능에 대해서 (0) 2024.05.24 [Oracle] Oracle Streams 개념 이해 (기본) (0) 2024.05.24 [Oracle] DML 트랜잭션이 발생했을 때의 과정 (1) 2024.05.19 [Oracle] 오라클은 SQL 실행 이력을 어떻게 관리할까? (0) 2024.05.17 [Oracle] 시퀀스 이모저모 (0) 2024.05.16