Oracle Package 컴파일시 Timeout 이 계속 발생하는 경우가 발생하여, 이 문제를 해결하는 과정속에서 제가 찾아본 자료와 함께 이 자료들을 기준으로 옆자리에서 같이 근무하는 김모 대리가 열심히 적용해보면서 깔끔하게 정리를 하여 보내온 글을 공유합니다.
참고문서
http://kr.forums.oracle.com/forums/thread.jspa?threadID=477093
http://kr.forums.oracle.com/forums/thread.jspa?threadID=689731
1.
오렌지나 PLSQL등에서 작업시 필수로 멀티 세션 또는 프로그램을 두개 띄우셔야 합니다. 그리고 DROP 또는 컴파일 하고자 하는 작업을 실행합니다.
현재 LOCK이 걸려 있다면 해당 화면은 모래시계가 될겁니다.2.
다른 작업 창을 하나 띄웁니다. 아래 QUERY를 실행
오렌지나 PLSQL등에서 작업시 필수로 멀티 세션 또는 프로그램을 두개 띄우셔야 합니다. 그리고 DROP 또는 컴파일 하고자 하는 작업을 실행합니다.
현재 LOCK이 걸려 있다면 해당 화면은 모래시계가 될겁니다.2.
다른 작업 창을 하나 띄웁니다. 아래 QUERY를 실행
SELECT /*+ ordered */ W1.SID WAITING_SESSION, H1.SID HOLDING_SESSION, W.KGLLKTYPE LOCK_OR_PIN, W.KGLLKHDL ADDRESS, DECODE(H.KGLLKMOD, 0, 'None', 1, 'Null', 2, 'Share', 3, 'Exclusive', 'Unknown') MODE_HELD, DECODE(W.KGLLKREQ, 0, 'None', 1, 'Null', 2, 'Share', 3, 'Exclusive', 'Unknown') MODE_REQUESTED FROM DBA_KGLLOCK W, DBA_KGLLOCK H, V$SESSION W1, V$SESSION H1 WHERE (((H.KGLLKMOD != 0) AND (H.KGLLKMOD != 1) AND ((H.KGLLKREQ = 0) OR (H.KGLLKREQ = 1))) AND (((W.KGLLKMOD = 0) OR (W.KGLLKMOD = 1)) AND ((W.KGLLKREQ != 0) AND (W.KGLLKREQ != 1)))) AND W.KGLLKTYPE = H.KGLLKTYPE AND W.KGLLKHDL = H.KGLLKHDL AND W.KGLLKUSE = W1.SADDR AND H.KGLLKUSE = H1.SADDR;
아래와 같이 결과를 볼수 있습니다.
HOLDING SESSION은 이전에 작업된 SESSION 번호이며 WAITING SESSION 방금 우리가 작업한 삭제또는 컴파일 세션입니다.
3.
이제 해야하는 작업은 HOLDING SESSION을 찾아서 KILL 하는 작업입니다.
KILL 하는 작업은 해당 프로그램의 세션을 조회합니다.
그리고 메뉴에서 보면 KILL 이라는 명령어가 있을겁니다. 그걸로 삭제 하시면 됩니다. 일부 세션은 STATUS가 KILL로 바뀌면서 계속 남아 있는 경우가 있습니다. 그런 경우는 해당 SID를 TA에게 불러주고 종료 해 달라고 하면 작업해 주십니다.
KILL 작업시 PRGRAM과 MODULE 부분을 잘 확인하시고 종료해도 되는지 판단하셔야 합니다. 잘못하면 다른분의 작업이 종료될수도 있습니다.