728x90
반응형
반응형
--1. 프로시저를 컴파일 하다가 종종 발생 할 것이다. 컴파일중인데 갑자기 pin에 잡혀 있다면 3번으로 가서 바로 lock 세션을 찾기 바람니다.
select sid Waiter,
substr(rawtohex(p1),1,30) Handle,
substr(rawtohex(p2),1,30) Pin_addr
from v$session_wait where wait_time=0 and event like 'library cache pin%';
--2. 프로시저 컴파일 하다가 waiting하고 있을듯하다.... 1,2번은 wating중인 세션의 정보를 찾는 것
select /*+ rule */ to_char(SESSION_ID,'999') sid ,
substr(LOCK_TYPE,1,30) Type,
substr(lock_id1,1,23) Object_Name,
substr(mode_held,1,4) HELD, substr(mode_requested,1,4) REQ,
lock_id2 Lock_addr
from dba_lock_internal
where
mode_requested<>'None'
and mode_requested<>mode_held
and session_id in ( select sid
from v$session_wait where wait_time=0
and event like 'library cache pin%') ;
--3. 여기서 부터 어떤놈이 lock를 걸고 있는지 확인 가능하다.
select /*+ rule */ sid Holder ,KGLPNUSE Sesion , KGLPNMOD Held, KGLPNREQ Req
from x$kglpn , v$session
where KGLPNHDL in (select p1raw from v$session_wait
where wait_time=0 and event like 'library cache pin%')
and KGLPNMOD <> 0
and v$session.saddr=x$kglpn.kglpnuse ;
--4. Lock을 걸고 있는 세션의 정보를 확인 한다
select /*+ rule */ sid,substr(event,1,30),wait_time
from v$session_wait
where sid in (select sid from x$kglpn , v$session
where KGLPNHDL in (select p1raw from v$session_wait
where wait_time=0 and event like 'library cache pin%')
and KGLPNMOD <> 0
and v$session.saddr=x$kglpn.kglpnuse );
--5. lock을 걸고있는 session이 실행하는 sql을 확인한다. 아래의 <SID> 에 4번에서 확인한 sid를 대입하여 조회한다.
select sid,serial#,sql_text
from v$session, v$sqlarea
where v$session.sql_address=v$sqlarea.address
and sid=<SID>;
--6.위 세션을 확인 후 킬 여부을 판단해서 아래 명령으로 세션을 킬한다.
alter system kill session '<sid>,<serial#>';
728x90
반응형
'DBMS > Oracle' 카테고리의 다른 글
V$session 컬럼의 의미들 (wait_time, last_call_et,status) (0) | 2024.11.12 |
---|---|
12.2 RDBMS 버전 이상 ALERT LOG 이전 형식 타임스템프 이용하기 (0) | 2024.10.07 |
Oracle 프로젝트 기간에 PROFILE 해제 하기 (0) | 2023.07.03 |
Oracle 11g이상 alert log DB에서 확인하기 (0) | 2023.06.28 |
Oracle에서 패스워드 틀린 session 찾는 방법 (0) | 2023.06.28 |