2017-02-27 9 views

답변

2

흥미로운 질문입니다. 나는이 질문에 대한 당신의 동기와 목표를 알고 싶어합니다.
행에 공유 잠금이 있는지 여부를 확인하는 방법 (select 문을 사용하지 않고 업데이트하지 않음)이 있다고 생각하지 않습니다. 세션이 행을 수정하려고 시도 할 때만 다른 세션이 공유 잠금을 보유하고 있는지를 알 수 있습니다.
행에 배타적 잠금이 있는지 여부를 알고 싶다면 세션 분리 레벨을 반복 읽기로 설정할 수 있습니다.
set isolation to repeatable read; select * from tab1 where col1=1;
위의 정보는 테이블 자체가 행 수준 잠금 (기본값은 페이지 수준 잠금)을 사용한다고 가정합니다.
참고 : 반복 읽기는 가장 제한적인 격리 수준입니다. (https://www.ibm.com/support/knowledgecenter/SSGU8G_12.1.0/com.ibm.sqls.doc/ids_sqs_0030.htm)

+0

본질적으로 다중 내부 조인의 결과 인 응용 프로그램에서 처리 할 정보 행이 있습니다. 궁극적으로 처리가 완료되면 테이블 중 하나만 업데이트됩니다 (이 시점에서 응용 프로그램은 잠금으로 종료됩니다). – mihirp724

+0

해당 행에 대한 잠금을 보유하고있는 세션을 찾고 싶습니까? 동시 읽기 또는 갱신을 시도하는 다른 세션 (분리 레벨에 따라 다름)이 될 수 있습니다. DBA 권한이있는 경우 동시 세션 간의 경합을 줄이기 위해 많은 조치를 취할 수 있습니다. –

+0

아니요, 처리중인 현재 행이 잠겨 있는지 (누가 잠그고 있는지에 관계없이) 알고 싶습니다. – mihirp724