안녕하세요
oracle 9i를 사용하고 있는 시스템 입니다.
프로시져를 컴파일 할때 이런 lock이 걸립니다.
매번 걸리는건 아닙니다..컴파일이 잘 되다가 한번씩 걸립니다.
execute 할때도 아니고 컴파일 할때 락이 걸리니까.. 이해가 잘 안되기도 하고...
아무리 서치를 해봐도 해결법을 못찾겠어서 여쭤봅니다..
뭐를 좀 고쳐보면 될까요?? ㅜㅜㅜ
곧 운영서버에 적용을 해야하는데 이것때문에 불안해서...잠이 안옵니다.
-- 간략히 말씀드리면 -- 해당 프로시저를 sql들이 실행하고 있다면 shared mode로 library cache pin을 점유하고 있읍니다. -- 그 상황에서 프로시저를 컴파일하려고 하면 library cache pin을 exlusive mode로 획득해야 되는데 -- 서로 호환이 되지 않아 대기를 하는 것입니다. -- 물론 sql실행이 없을때는 컴파일이 바로 됩니다. -- 그리고 설령 프로시저가 컴파일이 되었다 하더라도 그 프로시저를 실행하던 sql들이 -- invalid가 되어 실행시 재컴파일을 하게 되는 비극이 생깁니다. -- 따라서 db서버가 트래픽이 많을때는 절대 하시면 안됩니다.(초다빈도 수행 프로시져면 was,job을 내리시고 - 야근종용?) -- 그리고 프로시저 컴파일 후 sq이 재컴파일 되는 문제는 패키지내에 정의하시고 사용하시면 해결이 됩니다. -- p.s.) 프로시저,펑션 포함해서 이야기 했습니다. sql을 실행 커서라고 보시면 되겠습니다.