운영체제에서 CRON과 같은 명령어를 통해 사용자가 주기적, 비주기적으로 실행하는 프로그램을 자동으로 실행해주는 기능을 수행하듯이
오라클 RDBMS 기반의 시스템에서는 다양한 stored procedure, package, java class등의 프로그램을 데이터베이스 내에 생성하고, 필요에 따라 실행하게 된다.
이러한 DB 기반의 프로그램을 데이터베이스 네에서 주기적, 비주기적으로 실행해야 하는 경우, 스케쥴러 기능을 사용할 수 있다.
이 기능을 사용하기 위해서는 해당 사용자는 create any job 시스템 권한을 부여 받아야 한다.
DBMS_scheduler 패키지는 4가지 구성요소를 가진다.
program | 스케쥴러에 의해 실행될 DB 프로그램 |
job | 스케쥴러에 등록된 작업 유형 |
schedule | 등록된 작업의 작업 일정 |
window | 수행될 작업에 할당될 시스템 자원에 대한 정보 |
begin dbms_scheduler.create_program ( program_name => 'test_scheduler', program_action => '/export/home/work/aaa.exe', program_type => 'executable' ); end; /새롭게 생성한 프로그램은 scheduler에 의해 사용 가능하도록 활성화 상태이어야 한다.
SQL> execute dbms_scheduler.enable('test_scheduler');
또는 다음과 같이 비활성화시킬 수 도 있다.
SQL> execute dbms_scheduler.disable('test_scheduler');
scheduler 내에 생성되어 있는 프로그램을 삭제한다.
begin dbms_scheduler.drop_program ( program_name => 'test_scheduler', force => false ); end; /다음은 실행할 프로그램의 스케쥴 계획을 생성한다. 스케쥴 이름과 실행될 시각, 종료시각, 실행주기등을 작성할 수 있다.
begin dbms_scheduler.create_schedule ( program_name => 'hourly_schedule', start_date => systimestamp, end_date => systimestamp + interval '30' day, repeat_interval => 'freq=hourly; interval=4', comments => 'every 4 hours' ); end; /create_job 프로시져를 이용하면 스케줄과 함깨 실행할 SQL 문장 또는 PL/SQL 블럭을 등록할 수 있다.
begin dbms_scheduler.create_job ( job_name => 'my_emp_job1', job_type => 'PLSQL_BLOCK', job_action => 'insert into emp values(7987, "SALLY","ANALYST", null,null,null,null,null);', start_date => '09/07/23 17:16:51.927000+09:00', repeat_interval => 'freq=daily; interval=2', comments => 'my new job' ); end; /다음은 실행될 스케쥴 job을 삭제하는 방법이다.
begin dbms_scheduler.drop_job ( job_name => 'my_emp_job1', force => false ); end; /이제, check_test라는 PL/SQL 블럭을 생성해서 스케쥴러에 등록한 후, 자동으로 실행해 보자.
create or replace procedure check_test IS v_no number(4); v_name varchar2(13) := null; BEGIN select empno, ename into v_no, v_name from scott.emp where empno =7934; dbms_output.put_line(v_no||' '||v_name); END; / BEGIN dbms_scheduler.create_job ( job_name => 'my_emp_job2', job_type => 'PLSQL_BLOCK', job_action => 'BEGIN check_test(); END;', schedule_name => 'hourly_schedule' ); END; / execute dbms_scheduler.enable('my_emp_job2');scheduler에 의해 활성화된 my_emp_job2를 스케쥴링한다.
execute dbms_scheduler.run_job('my_emp_job2'); BEGIN DBMS_SCHEDULER.DROP_JOB ( job_name => 'my_emp_job2'; force => false ); END; /이번에는 운영체제상에 존재하는 실행파일을 스케쥴러에 등록한 후 자동으로 실행하는 예제
begin dbms_scheduler.create_job ( job_name => 'my_emp_job3', job_type => 'executable', job_action => '/export/home/work/aaa', start_date => systimestamp, repeat_interval => 'freq=daily; ingterval=2', end_date => systimestamp + interval '30' day ); end; / execute dbms_scheduler.enable ('my_emp_job3'); execute dbms_scheduler.run_job('my_emp_job3'); BEGIN dbms_scheduler.drop_job ( job_name => 'my_emp_job3', force => false ); END; /이번에는 실행될 프로그램에 자원관리 기능을 적용하는 방법
begin dbms_scheduler.create_window ( window_name =>'my_window100', schedule_name => 'hourly_schedule', resource_plan => 'internal_plan', duration => interval '160' minute, comments => 'My window' ); END; / execute dbms_scheduler.enable ('my_wondow100'); execute dbms_scheduler.run_job('my_emp_job2');오라클 자료사전의 scheduler와 관련된 자료
col comments format a35
col table_name format a35
select table_name, comments from dictionary
where table_name like 'DBA%SCHEDULER%'
order by table_name;
TABLE_NAME COMMENTS
----------------------------------- -----------------------------------
DBA_SCHEDULER_CHAINS All scheduler chains in the database
DBA_SCHEDULER_CHAIN_RULES All rules from scheduler chains in the database
DBA_SCHEDULER_CHAIN_STEPS All steps of scheduler chains in the database
DBA_SCHEDULER_CREDENTIALS All scheduler credentials in the database
DBA_SCHEDULER_GLOBAL_ATTRIBUTE All scheduler global attributes
DBA_SCHEDULER_JOBS All scheduler jobs in the database
DBA_SCHEDULER_JOB_ARGS All arguments with set values of all scheduler jobs in the database
DBA_SCHEDULER_JOB_CLASSES All scheduler classes in the database
DBA_SCHEDULER_JOB_LOG Logged information for all scheduler jobs
DBA_SCHEDULER_JOB_ROLES All scheduler jobs in the database by database role
DBA_SCHEDULER_JOB_RUN_DETAILS The details of a job run
DBA_SCHEDULER_PROGRAMS All scheduler programs in the database
DBA_SCHEDULER_PROGRAM_ARGS All arguments of all scheduler programs in the database
DBA_SCHEDULER_REMOTE_DATABASES List of registered remote databases for jobs
DBA_SCHEDULER_REMOTE_JOBSTATE Remote state of all jobs originating from this database
DBA_SCHEDULER_RUNNING_CHAINS All steps of all running chains in the database
DBA_SCHEDULER_SCHEDULES All schedules in the database
DBA_SCHEDULER_WINDOWS All scheduler windows in the database
DBA_SCHEDULER_WINDOW_DETAILS The details of a window
DBA_SCHEDULER_WINDOW_GROUPS All scheduler window groups in the database
DBA_SCHEDULER_WINDOW_LOG Logged information for all scheduler windows
DBA_SCHEDULER_WINGROUP_MEMBERS Members of all scheduler window groups in the database
22 rows selected.
SQL>