오라클 쿼리중 

조회하려는 row(s)단위로 lock설정이가능한데,

"FOR UPDATE 구문"을 사용한다



select * from employees

where empno = 1234

for update nowait;


해당 empno=1234에 lock을 획득하지 못하면 ORA-00054로 에러발생시키고 종료한다.

현재 해당 rows가 lock상태라고 이해하면 되겠다.

(ORA-00054:자원이 사용중이고,NOWAIT가 지정되어 있음)


select * from employees

where empno = 1234

for update wait 10  --(10 seconds동안 lock잡기위해 대기);


10초이후도 lock을 얻지 못하면 ORA-00054 에러 발생시키고 종료된다.


아래 출처의 내용을 보게되면

ORA-00054에러 발생시 계속해서 try하는 로직이 있다.

반드시 수행되어야 하는 내용이 있으면 이렇게 반복적인 작업을 진행하더라고 진행되도록 처리한다.

(예, 프로세스 처리를 위해 중요한 key, 값이 되는 것의 채번/값수정 할때 사용할 수 있겠다.)



예)로직수행시 기lock이 있을경우 sleep후 재시도하여 처리

샘플)출처: http://www.java2s.com/Tutorial/Oracle/0500__Cursor/CursorFORUPDATENOWAIT.htm

'DataBase > Oracle' 카테고리의 다른 글

ORA-01403 no data found, ORA-01422 TOO_MANY_ROWS  (0) 2018.12.16
Oracle Error Code description  (0) 2018.04.20

+ Recent posts