কোন একটা প্রোগ্রাম/কাজ একটা নির্দিষ্ট সময় পর পর স্বয়ংক্রিয় ভাবে চালাতে DBMS_SCHEDULER প্যাকেজ ব্যাবহার করা হয়। যেমনঃ দিন শেষে আপনার একটা টেবিল উপডেট করতে হয় অথবা মাস শেষে স্যালারি টেবিল উপডেট করতে হয়। এ সব কাজ স্বয়ংক্রিয় ভাবে করতে আমরা DBMS_SCHEDULER প্যাকেজ ব্যাবহার করি।
এ জন্য প্রথমেই আপনার প্রয়োজনীয় প্রোগ্রামটা তৈরি করে নিন। মনে করি আপনার salary_update_pro নামে একটা প্রসিডিউর আছে যেটা প্রতিদিন রাত 12:00 মিনিটে উপডেট করতে হয়। তাহলে আমি নিচের মত করে একটা জব তৈরি করব।
BEGIN
DBMS_SCHEDULER.create_job (
job_name => 'test_full_job_definition',
job_type => 'PLSQL_BLOCK',
job_action => 'BEGIN salary_update_pro; END;',
start_date => SYSTIMESTAMP,
end_date => null,
repeat_interval => 'freq=daily; byhour=0; byminute=0; bysecond=0;',
enabled => TRUE,
comments => 'Job defined entirely by the CREATE JOB procedure.');
END;
প্যারামিটারঃ
job_name: যে জবটা তৈরি করছেন তার একটা মিনিংফুল নাম। যাতে পরে নাম দেখেই বুঝা যায় একটা কি সম্পর্কিত জব।
job_type: কি ধরনের প্রোগ্রাম রান করবে তার টাইপ।
job_action: যে প্রোগ্রামটা রান করবে তা এখানে স্পেসিফায় করতে হবে।
start_date: জবটা কখন থেকে রান করবে তা এখানে টাইমস্ট্যাম্প ফরমেটে দিতে হবে।
repeat_interval: কত সময় পর পর রান করবে তা এখানে সেট করে দিতে হবে।
end_date: জবটা যদি একটা নির্দিষ্ট সময় বন্ধ করে দিতে চান তাহলে এখানে টাইমস্ট্যাম্প ফরমেটে দিতে হবে।
enabled: জব এনাবল না ডিজেবল।
comments: জব সম্পর্কিত কোন মন্তব্য থাকলে তা এখানে দিবেন।
repeat_interval: প্যারামিটারগুলোর মধ্যে সবচেয়ে important হল repeat_interval কেননা এর উপর ডিপেন্ড করে আপনার প্রোগ্রাম রান করবে। বিভিন্ন হতে পারে যেমনঃ daily, weekly, minutely, hourly etc.
syntax
repeat_interval = frequency_clause
[; interval=?] [; bymonth=?] [; byweekno=?]
[; byyearday=?] [; bymonthday=?] [; byday=?]
[; byhour=?] [; byminute=?] [; bysecond=?]
frequency_clause = "FREQ" "=" frequency
frequency = "YEARLY" | "MONTHLY" | "WEEKLY" | "DAILY"
| "HOURLY" | "MINUTELY" | "SECONDLY"
Example:
Everyday mid night:
'freq=daily; byhour=0; byminute=0; bysecond=0;'
Every hour:
'freq=hourly; byminute=0; bysecond=0;'
Every minute:
'freq=minutely; bysecond=0;'
Every 5 minute:
'freq=minutely; interval=5; bysecond=0;'
Every Monday at 09:00:
'freq=weekly; byday=mon; byhour=9; byminute=0; bysecond=0;'
Every Monday, Wednesday and Friday at 06:00:
'freq=weekly; byday=mon,wed,fri; byhour=6; byminute=0; bysecond=0;'
একটা জব ক্রিয়েট করার সাথে সাথে সেটা চলতে থাকে। তবে আপনি ইচ্ছা করলে stop_job এবং run_job এর মাধ্যমে বন্ধ অথবা চালু করতে পারেন।
example
BEGIN
-- Run job synchronously.
DBMS_SCHEDULER.run_job (job_name => 'test_full_job_definition',
use_current_session => TRUE);
-- Stop jobs.
DBMS_SCHEDULER.stop_job (job_name => 'test_full_job_definition,
test_prog_sched_job_definition');
END
ড্রপ জবঃ কোন জব মুছে ফেলতে ড্রপ জব কমান্ড ব্যাবহার হয়।
BEGIN
DBMS_SCHEDULER.drop_job (job_name => 'test_sched_job_definition');
END;
ভিউইং এক্সিস্টিং জবঃ জব সম্পর্কিত সমস্ত ডাটা DBA_SCHEDULER_JOBS, ALL_SCHEDULER_JOBS এবং USER_SCHEDULER_JOBS এই তিনটা ভিউ-এ থাকে। আপনার প্রয়োজন অনুযায়ী উপরোক্ত ভিউ থেকে কুয়েরি করে দেখতে পারেন।
এই হল DBMS_SCHEDULER নিয়ে বেসিক কথা বার্তা। আপনি চাইলে DBMS_SCHEDULER দিয়ে আরও কমপ্লেক্স কাজ করতে পারেন, বিস্তারিত দেখুন Oracle Doc -এ।