직장생활/DataBase

[ORALCE] DBMS JOB 배치잡 자동으로 살리는 방법

체리백 2024. 11. 13.
반응형


서버 운영간.. 계속 배치잡이 죽는다.

본인 운영서버에서는 타 데이터베이스에서 데이터를 긁어오는 배치인데, 아무래도 알려주지도 않고 서버 점검 해버리니

속수무책으로 배치가 죽어버리는 경우가 허다하다. 이렇게 해놓고 매일 정검 안한 운영탓 >ㅁ< ㅎㅎ

 

그래서 매일 정검 안하게 자동으로 점검 및 살릴 수 있는 방법이 있기에 정리를 해보겠습니다.

 

오라클 배치잡이란?

오라클 배치 잡(Batch Job)은 Oracle 데이터베이스에서 반복적으로 수행되는 작업이나 일괄 처리 작업을 스케줄링하고 자동화하는 기능입니다. 주로 대량의 데이터를 정기적으로 처리하거나, 시스템 유지보수 작업 등을 자동화하는 데 사용됩니다. 배치 잡을 설정하면 사용자가 직접 실행하지 않아도, 설정된 스케줄에 따라 작업이 자동으로 수행됩니다.

 

오라클에서 배치 잡을 설정하는 데는 두 가지 주요 방식이 있습니다:

  1. DBMS_JOB 패키지 (간단한 job)
  2. DBMS_SCHEDULER 패키지 (복잡한 job)

 

배치잡 조회방법

SELECT * FROM USER_JOBS;

 

 

JOB : 배치번호

LAST_DATE : 마지막 작동일

BROKEN : Y (작동중지) / N (작동중)

INTERVAL : 작동시간 ( SYSDATE+30/1440 : 매 30분마다) 

 

배치잡 BROKEN 푸는 방법

EXEC DBMS_JOB.BROKEN(202, FALSE);

 

배치잡 자동복구를 위한 DBMS_SCHEDULER 설정

BEGIN
    DBMS_SCHEDULER.CREATE_JOB (
        job_name        => 'MONITOR_DBMS_JOB_202',
        job_type        => 'PLSQL_BLOCK',
        job_action      => '
            DECLARE
                l_broken_status CHAR(1);
            BEGIN
                -- JOB 상태 확인
                SELECT broken INTO l_broken_status 
                FROM dba_jobs 
                WHERE job = 202;

                -- BROKEN 상태가 Y인 경우 자동 복구 및 실행
                IF l_broken_status = ''Y'' THEN
                    -- BROKEN 상태 해제
                    DBMS_JOB.BROKEN(202, FALSE);

                    -- JOB 실행
                    DBMS_JOB.RUN(202);
                END IF;
            END;',
        start_date      => SYSTIMESTAMP,
        repeat_interval => 'FREQ=MINUTELY; INTERVAL=5',  -- 5분마다 실행
        enabled         => TRUE
    );
END;
/

 

스케쥴러 등록 확인방법

SELECT job_name, job_type, enabled, state, last_start_date, last_run_duration FROM dba_scheduler_jobs ORDER BY job_name;

 

 

마무리

일단 등록해놨는데, 제대로 작동하는지는 오류가 생겨봐야 알거같습니다. 그래도 매번 정검하는 것보다 스케쥴을 이용해 미리 예방하는것도 좋은 방법인듯 합니다. :-)

반응형

댓글