কোন একটা প্রোগ্রাম/কাজ একটা নির্দিষ্ট সময় পর পর স্বয়ংক্রিয় ভাবে চালাতে 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.
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 এর মাধ্যমে বন্ধ অথবা চালু করতে পারেন।
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 -এ।