DBMS_SCHEDULER là 1 giải pháp lên lịch chạy chương trình có từ Oracle 10g. Cách tạo job cũ với DBMS_JOB vẫn có thể sử dụng
NỘI DUNG
1 Tạo 1 job
2 Xóa 1 job
3 Chạy 1 job ngay lập tức
4 Thay đổi các thuộc tính của job
5 Stop job đang chạy
6 Enable / Disable a job
7 Giám sát jobs
1. TẠO JOB
Phải có quyền CREATE JOB mới được tạo:
BEGIN
DBMS_SCHEDULER.CREATE_JOB (
job_name => 'my_java_job',
job_type => 'EXECUTABLE',
job_action => '/usr/bin/java myClass',
repeat_interval => 'FREQ=MINUTELY',
enabled => TRUE
);
END;
/
begin
dbms_scheduler.create_job (
job_name => 'migrate_files',
job_type => 'executable',
job_action => '/home/oracle/bin/migrate_files.sh',
start_date => '01-mar-2010 07:00:00 am',
repeat_interval => 'freq=daily',
enabled => true);
end;
/
dbms_scheduler.create_job (
job_name => 'migrate_files',
job_type => 'executable',
job_action => '/home/oracle/bin/migrate_files.sh',
start_date => '01-mar-2010 07:00:00 am',
repeat_interval => 'freq=daily',
enabled => true);
end;
/
repeat_interval | Mô tả |
freq=hourly | Chạy hàng giờ |
freq=daily; byhour=3 | Chạy hàng ngày lúc 3 am |
freq=daily; byhour=8,20 | Chạy hàng ngày lúc 8 am và 8 pm |
freq=monthly; bymonthday=1 | Chạy hàng tháng vào ngày đầu tiên |
freq=monthly; bymonthday=-1 | Chạy hàng tháng vào ngày cuối cùng của tháng |
freq=yearly; bymonth=sep; bymonthday=20; | Chạy hàng năm vào ngày 20 tháng 09 |
2. XÓA JOB
EXEC DBMS_SCHEDULER.DROP_JOB('my_java_job');
begin
dbms_scheduler.drop_job ('run_load_sales');
end;
/
dbms_scheduler.drop_job ('run_load_sales');
end;
/
3. CHẠY JOB NGAY BÂY GIỜ
EXEC dbms_scheduler.run_job('myjob');
begin
dbms_scheduler.run_job (job_name => 'run_load_sales');
end;
/
dbms_scheduler.run_job (job_name => 'run_load_sales');
end;
/
hoặc
begin
dbms_scheduler.run_job('myjob');
end;
4. THAY ĐỔI THUỌC TÍNH JOB
EXEC DBMS_SCHEDULER.SET_ATTRIBUTE('WEEKNIGHT_WINDOW', 'duration', '+000 06:00:00');
BEGIN
DBMS_SCHEDULER.SET_ATTRIBUTE
('WEEKNIGHT_WINDOW', 'repeat_interval',
'freq=daily;byday=MON, TUE, WED, THU, FRI;byhour=0;byminute=0;bysecond=0');
END;
begin
dbms_scheduler.set_attribute (
name => 'run_load_sales',
attribute => 'repeat_interval',
value => 'freq=daily; byhour=3');
end;
/
dbms_scheduler.set_attribute (
name => 'run_load_sales',
attribute => 'repeat_interval',
value => 'freq=daily; byhour=3');
end;
/
5. Stop Jobs đang chạy
begin
dbms_scheduler.stop_job (job_name => 'run_load_sales');
end;
/
dbms_scheduler.stop_job (job_name => 'run_load_sales');
end;
/
6. Enable / Disable job
BEGIN
DBMS_SCHEDULER.ENABLE('myjob');
END;
begin
dbms_scheduler.enable (job_name => 'run_load_sales');
end;
/
dbms_scheduler.enable (job_name => 'run_load_sales');
end;
/
BEGIN
DBMS_SCHEDULER.DISABLE('myjob');
END;
begin
dbms_scheduler.disable (job_name => 'run_load_sales');
end;
/
dbms_scheduler.disable (job_name => 'run_load_sales');
end;
/
7. Giám sát job
-- Check job chạy lâu nhất, job chạy gần nhất cách đây 60 ngày
select
owner,job_name,job_creator,state,job_type,last_run_duration,job_action,schedule_type,start_date,repeat_interval,last_start_date,next_run_date
from dba_scheduler_jobs
where owner not
like 'SYS'
and state!='DISABLED'
--and last_start_date >
sysdate-60
order by last_run_duration
desc;
SELECT * FROM dba_scheduler_running_jobs WHERE job_name = 'MY_JAVA_JOB';
SELECT * FROM dba_scheduler_jobs WHERE job_name = 'MY_JAVA_JOB';
SELECT * FROM dba_scheduler_job_log WHERE job_name = 'MY_JAVA_JOB';
Hoặc kiểm tra JOB của schema khác
SELECT * FROM user_scheduler_jobs WHERE job_name = 'MY_JAVA_JOB';
SELECT * FROM user_scheduler_job_log WHERE job_name = 'MY_JAVA_JOB';