2011-07-01 3 views
1

우리가 우리 custId = 1 햄린로 고객 성을 얻을 하나 개의 요청에 기록oracle에서 동시에 읽을 수 있습니까?

CustId LastName 
1   Hamlin 

을 가지고 고객의 테이블을 말해봐. 우리는 성을 Kathy로 업데이트하지만 커밋하지는 않습니다.

또 다른 요청은 custId = 1에 대한 성을 얻는 데 있습니다. 캐시 또는 햄린을 얻을 수 있습니까?

내 이해는 두 요청이 서로 다른 연결 개체 (해당 경우)를 얻으면 두 번째 요청이 Hamlin을 보게된다는 것을 이해합니다. 그러나 그들이 동일한 접속 객체를 얻는다면, 두 번째 요청 객체는 성을 Kathy로 보게 될 것입니다. P

위의 이해가 정확한지 알려주십시오.

+0

대기, 연결 풀이 커밋되지 않은 트랜잭션과의 연결을 나눠주고 있습니까? 연결 풀이 반환 될 때 먼저해야 할 일은 롤백입니다. – derobert

답변

3

읽기 커밋 된 트랜잭션 격리 수준 (또는 그 이상, 오라클은 더 낮은 수준을 지원하지 않음)이므로 커밋되지 않은 다른 트랜잭션의 변경 사항을 볼 수 없습니다. 특히 직렬화 가능 모드에서는 쿼리가 다른 트랜잭션이 커밋되거나 롤백 될 때까지 기다려야하거나 트랜잭션이 롤백 될 수 있습니다.

오라클은 읽기 완료 및 직렬화 만 지원합니다 (예 : SET TRANSACTION ISOLATION LEVEL을 통해 선택할 수 있음). 다른 데이터베이스 시스템은 read-uncommitted를 추가로 지원하므로 업데이트되었지만 아직 커밋되지 않은 값을 볼 수 있습니다.

1

동일한 트랜잭션 인 경우 커밋되지 않은 값이 표시되지만 다른 사람/트랜잭션은 표시되지 않습니다.

다른 액세스에서는 가장 최근에 읽은 일관성있는보기가 표시됩니다.

+0

안녕하세요, 당신이 동일한 트랜잭션에 있다면 당신은 커밋되지 않은 값 (하지만 다른 사람/트랜잭션)을 볼 수 있습니다에 대한 질문이 있습니다. JDBC를 사용한다고 가정 해 보겠습니다. 동일한 거래가 동일한 연결을 의미한다고 말할 수 있습니까? jdbc에서 "동일한 트랜잭션"용어를 참조 할 수 있는지에 대해서는 확실하지 않습니다. 단순히 연결을 작성하고 명령문을 실행 한 다음 쿼리를 실행하는 것입니다. –

+0

호출 사이에 내재 된 COMMIT가있는 경우, 아니오, 사용자가 동일한 트랜잭션에 있지 않습니다. – Randy

관련 문제