Oracle Transaction Level test

이기현·2021년 1월 19일
0

Oracle

목록 보기
8/39

https://www.youtube.com/watch?v=vCMksYnoeyI&t=763s

  • SQL Plus 실행
    cmd창에서 oracle db가 깔려있는 폴더로 이동

    C:\oracle

로그인

sqlplus id/pw

Oracle Transaction Level Test;

기본 Default는 read committed이기 때문에 query수준의 read consistency 보장, transaction 수준은 보장 X

ex)

trans1trans2
select * from top
select * from top
update top set id=1 where id =3
select * from top

trans2의 select 결과는 변하지 않는다(commit이 되지 않았기 때문에)

trans1trans2
select * from top
select * from top
update top set id=1 where id =3 commit;
select * from top

하게되면 trans2의 select결과가 달라지게 된다 ( non-repeatable read 발생)

이러한 non-repeatable read와 pantom read를 제거하기 위해서는 격리 단계를 높여주어야 한다.

set transaction isolation level serializable;

격리단계를 3단계로 높여주면 select되어있는 범위내의 값에 lock을 걸기 때문에 다른 transaction에서 insert update delete가 불가능하다. 따라서 non-repeatable read나 pantom read 방지가 가능하지만, lock으로 인한 동시성 저하가 발생한다.

하지만 오라클은 MVCC를 통해 transaction-level에서 snapshot을 걸어서 SCN(System Change Number로서, Database의 commit된 version을 나타내는 database 구조)을 통해 항상 transaction의 시작지점을 바라볼 수 있기 때문에 따로 lock을 걸지 않아도 된다. 따라서 동시성을 확보할 수 있다. 하지만 undo log file의 값이 커지는 것을 방지해야 한다.

profile
실력을 쌓아가는 하루하루

0개의 댓글