程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> PL/SQL實現Oracle數據庫任務調度

PL/SQL實現Oracle數據庫任務調度

編輯:關於MYSQL數據庫

在數據庫操作中時常會有這樣的情況發生,由於一時的疏忽而誤刪或誤改了一些重要的數據,另外還有一些重要的任務需要周期性地運行。顯然,前一類問題主要是數據備份與恢復方面的,而後一類則主要是系統的任務調度。本文將針對這兩類問題,從應用程序開發角度給出一個解決方法。

  一.技術基礎

  由於本文是使用PL/SQL作為開發平台來提供解決方案,所以首先了解相關的背景知識。

  PL/SQL本身只是作為SQL語句的一個補充,通過引入過程化的概念來增強數據庫處理能力。然而,相對於C,C++,Java等過程化語言來說,PL/SQL的處理功能依然不夠強大。為此,Oracle數據庫提供了大量的應用程序開發包,來增強應用程序開發能力。根據本文的主題,介紹如下兩個開發包:DBMS_FlashBACK和DBMS_JOB。

  1. DBMS_FLASHBACK包主要是用來進行倒敘查詢使用的,即通過設置查詢時間來確定該時刻下的查詢結果。一般情況下,我們平時使用的查詢是查詢當前時間(sysdate)下的數據。使用DBMS_FlashBACK包就可以查詢以前數據的狀態,這一功能對於誤處理的情形而言就顯得極為重要。下面是該包中的兩個主要函數介紹:

  ·Enable與disable:分別是啟動和關閉倒敘查詢功能。應該注意的是,每次啟動倒敘查詢之前應首先關閉倒敘模式。

  ·Enable_at_time:設置查詢的時間點,它是以當前時間為起點進行設置的。

  2. DBMS_JOB包是用來對PL/SQL塊進行調度的實用包,它允許PL/SQL塊在指定的時間內自動運行,類似於VC中的Settimer這樣的定時器。為便於該包的運行,需要首先設置兩個init.ora參數:

  ·JOB_QUEUE_PROCESS指定啟動的後台處理數。如果它是0或沒有被設置,將沒有後台處理進入作業,它們也就不會運行。

  ·JOB_QUEUE_INTERVAL以秒為單位,指定每一個過程在檢查新的作業前等待的時間。在JOB_QUEUE_INTERVA所指定的時間內,一個作業最多只能運行一次。

  設置好這兩個參數後,就可對程序進行調度了,該包主要使用SUBMIT函數進行調度,該函數的原型為:

submit(返回的作業號,程序過程名,sysdate,下次運行的時間);

  二.數據恢復

  數據恢復是數據庫本身一個極其重要的功能,通常重要的數據可以通過其系統的數據備份功能來實現,所以在實際的開發中,重要的數據往往容易恢復,反而是一些平常的數據因為誤操作而引起一些麻煩。

  對於有經驗的開發人員來說,往往會對那些開發需要的基表(基表就是提供數據源的數據表)做一些備份。這樣,即使以後出現一些數據誤操作也不會導致重大的事故。

  更為實用而又很少為開發人員所使用的方法就是采用倒敘查詢,鑒於前面已經有了一定的技術鋪墊,現在就可以使用DBMS_FlashBACK包來對數據進行恢復了。為方便講述,假定一個基表emp_table,其表記錄如下:

Emp_no Emp_name Emp_salary 001 Jacky 5000 002 Rose 6000 003 John 7000
  即此表僅有3條記錄,那麼由於對數據庫的誤操作,導致第一條記錄被刪除,

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved