ora-00054
- resource budy and acquire with NOWAIT specified
Table이 Lock 걸린 경우, 사용자가 거기에다가 DML, DDL 등을 실행하려 하면 나타나는 에러이다.
그렇다면 Table Lock이 왜 걸리느냐...
여러 이유가 있겠지만, 나같은 경우에는
DB에다 대고 DML을 마구마구 실행한 후 한참동안 커밋을 해주지 않았더니, Lock에 걸렸더랬다.
commit한 후 다시 DML을 시도하니 잘되더라..
만약 나처럼 commit을 할 수 없거나, 해서는 안될 경우!
제일 빠른 방법은 오라클 인스턴스를 재시작하는 것이지만,, 그것조차 허락되지 않는 상황일 경우 아래와 같이 lock 걸린 세션을 찾아 죽여준다-_-ㅋ
> select a.sid, a.serial# |
위의 table_name에 lock 이 걸린 table 명을 적어주고 쿼리를 실행시키면 대략 다음과 같은 결과가 나타난다.
--------------------
SID | SERIAL#
--------------------
123 | 456
SELECT A.SID, A.SERIAL#
FROM V$SESSION A, V$LOCK B, DBA_OBJECTS C
WHERE A.SID=B.SID
AND B.ID1=C.OBJECT_ID
AND B.TYPE='TM'
AND C.OBJECT_NAME='CR_CUSTODYMASTERFILE'; -- Lock 걸린 테이블 명 입력
ALTER SYSTEM KILL SESSION '192,23345'; -- SID와 Serial#를 쉼표로 붙여서 써준다
출처 : http://blog.naver.com/infinite23?Redirect=Log&logNo=80057478428