Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

dbms_scheduler का उपयोग करके किसी कार्य को विशेष समय पर चलाने के लिए शेड्यूल कैसे करें

create_job कॉल शेड्यूल करने के लिए मूल कॉल है। ऐसा करने के लिए आपको एक नामित प्रोग्राम या शेड्यूल बनाने की आवश्यकता नहीं है। जहां एक नामित प्रोग्राम/शेड्यूल बनाना उपयोगी है, यदि आपके पास ऐसे कई कार्य हैं जो इस कॉल का उपयोग करना चाहते हैं। आप प्रत्येक कार्य की एक प्रति रखने के बजाय केवल नामित प्रोग्राम शेड्यूल का संदर्भ दे सकते हैं।

जैसे यदि आपके पास 5 कार्य हैं जो आपके पैकेज को कॉल करना चाहते हैं MYPKG.ENTRY_PROG(param) और प्रत्येक कार्य ने एक भिन्न पैरामीटर मान का उपयोग किया है, मैं कहूंगा कि आप create_program . का उपयोग करना चाहते हैं उस pl/sql कॉल को परिभाषित करने के लिए और फिर create_job उस प्रोग्राम के नाम को संदर्भित करने के लिए + पसंद का पैरामीटर मान सेट करें। इस तरह, यदि आप बाद में एपीआई का नाम बदलना चाहते हैं या कुछ और, तो आपको ऐसा करने के लिए पांच अलग-अलग नौकरियों को बदलने की जरूरत नहीं है।

यदि आपकी नौकरी केवल एक स्टैंडअलोन नौकरी है जो एक रूटीन कहती है जिसे अन्य नौकरियों द्वारा नहीं बुलाया जाएगा, तो आपको create_program का उपयोग करने की आवश्यकता नहीं है /create_schedule , बस उपयोग करें create_job सीधे।

एक उदाहरण जहां मैंने create_program . का प्रयोग किया है टेस्ट हार्नेस को कॉल करना था। मेरे परीक्षण हार्नेस पैकेज को pkg_test_harness.queue_tests(p_set_name in varchar2) कहा जाता है इसलिए मेरे पास कुछ नौकरियां परिभाषित हैं जो विभिन्न एपीआई को सुबह 9 बजे, दोपहर 12 बजे और शाम 5 बजे चलाने के लिए प्रेरित करती हैं। प्रत्येक जॉब कॉल को अलग से परिभाषित करने के बजाय मैंने सिर्फ create_program . कहा है जैसे:

    dbms_output.put('Setting up TEST_HARNESS_ENQUEUE scheduler program...');
    dbms_scheduler.create_program(program_name        => 'TEST_HARNESS_ENQUEUE',
                                  program_type        => 'STORED_PROCEDURE',                                                          
                                  program_action      => 'pkg_test_harness.queue_tests', 
                                  number_of_arguments => 1,
                                  enabled             => false,
                                  comments            => 'Program to enqueue a set of API test for the test harness to run.');

    dbms_scheduler.define_program_argument(program_name      => 'TEST_HARNESS_ENQUEUE',
                                           argument_name     => 'p_set_name',
                                           argument_position => 1,
                                           argument_type     => 'VARCHAR2',
                                           default_value     => '');

    dbms_scheduler.enable (name => 'TEST_HARNESS_ENQUEUE');

    dbms_output.put_line('done.');

और फिर प्रत्येक "नौकरी" को कार्यक्रम की ओर इशारा करते हुए परिभाषित किया गया था।

dbms_output.put('Setting up TEST_HARNESS_ENQUEUE_9AM scheduler job...');
dbms_scheduler.create_job(job_name        => 'TEST_HARNESS_ENQUEUE_9AM',
                          program_name    => 'TEST_HARNESS_ENQUEUE',
                          start_date      => systimestamp,
                          end_date        => null,
                          repeat_interval => 'freq=daily; byhour=9; byminute=0; bysecond=0;',
                          enabled         => true,
                          auto_drop       => false,
                          comments        => 'Job to enqueue a set of API test for the test harness to run.');

dbms_scheduler.set_job_argument_value(job_name          => 'TEST_HARNESS_ENQUEUE_9AM',
                                      argument_position => 1,
                                      argument_value    => 'DAILY_9AM');
dbms_output.put_line('done.');

dbms_output.put('Setting up TEST_HARNESS_ENQUEUE_12PM scheduler job...');
dbms_scheduler.create_job(job_name        => 'TEST_HARNESS_ENQUEUE_12PM',
                          program_name    => 'TEST_HARNESS_ENQUEUE',
                          start_date      => systimestamp,
                          end_date        => null,
                          repeat_interval => 'freq=daily; byhour=12; byminute=0; bysecond=0;',
                          enabled         => true,
                          auto_drop       => false,
                          comments        => 'Job to enqueue a set of API test for the test harness to run.');

मैंने एक नामित शेड्यूल नहीं बनाया, क्योंकि ये शेड्यूल अलग-अलग काम के लिए अद्वितीय हैं।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. मैं Oracle डेटाबेस में आवर्ती स्वचालित कनेक्शन को कैसे रोक सकता हूँ?

  2. ORA-01775:समानार्थक शब्द की लूपिंग श्रृंखला

  3. एक वर्चर से स्वरों का चयन करें, Oracle PL/SQL

  4. संग्रहीत प्रक्रिया में सरणी पास करें

  5. डेटाबेस व्यू से चयन करते समय मुझे एक खुला लेनदेन क्यों मिलता है?