How to make automated task in Oracle

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

Published by

Ali Asgor

Graduate in GES, OCP holder, Self-motivated app developer, Programming lover, Lazy person...

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.