### Lock 확인 쿼리 

SELECT do.object_name, do.owner, do.object_type,do.owner, vo.xidusn, vo.session_id, 

vo.locked_mode 

FROM v$locked_object vo , dba_objects do 

WHERE vo.object_id = do.object_id ; 


####  어떤 object에 어떤 lock이 걸렸는지 확인 

SELECT  T1.object_name, DECODE(locked_mode, 2, 'ROW SHARE', 3, 'ROW EXCLUSIVE',  4, 'SHARE', 5, 'SHARE ROW EXCLUSIVE', 6, 'EXCLUSIVE', 'UNKNOWN') lock_mode 

FROM  dba_objects T1, v$locked_object T2 

WHERE T1.object_id = T2.object_id; 


#### session 확인 

select * from v$session where status = 'ACTIVE' 


#### cursor 확인 

v$open_cursor 


#### 테이블의 lock 확인 

SELECT A.SID, A.SERIAL#, B.TYPE, C.OBJECT_NAME 

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 IN ('<테이블이름>'); 


/******************************************************************************* 

* LOCK 관련 

*******************************************************************************/ 

--V$LOCK 을 사용한 잠금 경합 모니터링 

SELECT s.username, s.sid, s.serial#, s.logon_time, 

  DECODE(l.type, 'TM', 'TABLE LOCK', 

        'TX', 'ROW LOCK', 

      NULL) "LOCK LEVEL", 

  o.owner, o.object_name, o.object_type 

FROM v$session s, v$lock l, dba_objects o 

WHERE s.sid = l.sid 

AND o.object_id = l.id1 

AND s.username IS NOT NULL    


--락이 걸린 세션 자세히 알아보기 

select a.sid, a.serial#,a.username,a.process,b.object_name, 

decode(c.lmode,2,'RS',3,'RX',4,'S',5,'SRX',8,'X','NO') "TABLE LOCK", 

decode (a.command,2,'INSERT',3,'SELECT',6,'UPDATE',7,'DELETE',12,'DROP TABLE',26,'LOCK TABLE','UNknown') "SQL", 

decode(a.lockwait, NULL,'NO wait','Wait') "STATUS" 

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' 


--락이 걸린 세션 간단히 알아보기 

select a.sid, a.serial#, b.type, c.object_name, a.program, a.lockwait, 

      a.logon_time, a.process, a.osuser, a.terminal 

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'; 


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' 


--락이 걸린 세션을 찾아 내어 세션을 죽이려고 해도 죽지 않는 경우 

--아래 쿼리문으로 OS단의 PROCESS ID를 찾아내어 OS에서 죽인다 

--kill -9 프로세스아이디 

select substr(s.username,1,11) "ORACLE USER", p.pid "PROCESS ID", 

s.sid "SESSION ID", s.serial#, osuser "OS USER", 

p.spid "PROC SPID",s.process "SESS SPID", s.lockwait "LOCK WAIT" 

from v$process p, v$session s, v$access a 

where a.sid=s.sid and 

p.addr=s.paddr and 

s.username != 'SYS' 


--위 쿼리문의 결과가 있다면 락이 걸린 세션이 있다는것이므로 아래의 쿼리문으로 세션을 죽인다 

ALTER SYSTEM KILL SESSION '11,39061' 



Posted by 사라링
BLOG main image
.. by 사라링

카테고리

사라링님의 노트 (301)
JSP (31)
J-Query (41)
JAVA (24)
VM-WARE (0)
디자인패턴 (1)
스크랩 (0)
스트러츠 (3)
안드로이드 (11)
오라클 (45)
우분투-오라클 (1)
이클립스메뉴얼 (6)
스프링3.0 (23)
자바스크립트 (10)
HTML5.0 (17)
정보처리기사 (1)
기타(컴퓨터 관련) (1)
문제점 해결 (3)
프로젝트 (2)
AJAX (4)
하이버네이트 (3)
트러스트폼 (11)
Jeus (2)
재무관리(회계) (5)
정규식 (5)
아이바티스 (8)
취미 (2)
소프트웨어 보안 관련모음 (0)
정보보안기사 (6)
C언어 베이직 및 프로그램 (3)
보안 관련 용어 정리 (2)
넥사크로 (6)
Total :
Today : Yesterday :