2013-08-13 1 views
0

오라클에서 이상한 시나리오가 나타났습니다. 한 클라이언트가 "업데이트 선택"권한 옵션 (트랜잭션 완료까지 행이 잠길 것임)이있는 레코드를 거의 얻으려고하지 않습니다. 첫 번째 클라이언트가 트랜잭션을 커밋하기 전에 다른 클라이언트가 읽기 전용 권한을 가진 행에 액세스하려고 시도 할 수도 있습니다. 트랜잭션 커밋 때까지 첫 번째 클라이언트에 의해 차단 된 두 번째 클라이언트의 행을 차단할 수 있습니다. Pls 날 안내. 미리 감사드립니다. 업데이트 쿼리가 완료 될 때까지 선택한 쿼리의 블록 행

답변

0

오라클에서 독자는 작성자와 작성자를 차단하지 않습니다. 독자는 결코 독자를 차단하지 않습니다. 따라서 다른 세션은 업데이트 프로세스가 수행중인 작업과 관계없이 항상 행의 현재 커밋 된 상태를 읽을 수 있습니다.

행을 읽을 수 없도록하려면 추가 잠금 로직을 코딩해야합니다. 독자는 WAIT의 유무에 관계없이 SELECT ... FOR UPDATE을 수행하여 작성자의 트랜잭션이 커밋 될 때까지 차단할 수 있습니다. 다른 테이블을 사용하여 잠금 논리를 작성할 수도 있습니다. 작성자가 갱신 프로세스가 진행 중이고 모든 판독기 프로세스가 해당 행을 읽을 수 있음을 나타내는 다른 테이블의 행을 갱신하는 일부 논리를 작성할 수 있습니다.

+0

올바른 방향으로 나를 안내해 주셔서 감사합니다. – Venkat

관련 문제