안녕하세요.
인포믹스에서 isolation level은 4가지가 있습니다.
자세한 설명은 인포믹스 SQL Syntax의 Set Isolation또는
Set Transaction부분을 보시면 됩니다. 대충 해석+설명을
해보면
1. dirty read(uncommitted read) - no logging mode default
읽고자하는 모든 행에 락을 테스트하거나 걸지 않고 행의 데이터를
읽는다. 다른 사용자가 트랜잭션을 시작하여 데이터가 수정되고
COMMIT를 하지 않은 상태에서도 상대가 수정한 데이터가 읽혀진다.
이에따라 팬텀행(phantom row)를 읽을 수도 있다. 주로 읽기 전용의
코드 테이블이나 수정상태로 읽혀도 무방한 경우 사용한다.
2. committed read - logging mode default
읽고자하는 모든 행에 락을 테스트하여 락을 걸 수 있을 경우 데이터를
읽는다. 다른 사용자가 수정하고 있는 행일 경우 set lock mode to ?에
따라 wait일 경우 커밋을 하거나 롤백을 할때가 지 기다리고 no wait일
경우는 락이 걸려있다는 오류를 wait ###일 경우에는 해당 초만큼 기다
려보고 그래도 락이 걸린 경우 오류를 반환한다. 락을 테스트만 하기
때문에 읽힌 다음에 다른사용자가 수정할 수도 있다. 기본 격리모드로
각각의 행이 서로 의존성이 없고 읽혀진 행의 값에 의존하여 update가
되지 않을 경우 사용된다.
3. cursor stablity
읽어들이는 행에 공유 락을 사용하여 다른 사용자가 수정할 수 없도록
한다. 락은 커서의 현재 행에 걸게 되며, 커서의 이동시 락을 풀고 다음
커서 행에 걸게된다. 물론 수정을 하게 되면 트랜잭션이 종료할 때까지
락을 걸게된다. 읽혀진 행의 값에 의존하여 update를 할 경우 사용된다.
4. repeatable read - ANSI database default
select하는 모든 행에 공유락을 걸고 트랜잭션이 종료할 때까지 락을
풀지 않는다. 하나의 사용자가 select한 모든 커서의 행을 다른 사용자가
수정할 수 없다. 트랜잭션 내에서 반복된 select문은 1,2,3과는 달리
동일한 결과를 select하게 된다. 많은 락을 사용함으로써 동시 사용성을
떨어뜨린다.
위의 설명은 테이블이 row lock을 사용할 경우에 해당하고 page lock(default)을
사용할 경우 페이지 단위로 lock를 사용하게 되므로 인접한 행 모두 락이 걸릴 수
있다. 이 경우 현재 사용자가 update중인 행이 아닌 다른 행을 읽을 경우 인접하여
같은 페이지 내에 있다면 dirty read가 아닌 경우 읽혀지지 않는다.
logging mode/no logging mode는 데이터베이스 생성시 logging모드를 말하여
ANSI 데이터베이스는 데이터베이스 생성시 ANSI형태로 만들어진 경우를
말합니다.
자세한 내용은 위에서 언급한 바와 같이 SQL Syntax를 참조하기 바랍니다.
그럼 수고하세요.
>>김재남 님께서 쓰시길<<
:: isolation level에 4가지가 있다고 하더군요..
:: 그중에서 dirty read을 제외하면 차이를 알수가 없네여...
:: 아시는 분이 있다면 알려 주시면 감사하겠습니다.
:: (인포믹스는 너무도 자료가 부족한것 같습니다. 저 같은 초보에게는 너무나도
:: 힘든 상황이죠....^^;)
::
|