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 |