데이터 무결성을 위해 LOCK과 TRANSCATION을 사용
(사용자간의 식별번호가 충돌하는 것을 예방)
LOCK이 걸리면 오류가 걸려 프로그램이 작동하지 않으므로,
LOCK이 걸린 개체를 확인하는 쿼리, KILL(해제)하는 쿼리를 기록하고자 한다.
(*관리자 계정에서만 작업가능)
1. LOCK 테이블 확인
SELECT *
FROM V$LOCKED_OBJECT
WHERE ORACLE_USERNAME = '사용자명'
;
2. LOCK 테이블 SID, SESSION 조회
*sid = session_id / serial# = serial_no
SELECT VS.SID
,VS.SERIAL#
FROM V$SESSION VS
,V$LOCK VL
,DBA_OBJECTS DO
WHERE VS.SID = VL.SID
AND VL.ID1 = DO.OBJECT_ID
AND VL.TYPE = 'TM'
AND DO.OBJECT_NAME = '테이블명'
;
3. SID, SERIAL 로 세션 죽이기(KILL)
ALTER system KILL SESSION 'sid, serial#';
4. 세션 KILL
SELECT DISTINCT X.SESSION_ID
, A.SERIAL_NO#
, D.OBJECT_NAME
, A.MACHINE
, A.PROGRAM
, A.LOGON_TIME
,'ALTER SYSTEM KILL SESSION'''||A.SID||', '||A.SERIAL#||''';'
FROM GV$LOCKED_OBJECT X
, GV$SESSION A
, DBA_OBJECTS D
WHERE X.SESSION_ID = A.SID
AND X.OBJECT_ID = D.OBJECT_ID
ORDER BY LOGON_TIME
'SQL' 카테고리의 다른 글
SQL_ DECODE, COALESCE, NULLIF, NVL, NVL2 (0) | 2023.10.13 |
---|---|
ORACLE_여러 행을 한 행으로 조회하기 (0) | 2022.08.05 |
SQL_ CASE(조건) 와 NULL(변경) (0) | 2021.08.22 |
SQL_데이터타입 / DATE (0) | 2021.08.21 |
SQL_기초2 (0) | 2021.08.20 |
댓글