728x90
Lock 걸린 Session 조회 후 SID, SERIAL 값 추출
아래 쿼리를 통해 Lock 테이블의 SID, SERIAL 조회
* Lock Session에 대한 자세한 정보 조회(SPID, SID, SERIAL#, OBJECT_NAME, LOCKED_MODE 등 조회 가능)
SQL>
SELECT C.SPID AS PROCESS_ID
, A.SESSION_ID AS SESSION_ID
, B.SERIAL# AS SERIAL_NO
, A.OS_USER_NAME AS OS_USER_NAME
, A.ORACLE_USERNAME AS ORACLE_USERNAME
, D.OBJECT_NAME AS OBJECT_NAME
, A.LOCKED_MODE AS LOCKED_MODE
, B.STATUS AS STATUS
, B.OSUSER AS OS_USER
, C.PROGRAM AS USER_PROGRAM
FROM V$LOCKED_OBJECT A, V$SESSION B, V$PROCESS C, DBA_OBJECTS D
WHERE A.SESSION_ID = B.SID
AND B.PADDR = C.ADDR
AND A.OBJECT_ID = D.OBJECT_ID;
* Lock SQL 쿼리 조회
SELECT DISTINCT X.SESSION_ID, A.SERIAL#, D.OBJECT_NAME, A.MACHINE, A.TERMINAL,
A.PROGRAM, B.ADDRESS, B.PIECE, B.SQL_TEXT
FROM V$LOCKED_OBJECT X, V$SESSION A, V$SQLTEXT B, DBA_OBJECTS D
WHERE X.SESSION_ID = A.SID
AND X.OBJECT_ID = D.OBJECT_ID
AND A.SQL_ADDRESS = B.ADDRESS
ORDER BY B.ADDRESS, B.PIECE;
* SID, SERIAL#만 약식 조회
SQL>
select a.sid, a.serial#, a.username, a.process, b.object_name
from v$session a , dba_objects b, v$lock c
where a.sid=c.sid and b.object_id = c.id1
and c.type = 'TM';
SID SERIAL# USERNAME PROCESS OBJECT_NAME
---------- ---------- ------------ ------------- -----------
40 45183 TEST 1572:1292 TB_TABLE
SESSION KILL 진행
조회된 SID, SERIAL 값을 통하여 SESSION KILL 진행
SQL>
alter system kill session 'sid,serial' immediate;
TIP) alter system kill session 구문 생성 방법
SQL>
select 'alter system kill session '''||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 = '테이블 명';
4. (추가)OS 프로세스 Kill
위와 같이 수행했는데도 불구하고 킬이 되지 않을 경우,
직접 OS 프로세스를 킬함으로써 해결 가능
* SPID 조회
SQL>
select spid
from v$process
where addr = (select paddr
from v$session
where s.sid=조회된SID
and s.serial#=조회된SERIAL#);
* OS에서 Kill
$ kill -9 SPID번호
참고 사이트
https://blog.naver.com/tyboss/70039584044
오라클 lock 세션을 kill 하는 방법 (락 해제)
- 세션 조회 SELECT C.SPID AS PROCESS_ID , A.SESSION_ID AS ...
blog.naver.com
오라클 테이블 lock 현상 해결 방안(SESSION KILL)
- ORACLE 11g 기준 1. oracle 접속 및 Lock 걸린 Table 조회 1) lock 걸린 oracle user명을 알 경우 select * from v$locked_object where oracle_username = 'oracle user name'; 2) lock 걸린 oracle user명을 모를 경우 SELECT DISTINCT X.SESSION
daniel5.tistory.com
728x90
'Database > Oracle' 카테고리의 다른 글
[Oracle] 쉘에 SQL 쿼리문 결과값 출력하는 방법 (0) | 2025.03.04 |
---|---|
[Oracle] Undo Extent의 동작 원리와 튜닝 요소 식별, 튜닝 방법 (0) | 2025.02.27 |
[Oracle] Unrecoverable SCN (0) | 2025.02.25 |
[Oracle] Control File 정보를 조회하는 뷰(V$CONTROLFILE_RECORD_SECTION) (0) | 2025.02.25 |
[Oracle] Basicfile vs Securefile (0) | 2025.02.25 |