濮阳杆衣贸易有限公司

主頁 > 知識庫 > PL/SQL實現(xiàn)Oracle數(shù)據(jù)庫任務調(diào)度

PL/SQL實現(xiàn)Oracle數(shù)據(jù)庫任務調(diào)度

熱門標簽:語音電話機器人缺點 廣州市400電話辦理 語音電話機器人營銷方案 淮安自動外呼系統(tǒng)開發(fā) 南通防封外呼系統(tǒng)運營商 宜賓外呼系統(tǒng)廠家 修改高德地圖標注 地圖標注原件 百變地圖標注
正在看的ORACLE教程是:PL/SQL實現(xiàn)Oracle數(shù)據(jù)庫任務調(diào)度。摘要:本文主要就數(shù)據(jù)庫恢復與系統(tǒng)任務的調(diào)度,在結合一般性的數(shù)據(jù)庫后臺處理的經(jīng)驗上,提出較為實用而新穎的解決方法,拓寬了數(shù)據(jù)庫后臺開發(fā)的思路。

  關鍵詞:數(shù)據(jù)恢復,任務調(diào)度,ORACLE,PL/SQL

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

  一.技術基礎

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

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

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

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

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

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

  ·JOB_QUEUE_PROCESS指定啟動的后臺處理數(shù)。如果它是0或沒有被設置,將沒有后臺處理進入作業(yè),它們也就不會運行。 

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

  設置好這兩個參數(shù)后,就可對程序進行調(diào)度了,該包主要使用SUBMIT函數(shù)進行調(diào)度,該函數(shù)的原型為:

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

  二.數(shù)據(jù)恢復

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

  對于有經(jīng)驗的開發(fā)人員來說,往往會對那些開發(fā)需要的基表(基表就是提供數(shù)據(jù)源的數(shù)據(jù)表)做一些備份。這樣,即使以后出現(xiàn)一些數(shù)據(jù)誤操作也不會導致重大的事故。

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


  即此表僅有3條記錄,那么由于對數(shù)據(jù)庫的誤操作,導致第一條記錄被刪除,那么執(zhí)行下面的SQL語句:


  其執(zhí)行結果為:


  由于已經(jīng)執(zhí)行了提交操作(COMMIT),所以無法進行回滾(ROLLBACK),這樣原來的數(shù)據(jù)就無法用正常方法進行恢復。不過,由于誤操作的時候在不久以前(假設是5分鐘之前),在這種情況下,可以使用DBMS_FLASHBACK包來恢復數(shù)據(jù),可以在SQL*PLUS里鍵入如下代碼:

execute dbms_flashback.enable_at_time(sysdate-5/1440);

  此時,將數(shù)據(jù)庫調(diào)整到5分鐘之前的狀態(tài),如果再執(zhí)行查詢表的命令就會為如下結果:



  那么就可以在此時將其數(shù)據(jù)備份到emp_table_bk,即:


  這樣,就把以前誤操作的數(shù)據(jù)給恢復回來了。

  從上面的結果看的出,調(diào)用DBMS_FLASHBACK包的ENABLE_AT_TIME函數(shù),可以將數(shù)據(jù)庫的當前查詢時間調(diào)整到以前,這樣給數(shù)據(jù)恢復提供了幫助。

  在使用DBMS_FLASHBACK包的時候還應該注意以下幾點:

  ·倒敘查詢是有前提的,即該數(shù)據(jù)庫必須具有撤消管理功能。具體做法是,DBA應該建立一個撤消表空間,并啟動自動撤消管理,并建立一個撤消保留時間窗。這樣,Oracle將在撤消表空間中維護足夠的撤消信息以便在保留時間內(nèi)支持倒敘查詢。 

  ·由于撤消表空間的大小直接決定了倒敘查詢執(zhí)行的成敗。即撤消表空間越大,那么可以查詢的時間可以越早,那么對于一般的撤消表空間的大小,為了保證倒敘查詢的成功,盡量查詢5天以內(nèi)的數(shù)據(jù),這樣成功的可能性更高一些。 

  三.任務調(diào)度

  在UNIX系統(tǒng)中,任務與進程的概念是等同的,即當系統(tǒng)執(zhí)行一段程序代碼時會自動給其分配一個進程號和任務號,這樣使用進程號和任務號就可以對該任務進行操作(如掛起,停止,啟動等)。而Oracle數(shù)據(jù)庫內(nèi)部也存在任務調(diào)度,比如,需要對某一操作進行周期性的執(zhí)行,或者是在某事件發(fā)生的時候才執(zhí)行。一般性的做法是使用觸發(fā)器,即將所有操作封裝在觸發(fā)器里,然后通過指定觸發(fā)事件即可將該操作等待執(zhí)行。另外,還可以直接利用操作系統(tǒng)來實現(xiàn),比如在Windows平臺就可以編寫Windows腳本并結合"任務計劃"來實施;如果在Unix平臺,就可以寫Shell來實現(xiàn)任務的周期性的執(zhí)行操作。

  而這里主要是采用ORACLE數(shù)據(jù)庫的DBMS_JOB包來實現(xiàn)的。

  例如,由于每個月都需要對員工進行考評以進行薪水的調(diào)整,那么就需要對emp_table表進行更新處理。更新處理代碼如下:


  為了定期每個月都運行上面的程序,可以執(zhí)行如下代碼:


  submit執(zhí)行后將使得salary_upt過程馬上執(zhí)行。在上面的代碼中,v_jobNum是該作業(yè)返回的作業(yè)號(任務號),后面兩個時間分別為開始時間和結束時間,所以salary_upt過程將每隔30天執(zhí)行一次salary_upt程序,以此達到了定期更新的目的。

  如果要禁止該作業(yè)的繼續(xù)執(zhí)行,可以執(zhí)行下面的命令:


  使用DBMS_JOB包來實現(xiàn)任務的調(diào)度便于跟應用程序集成,有時候這樣處理更為的便捷。

  四.小結

  很多時候,數(shù)據(jù)庫的功能可以通過應用程序來進行擴展,對于進行后臺數(shù)據(jù)庫開發(fā)操作的用戶而言,除了對數(shù)據(jù)庫整體架構熟悉以外,掌握一定的應用程序開發(fā)能力是很有必要的。系統(tǒng)通過本文能夠給讀者一定的啟發(fā)。 

  本文的開發(fā)環(huán)境為:

  服務器端:UNIX+ORACLE9.2

  客戶端:WINDOWS2000 PRO+TOAD(或者SQL*PLUS)

  本文中的代碼在上述環(huán)境已調(diào)試通過。

您可能感興趣的文章:
  • oracle復習筆記之PL/SQL程序所要了解的知識點
  • PL/SQL Dev連接Oracle彈出空白提示框的解決方法分享
  • 64位win7下pl/sql無法連接oracle解決方法
  • Oracle中PL/SQL中if語句的寫法介紹
  • Oracle中在pl/sql developer修改表的2種方法
  • ORACLE PL/SQL 觸發(fā)器編程篇介紹
  • Oracle 10G:PL/SQL正規(guī)表達式(正則表達式)手冊
  • 在Oracle PL/SQL中游標聲明中表名動態(tài)變化的方法
  • Oracle PL/SQL語言入門基礎
  • Oracle PL/SQL入門案例實踐
  • Oracle PL/SQL入門慨述
  • Oracle教程之pl/sql簡介

標簽:南平 通化 襄陽 聊城 股票投資 池州 嘉峪關 南平

巨人網(wǎng)絡通訊聲明:本文標題《PL/SQL實現(xiàn)Oracle數(shù)據(jù)庫任務調(diào)度》,本文關鍵詞  SQL,實現(xiàn),Oracle,數(shù)據(jù)庫,任務,;如發(fā)現(xiàn)本文內(nèi)容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《PL/SQL實現(xiàn)Oracle數(shù)據(jù)庫任務調(diào)度》相關的同類信息!
  • 本頁收集關于PL/SQL實現(xiàn)Oracle數(shù)據(jù)庫任務調(diào)度的相關信息資訊供網(wǎng)民參考!
  • 推薦文章
    大同县| 密山市| 尚志市| 仪陇县| 扎赉特旗| 龙岩市| 荆门市| 眉山市| 呼图壁县| 盘山县| 彰化市| 凤翔县| 东方市| 茶陵县| 买车| 民县| 澄江县| 龙山县| 台南市| 海城市| 双流县| 金山区| 潍坊市| 姚安县| 常山县| 济南市| 偃师市| 双桥区| 波密县| 石屏县| 隆子县| 海原县| 桐梓县| 北京市| 防城港市| 晋宁县| 金湖县| 三河市| 黄平县| 前郭尔| 德化县|