오라클 쿼리중
조회하려는 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 |