2012-04-27 1 views
0

: - 우리의 코드에서ORA-00054 오류의 이유는 무엇입니까? 오라클의 문서에서

ORA-00054 resource busy and acquire with NOWAIT specified 

    Cause: Resource interested is busy. 
    Action: Retry if necessary. 

우리는 우리가 업데이트하려고하는 행을 고정하는 SELECT FOR UPDATE NOWAIT 명령을 실행하십시오.

지금은 논리가 SQL 오류 54을 반환하면 다른 사용자가 동일한 레코드를 업데이트하려고한다고 가정합니다. 이 논리가 유효합니까?

오라클의 설명서에서 DB가 과부하되면이 오류가 발생할 수도 있습니다.

위의 SQL 명령 만 사용하는 경우이 오류의 가능한 원인은 무엇입니까?

+1

오류가 즉시 반환 되나요, 아니면 시간 초과됩니까? – skaffman

+0

디버깅을하거나 거기에 똥을 넣을 수 없으므로 즉시 반환되는지 확실하지 않습니다. 이 코드는 독립 실행 형 서버에서 실행됩니다. – AppleGrew

답변

2

SELECT ... FOR UPDATE는 테이블의 RS (행 공유) 잠금과 행의 X (단독 잠금)을 획득하려고 시도합니다. 다른 세션이 테이블에 대한 독점적 잠금 (예 : 색인 작성) 또는 행에 대한 독점 잠금 (갱신, 삭제 또는 선택)을 갖는 경우, 다른 트랜잭션이 잠금을 해제하기를 기다립니다 (확약 또는 롤백 일반적으로 NOWAIT를 지정하지 않은 경우).

NOWAIT을 지정하지 않아도됩니다.

"압도적 인"이유로이 오류가 발생할 수있는 상황을 인식하지 못합니다.

+0

그것이 여기의 문제입니다. 이것은 로컬 데이터베이스이고 나는 유일한 사용자입니다. 이 오류를 일으키는 행을 잠근 DB를 찾을 수있는 방법이 있습니까? – AppleGrew

+0

마지막 댓글이 명확하지 않습니다. db에서 어떤 오류가 발생하여 해당 행을 잠근 사용자와 쿼리를 찾을 수 있습니까? – AppleGrew

+0

쿼리를 WAIT로 수정하면 시스템 뷰 DBA_WAITERS가 잠금 세션을 식별하는 데 도움이됩니다. –

관련 문제