首頁  >  文章  >  資料庫  >  oracle怎麼定時執行預存程序

oracle怎麼定時執行預存程序

PHPz
PHPz原創
2023-04-18 14:09:074129瀏覽

在企業級應用程式中,我們不能只依靠使用者手動執行操作來實現所需的功能。因此,定時任務是必不可​​少的,這對於執行後台處理和資料載入特別有用。 Oracle資料庫提供了預存程序和定時任務來簡化開發者和管理員的工作。在本文中,我們將重點放在使用Oracle定時任務來定時執行預存程序的方法。

Oracle定時任務

Oracle資料庫中的定時任務可以使用DBMS_SCHEDULER套件來建立。這個套件可以讓我們建立具有複雜調度要求的作業。它能夠支援各種頻率,如每小時、每天、每週、每月、每年等。定時任務也可以在特定日期和時間執行,甚至可以在不同的時區執行。使用DBMS_SCHEDULER包可以建立以下類型的物件。

  • 作業 (job):執行DBMS_SCHEDULER.CREATE_JOB函數時建立的一個任務單元,由排程器定期或按請求調度。
  • 作業類別 (job class):一組相關的任務,共用同一個資源消耗限制規則。
  • 資源消耗限制 (resource consumption):用於控製作業和作業類別的資源消耗規則。
  • 鏈結 (chain):一個作業序列,其中一個作業的完成觸發另一個作業的執行。
  • 會話 (session):與一次作業執行相關聯的程序。可以記錄並監視會話以了解作業執行的情況。

在本文中,我們將重點介紹如何使用DBMS_SCHEDULER建立作業,並將其綁定到我們要執行的預存程序。

建立預存程序

我們首先需要建立一個預存程序,用於執行我們要完成的任務操作。下面是一個簡單的例子,該預存程序將向表中插入當前時間。

CREATE OR REPLACE PROCEDURE INSERT_TIME
AS 
BEGIN
  INSERT INTO TIME_LOG (LOG_TIME) VALUES (SYSDATE);
  COMMIT;
END INSERT_TIME;

建立作業

有了預存程序,我們接下來需要建立一個作業來調度執行。我們要建立的作業將在每天早上6點鐘插入當前時間。以下是使用DBMS_SCHEDULER.CREATE_JOB函數建立該作業的範例。

BEGIN
  DBMS_SCHEDULER.CREATE_JOB (
          job_name        => 'INSERT_TIME_JOB',
          job_type        => 'STORED_PROCEDURE',
          job_action      => 'INSERT_TIME',
          start_date      => SYSTIMESTAMP,
          repeat_interval => 'FREQ=DAILY; BYHOUR=6;',
          enabled         => TRUE,
          comments        => 'Insert current time every day at 6 AM');
END;

使用CREATE_JOB函數建立作業時,我們需要按照以下參數描述:

  • job_name:作業的名稱,必須是唯一的。
  • job_type:作業的類型,通常為「STORED_PROCEDURE」。
  • job_action:作業要執行的預存程序、程式包或執行檔名稱。
  • start_date:作業的啟動時間,可以是一個日期或一個時間戳記。如果不指定,則預設為目前時間。
  • repeat_interval:指定作業的執行頻率和時間間隔。在本例中,「FREQ=DAILY; BYHOUR=6;」表示每天早上6點執行一次。其他選項包括每小時、每週、每月、每年等。我們也可以使用這個參數來指定作業要在哪些日期執行,例如每週一、週二和週四。
  • enabled:表示該作業是否啟用。
  • comments:作業的簡短描述。

綁定作業到預存程序

在上面的範例中,我們建立了一個作業並指定了其執行的預存程序。現在,我們需要綁定這個作業到我們的預存程序中,以便在指定的時間執行操作。我們可以使用DBMS_SCHEDULER.SET_ATTRIBUTE函數來完成這項任務。

BEGIN
  DBMS_SCHEDULER.SET_ATTRIBUTE (
          name => 'INSERT_TIME_JOB',
          attribute => 'program_action',
          value => 'INSERT_TIME;');
END;

在此範例中,我們使用SET_ATTRIBUTE函數將作業「INSERT_TIME_JOB」的「program_action」屬性設定為「INSERT_TIME」。這將告訴DBMS_SCHEDULER在特定時間呼叫INSERT_TIME預存程序。

我們已經學習如何使用DBMS_SCHEDULER套件建立定時作業,並在預存程序中綁定任務。現在,我們可以等待定時任務執行,並在TIME_LOG表中查看記錄。

結論

使用Oracle資料庫的定時任務功能,可以幫助我們輕鬆執行後台處理任務。 DBMS_SCHEDULER套件提供了許多選項來滿足我們特定的應用程式需求,例如重複執行、並行執行、失敗復原等。此外,它能夠跨不同的時區、日期、週、月等執行作業,這使得定時任務非常靈活。在本文中,我們將重點放在如何使用Oracle的定時任務來定時執行預存程序。我們希望這篇文章能為您提供有用的指導,並幫助您更了解基於Oracle資料庫的定時任務的使用和運作原理。

以上是oracle怎麼定時執行預存程序的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn