상세 컨텐츠

본문 제목

ORA-00054

DataBase/Oracle Error

by 탑~! 2013. 5. 23. 02:50

본문

 

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#
    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='TABLE_NAME';   -- Lock 걸린 테이블 명 입력

 

위의 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