DBMS_scheduler

Database/Oracle 2009. 3. 12. 10:02

운영체제에서 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>
블로그 이미지

유효하지않음

,