Friday 5 October 2007

การตั้ง Job Scheduler บน Oracle ด้วย dbms_scheduler

วิธีสร้าง Job Scheduler ง่ายๆด้วย dbms_scheduler ครับ

เมื่อเราเขียนโปรแกรม(ในที่นี้ใช้ PL/SQL)เสร้จแล้ว และต้องการควบคุมการทำงานด้วย Job บน server เราสามารถทำได้ตามนี้ครับ
1. สร้างโปรแกรมให้ Database รู้จัก
2. สร้าง Job ให้โปรแกรม โดย job จะทำหน้าที่กำหนดเวลาทำงานให้โปรแกรม และความถี่ที่โปรแกรมจะทำงาน

สร้างโปรแกรม

execute DBMS_SCHEDULER.create_program (
program_name => 'FILL_KEY_NO_PROGRAM',
program_type => 'PLSQL_BLOCK',
program_action => 'BEGIN PKG_SERVICES.FILL_KEY_NO_JOB(2); END;',
enabled => TRUE,
comments => 'Program to fill key no.');
เริ่มต้นด้วยการสร้าง program โดยทำการกำหนดชื่อโปรแกรม และคำสั่งทำงานของโปรแกรม
program_name = กำหนดชื่อให้ program
program_type = ชนิดของ program
program_action = คำสั่งให้โปรแกรมทำงาน
enabled = กำหนดสถานะให้โปรแกรม ทำงานทันที เหรอ disable ไว้ก่อน

สร้าง Job
execute DBMS_SCHEDULER.create_job (
job_name => 'FILL_KEY_NO_JOB',
program_name => 'FILL_KEY_NO_PROGRAM',
start_date => SYSTIMESTAMP,
repeat_interval => 'sysdate+30/(24*60*60)',
end_date => NULL,
enabled => TRUE,
comments => 'Job fill key no.');
ส่วนสร้าง job จะกำหนดเวลา และความถี่ ที่ job จะทำงาน
ในตัวอย่างนี้จะให้ job ทำงาน ทุกๆ 30 วินาที โดยให้เริ่มทำงานทันทีที่ run command นี้ (ค่า SYSTIMESTAMP จะคืนค่า วันที่และเวลาปัจจุบัน )
ถ้าต้องการให้ job run ทุกๆ แปดโมงเช้า ก็เปลี่ยนพารามิเตอร์ repeat_interval เป็น repeat_interval => 'TRUNC(SYSDATE+1)+8/24'

คำสั่งเพิ่มเติม
//enable job ให้ทำงาน
dbms_scheduler.enable('RESET_PAGE_JOB');

//disable job ไม่ให้ทำงาน
dbms_scheduler.disable('RPT1001_PROGRAM', TRUE);

//ดูข้อมูล program ที่มีใน database
SELECT owner, program_name, enabled FROM dba_scheduler_programs;

//ดูข้อมูล schedule ที่มีใน database
SELECT owner, schedule_name FROM dba_scheduler_schedules;

//ดูข้อมูล job ที่มีใน database
SELECT owner, job_name, enabled FROM dba_scheduler_jobs;

//drop program ทิ้ง
DBMS_SCHEDULER.drop_program (program_name => 'program_name');

//drop job ทิ้ง
DBMS_SCHEDULER.drop_job (job_name => 'program_name');

1 comment:

Anonymous said...

คุ้นๆว่า toad ก็ทำได้เหมือนกัน?