ORA-00054 에러

개발/DB 2015. 11. 25. 09:39

ORA-00054: resource busy and acquire with NOWAIT specified

 

위와 같은 에러메시지가 출력되면서 해당 DML이나 DDL 명령이 안될때가 있다.

 

증산은 DML문장이나 DDL문장 실행을 하게 되면 그냥 멈춰버리는 증상이다.

 

원인은 Commit이 수행되지 않았을 경우등의 문제로 발생하는 등 원인이 다양하다.

 

어쨋든 이 증상은 해당 테이블이 바쁘게 사용중일 때 나타나는데 일명 LOCK이 걸린것이다.

 

가장 확실한 방법은 DB를 재시작하는 것이다.

 

그러나 사실 필드에서는 말도 안되는 짓이다. 서비스중인 db를 잠깐이라도 내린다는것 자체가 미친짓이라 할 수 있다.

 

허나, test용으로 만든 서버라면 db재시작도 상관없다.

 

결국은 아래와 같이 Lock을 풀어주는게 가장 적당한 방법이다.

 

1. sqlplus 오라클 접속(시스템 계정으로 접속한다. 토드로 이용해도 무관)

#sqlplus / as sysdba

 

2.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='TABLE이름';

 

위 명령어를 입력하면 SID와 SERIAL NUMBER가 출력된다.

LOCK이 걸린 테이블의 SID이다.

 

3. 세션을 죽인다.

SQL> alter system kill session 'SID, SERIAL';

 

 

여기까지는 시스템계정을 알고 있는 사용자에 한해서의 해결책이다.

일반 사용자는 어떻게 할것인가???

간단하게 commit 명령어로 해결될 가능성이 높다. 이 명령어가 수행되고 나면 restore작업은 불가능하다.

SQL>commit

 

 

'개발 > DB' 카테고리의 다른 글

Clob 타입을 varchar2 타입으로  (0) 2018.02.14
오라클 REGEXP_LIKE  (0) 2015.12.16
해당 컬럼이 있는 테이블 찾기  (0) 2015.09.14
테이블 정보 조회  (0) 2015.01.16
오라클 UPDATE SELECT 문  (0) 2014.11.06