** 오라클 버전이 10g 이상이라면 DBMS_JOB보다 DBMS_SCUEDULER을 사용하는 것 추천
잡에서 지원하는 기능 대부분 스케쥴러 기능으로 대체 가능함 + 스케쥴러에서 더 많은 기능 지원
오랜만에 스케쥴러 생성 요청이 왔다.
우리는 사용 계정에 생성 권한을 부여하지 않고 DBA에서 생성해주고 있다.
A라는 계정에 new_schedule이라는 스케쥴을 생성해줘야한다.
BEGIN
DBMS_SCHEDULER.create_job (
job_name => 'A.new_scheduler', -- Job 이름
job_type => 'PLSQL_BLOCK', -- Job 종류 (PL/SQL 블록)
job_action => 'BEGIN MY_PROCEDURE; END;', -- 실행할 작업 (PL/SQL 프로시저 호출)
start_date => SYSTIMESTAMP, -- Job 시작 시간 (현재 시간)
repeat_interval => 'FREQ=DAILY; BYHOUR=0; BYMINUTE=0; BYSECOND=0', -- 매일 자정에 실행
comments => 'JOB comment', -- Job 관리를 위해 기재하는 것을 추천
enabled => TRUE -- Job을 즉시 활성화
);
END;
/
job_name에 꼭 계정.스케쥴이름으로 생성해야 한다.
그냥 스케쥴 이름만 기재해서 만들면 Owner가 SYS가 됨.
** 만약 계정에 스케쥴 생성 권한 부여가 필요하다고 하면 아래와 같이 부여 가능하다.
grant create any job to 계정명;
이렇게 하고 계정에서 직접 생성하면 owner를 지정해주지 않아도 된다.
회사에서는 관리 차원에서 계정에 최소한의 권한만 부여하는 것으로 보인다.
어떤 스케쥴이 돌아가는지 불필요한 스케쥴이 없는지 필요에 의해 생성된 스케쥴인지를 주기적으로 확인하기 때문에 이렇게 하는게 서로 편하긴 하다.
뭐 아무튼 생성하고 나면 조회를 해봐야겠죠?
이번에 잡 등록한 시스템은 11g버전이었는데 아래 명령어로 확인 가능하다.
SELECT JOB_NAME, STATE, NEXT_RUN_DATE, OWNER
FROM ALL_SCHEDULER_JOBS
WHERE STATE = 'SCHEDULED';
나도 까먹어서 찾아보면서 하는데 인터넷에서는 STATE가 아니라 STATUS로 나오던데 나는 STATE 였음.
안되면 아래 전체 명령어로 확인 후 필요한거만 뽑아서 보면 된다.
SELECT * FROM ALL_SCHEDULER_JOBS;
위 명령어로 어떤 쿼리나 스크립트를 실행하는지, 마지막 실행 시간이 언제인지 등을 알 수 있다.
그럼 이만
'Database' 카테고리의 다른 글
[Oracle] killed Session in Windows TM 락 세션 죽이기 (0) | 2025.02.05 |
---|---|
[Oracle] 오라클 계정 권한 부여 (0) | 2024.11.05 |