Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Cara menjadwalkan pekerjaan untuk dijalankan pada waktu tertentu menggunakan dbms_scheduler

create_job adalah panggilan dasar untuk menjadwalkan panggilan. Anda tidak perlu membuat program atau jadwal bernama untuk melakukan ini. di mana membuat program/jadwal bernama berguna, adalah jika Anda memiliki beberapa pekerjaan yang ingin menggunakan panggilan ini. Anda bisa mereferensikan jadwal program yang disebutkan alih-alih meminta setiap pekerjaan menyimpan salinannya.

misalnya jika Anda memiliki 5 pekerjaan yang ingin memanggil paket Anda MYPKG.ENTRY_PROG(param) dan setiap pekerjaan hanya menggunakan nilai parameter yang berbeda, menurut saya Anda ingin menggunakan create_program untuk mendefinisikan panggilan pl/sql itu dan kemudian create_job untuk mereferensikan nama program itu + mengatur nilai parameter pilihan. dengan begitu, jika Anda ingin mengganti nama API nanti atau sesuatu, Anda tidak perlu mengubah lima pekerjaan terpisah untuk melakukan ini.

Jika pekerjaan Anda hanyalah pekerjaan mandiri yang memanggil rutinitas yang tidak akan dipanggil oleh pekerjaan lain, maka Anda tidak perlu menggunakan create_program /create_schedule , cukup gunakan create_job secara langsung.

salah satu contoh di mana saya menggunakan create_program adalah untuk memanggil test harness. paket test harness saya bernama pkg_test_harness.queue_tests(p_set_name in varchar2) jadi saya memiliki beberapa pekerjaan yang ditetapkan yang mengantrekan berbagai API untuk dijalankan pada jam 9 pagi, 12 siang dan 5 sore. alih-alih mendefinisikan setiap panggilan pekerjaan secara terpisah, saya hanya memanggil create_program seperti:

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

dan kemudian setiap "pekerjaan" didefinisikan menunjuk ke 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.');

saya tidak membuat jadwal bernama, karena jadwal ini unik untuk pekerjaan individu.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apakah aman untuk meletakkan indeks pada Tabel Sementara Oracle?

  2. Mengelompokkan catatan jam demi jam atau hari demi hari dan mengisi celah dengan nol atau nol

  3. Cari Tahu Simbol Mata Uang Yang Digunakan Sesi Anda di Oracle

  4. Urutan dequeue Oracle AQ

  5. Hal Yang Harus Anda Ketahui Sebelum Mempelajari Oracle