>>박영길 님께서 쓰시길<<
:: 안녕하세요.
::
:: 인포믹스에서 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을 제외하면 차이를 알수가 없네여...
:: :: 아시는 분이 있다면 알려 주시면 감사하겠습니다.
:: :: (인포믹스는 너무도 자료가 부족한것 같습니다. 저 같은 초보에게는 너무나도
:: :: 힘든 상황이죠....^^;)
:: ::
|