더북(TheBook)

② SQL과 PL/SQL 형태만 실행 가능

DBMS_JOB 패키지에서 실행할 수 있는 작업은 SQL문과 익명 블록, 프로시저로 제한되며, DBMS 외부의 일반 실행 프로그램을 주기적으로 실행할 수는 없다.

③ 작업 실행 시간이 실행주기를 넘어설 경우의 문제

DBMS_JOB 패키지는 항상 작업 실행이 끝나면 끝난 시간을 기준으로 다음 실행시간을 계산한다. 그런데 실행시간이 실행주기를 넘어서면, 마지막 실행이 끝난 시간을 기준으로 다시 다음 실행시간을 계산한다.

예를 들어, 실행주기는 1시간, 다음 실행시간이 10시 00분으로 설정된 상태에서 프로시저의 실행시간이 1시간 10분이 걸렸다면 어떻게 될까? 원래는 이번 실행시간은 10:00, 다음 실행시간은 11:00 으로 되어야 하지만 프로시저 실행시간이 1시간 10분이나 걸려서 다음 실행시간은 11:10분이 된다. 11시 10분에 시작된 프로시저가 1시간 이내에 끝났다고 해도 다음 실행시간은 12시 10분이 된다. 애초에는 매시 정각에 수행되도록 하려는 것이 목적이었지만 프로시저 수행 시간이 늘어나면서 실행주기가 틀어진 것이다.

이런 이유로 인해 DBMS_JOB 패키지는 유용하지만 좀 아쉬운 인상을 준다. 그래서 DBMS_JOB 패키지의 한계를 극복하고자 오라클에서 새로 선보인 것이 바로 DBMS_SCHEDULER 패키지다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.