Study/Oracle Study

[Oracle 19c] ORA-00054 : 락 충돌로 DDL실패

im.march 2025. 7. 7. 17:19

세션1에서 테이블 생성 및 insert 진행후 commit 미진행 상태에서  다른세션에서 해당 테이블 변경 시도 

-- 세션1 
CREATE TABLE lock_test (id NUMBER);
INSERT INTO lock_test VALUES (1);

-- 세션2 
ALTER TABLE lock_test ADD name VARCHAR2(100);

세션2에서의 상황

 

자 이제 어떤 세션이 락을 걸었고, 어떤 세션이 락이 걸렸는지 알아보자

-- 락 건세션 
SELECT s.sid, s.serial#, s.username, s.status, l.type, l.block
FROM v$lock l
JOIN v$session s ON l.sid = s.sid
WHERE l.block = 1;

-- 락걸린 세션 
SELECT s.sid, s.serial#, s.username, s.status, l.type, l.block
FROM v$lock l
JOIN v$session s ON l.sid = s.sid
WHERE l.request > 0;

block 1 : 락을 건 세션

 

 

락걸린 세션을 강제종료 시켜보자 

ALTER SYSTEM KILL SESSION '15,51240' IMMEDIATE;

락 걸고 있는 세션을 강제종료하니 2번세션에서 돌고 있던 작업이 안료됨
NAME컬럼 추가됨