Back-End/DB
오라클 ORA-00054 : 리소스가 사용 중이어서 NOWAIT가 지정되었거나 시간 초과가 만료된 상태로 획득합니다.
김검정
2025. 4. 3. 17:28
컬럼 삭제 중 해당 에러가 떴다.
원인
- 테이블이 다른 세션에서 사용 중이다.
다른 사람이 테이블에 대해 SELECT나 UPDATE를 하고 있거나, 트랜잭션이 열려 있어서 락이 걸려 있는 상태이다. Oracle은 ALTER TABLE 같은 DDL 문장을 실행할 때 해당 테이블에 대해 exclusive lock을 걸려고 시도하는데, 이미 누군가 쓰고 있다면 그 락을 못 걸고 에러가 난다.
누군가 테이블을 사용하고 있군...
해결 방법
- 잠깜 기다렸다가 다시 시도 : 누군가 사용하고 있다는건 일시적인 현상이므로 가장 직관적인 해결 방법인것 같다.
- 락 걸린 세션 확인하기(DBA 권한 필요)
- 락 잡고 있는 세션 종료(주의! 꼭 필요한 경우에만 진행한다.)
* 락 걸린 세션 확인 쿼리
SELECT
l.session_id,
s.serial#,
s.username,
s.status,
o.object_name
FROM
v$locked_object l
JOIN dba_objects o ON l.object_id = o.object_id
JOIN v$session s ON l.session_id = s.sid
WHERE
o.object_name = 'A';
* 세션 종료
ALTER SYSTEM KILL SESSION '세션ID,시리얼번호' IMMEDIATE;