PL_SQL实现Oracle数据库任务调度

文章作者 100test 发表时间 2007:11:28 13:46:30
来源 100Test.Com百考试题网


在数据库操作中时常会有这样的情况发生,由于一时的疏忽而误删或误改了一些重要的数据,另外还有一些重要的任务需要周期性地运行。显然,前一类问题主要是数据备份与恢复方面的,而后一类则主要是系统的任务调度。本文将针对这两类问题,从应用程序开发角度给出一个解决方法。

  一.技术基础

  由于本文是使用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条记录,那么由于对数据库的误操作,导致第一条记录被删除,那么执行下面的SQL语句:

0select * from emp_table.

  其执行结果为:

Emp_no Emp_name Emp_salary
002 Rose 6000
003 John 7000

  由于已经执行了提交操作(COMMIT),所以无法进行回滚(ROLLBACK),这样原来的数据就无法用正常方法进行恢复。不过,由于误操作的时候在不久以前(假设是5分钟之前),在这种情况下,可以使用DBMS_FLASHBACK包来恢复数据,可以在SQL*PLUS里键入如下代码:

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

  此时,将数据库调整到5分钟之前的状态,如果再执行查询表的命令就会为如下结果:

Emp_no Emp_name Emp_salary
001  Jacky  5000
002  Rose  6000
003  John  7000


相关文章


基础学习:O F路由协议详细解析
Oracle数据库中分区表的操作方法
Oracle数据表分区的策略
Oracle中提取和存储数据库对象的DDL
PL_SQL实现Oracle数据库任务调度
OraclePortal及其门户网站开发概述
Oracle9i中取得建表和索引的DDL语句
分享Oracle9i中建立自增字段的最新办法
职称英语考试语法学习:现在分词
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛