Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Jak zaplanować pracę do uruchomienia w określonym czasie za pomocą dbms_scheduler

create_job jest podstawowym połączeniem do umówienia się na rozmowę. nie musisz tworzyć nazwanego programu lub harmonogramu, aby to zrobić. gdzie tworzenie nazwanego programu/harmonogramu jest przydatne, jeśli masz kilka zadań, które chcą użyć tego wywołania. możesz po prostu odwoływać się do nazwanego harmonogramu programu, zamiast mieć kopię tego zadania w każdym zadaniu.

np. jeśli masz 5 zadań, które chcą wywołać pakiet MYPKG.ENTRY_PROG(param) a każde zadanie po prostu używało innej wartości parametru, powiedziałbym, że chcesz użyć create_program aby zdefiniować to wywołanie pl/sql, a następnie create_job aby odwołać się do tej nazwy programu + ustaw wybraną wartość parametru. w ten sposób, jeśli chcesz zmienić nazwę API później lub coś takiego, nie musisz zmieniać pięciu oddzielnych zadań, aby to zrobić.

Jeśli twoje zadanie jest samodzielnym zadaniem, które wywołuje procedurę, która nie zostanie wywołana przez inne zadania, nie musisz używać create_program /create_schedule , po prostu użyj create_job bezpośrednio.

jeden przykład, w którym użyłem create_program było wywołanie uprzęży testowej. mój pakiet uprzęży testowej nazywa się pkg_test_harness.queue_tests(p_set_name in varchar2) więc mam zdefiniowanych kilka zadań, które umieszczają w kolejce różne interfejsy API, które mają być uruchamiane o 9:00, 12:00 i 17:00. zamiast definiować każde wywołanie zadań osobno, po prostu wywołałem create_program jak:

    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.');

a następnie każde "zadanie" zostało zdefiniowane wskazując na program.

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.');

nie stworzyłem nazwanego harmonogramu, ponieważ te harmonogramy są unikalne dla poszczególnych zadań.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak ręcznie skonfigurować Glassfish Server w środowisku Eclipse?

  2. Polecenie SQL nie zostało poprawnie zakończone?

  3. Czy Oracle zablokuje całą tabelę podczas wykonywania instrukcji DML, czy tylko wiersz?

  4. Rank() SQL lub coś takiego

  5. Wstaw do z union all, a nextval nie działa ze zduplikowanymi wartościami