ORA-00054: 자원이 사용중이고, NOWAIT가 지정되어 있습니다 해결 방법
아래내용은 오라클 Bulletin 에 있는 내용입니다.
==================================================== 
ORA-54 WHEN DROP A TABLE(LOCK SESSION KILL) 
Bulletin no : 10060 
===================================================== 
ORA-54 WHEN DROP A TABLE(LOCK SESSION KILL) 
TABLE에 LOCK이 걸려 있어 DML 및 DDL 명령 사용 시 ORA-54 ERROR가 나오는 경우가 있다.
ORA-00054 에러는 SELECT ~ FOR UPDATE NOWAIT 또는 Lock Table 문이 수행될 경우 대상 테이블에 Lock을 설정하지 못해 발생한 에러, 결국 이 프로그램은 Lock을 획득하지 못함으로써 동일한 SQL문을 1초 간격으로 반복 시 도하고 있는 현상을 보이며, 프로그램이 전혀 수행되지 못하고 있는 상태 가 된다
00054, 00000, "resource busy and acquire with NOWAIT specified" 
// *Cause: Resource interested is busy. 
// *Action: Retry if necessary. 
이 때에는 DB를 RESTART하면 되지만 더 효율적인 해결 방법은 다음과 같이 할 수 있다. (serial number가 negative인 경우 그 값에 65536을 더해야 한다.)
1. 예를 들어 lock이 걸려 있는 테이블이 emp라고 가정하면 다음 SELECT 문으로
emp 테이블에 lock을 걸고 있는 session을 찾는다.
$ sqlplus system/manager 
SQL> 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='EMP'; 

SID SERIAL# 
--- ------- 
5 1 
6 1 
2. 다음 명령으로 SESSION들을 KILL한다.
SQL> alter system kill session '5, 1'; 
SQL> alter system kill session '6, 1'; 

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

Oracle 사용자 추가 관련 명령어 모음  (2) 2010.08.02
oracle mssql function 비교  (1) 2010.04.09
oracle start with, connect by  (3) 2010.04.09
oracle INTERSECT & MINUS  (2) 2010.04.09
oracle 긴 쿼리 오류시 처리용 sample  (3) 2010.04.09