DBDBDEEP

오라클에서 DDL 작업이 끝나지 않을경우가 있다.

wait event는 보통 library cache pin 으로 무한 유지

이럴때는 sys.x_$kglob 요테이블에서 어느세션이 holder인지 확인하는데 참고할수있는데 10g에서 잘사용했던 sys.x_$kglob 테이블이 없었다.


확인해보니 11g에서 XM$KGLOB 테이블로 이름이 변경된 모양이다.



아래 SQL을 통해 특정오브젝트를 사용하는 세션정보를 알아낼수있다.

만약 위 뷰테이블이 없다면 아래를 참고한다.

select * from V$LIBCACHE_LOCKS

https://docs.oracle.com/cd/E11882_01/server.112/e40402/dynviews_2021.htm#REFRN30635



SELECT /*+ ORDERED */

s.sid, s.status,

lo.kglnaobj AS object ,

decode( ll.kgllkmod , 0 , 'none' , 1 , 'null' , 2 , 'share' , 3 , 'exclusive' , ll.kgllkmod ) AS CurrentLockMode ,

decode( ll.kgllkreq , 0 , 'none' , 1 , 'null' , 2 , 'share' , 3 , 'exclusive' , ll.kgllkreq ) AS RequestLockMode ,

ll.kgllktype Type ,

s.schemaname HolderSchema,

s.program HolderProgram,

s.module HolderModule    


FROM dba_kgllock ll ,

sys.XM$KGLOB lo, 

v$session s

WHERE  ll.kgllkhdl = lo.kglhdadr

AND    ll.kgllkuse = s.saddr 

AND lo.kglnaobj ='오브젝트명' 


status가 Active이거나 Inactive이라도 세션이 없어야 해당 오브젝트에대한 DDL(ALTER혹은 recrate 등 compile)작업이 문제없이 진행된다.

이 글을 공유합시다

facebook twitter googleplus kakaoTalk kakaostory naver band