Oracle
 sql >> база данни >  >> RDS >> Oracle

Как да планирате изпълнение на работа в определено време с помощта на dbms_scheduler

create_job е основното обаждане за планиране на повикване. не е необходимо да създавате наименована програма или график, за да направите това. когато създаването на именувана програма/график е полезно, е ако имате няколко работни места, които искат да използват това повикване. можете просто да препратите към посочения програмен график, вместо всяка работа да съдържа копие от него.

напр. ако сте имали 5 задачи, които искат да извикат пакета ви MYPKG.ENTRY_PROG(param) и всяко задание просто използва различна стойност на параметър, бих казал, че искате да използвате create_program за да дефинирате това pl/sql извикване и след това create_job за препратка към името на тази програма + задайте стойността на параметъра по избор. по този начин, ако искате да преименувате API по-късно или нещо подобно, не е нужно да променяте пет отделни задачи, за да направите това.

Ако работата ви е самостоятелна работа, която извиква рутина, която няма да бъде извикана от други задачи, тогава не е нужно да използвате create_program /create_schedule , просто използвайте create_job директно.

един пример, където използвах create_program беше да извикам тестов сбруя. моят тестов пакет се нарича pkg_test_harness.queue_tests(p_set_name in varchar2) така че имам дефинирани няколко задания, които поставят в опашка различни API, които да се изпълняват в 9 сутринта, 12 следобед и 17 часа. вместо да дефинирам всяко извикване на задачи поотделно, аз просто извиках 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. Използване на обхват на транзакция и заявки

  2. Разделете низ, разделен с точка и запетая с няколко колони, и създайте записи

  3. невалидна стойност за параметър, "директория"

  4. Регулярният израз на Oracle замества множество срещания на низ, ограден със запетаи

  5. Отпадане на свързани потребители в базата данни на Oracle