PL/SQL实现Oracle数据库任务调度 PL/SQL实现Oracle数据库任务调度

正在看的ORACLE教程是:PL/SQL实现Oracle数据库任务调度。摘要:本文主要就数据库恢复与系统任务的调度,在结合一般性的数据库后台处理的经验上,提出较为实用而新颖的解决方法,拓宽了数据库后台开发的思路。

关键词:数据恢复,任务调度,ORACLE,PL/SQL

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

一.技术基础

由于本文是使用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,其表记录如下:

即此表仅有3条记录,那么由于对数据库的误操作,导致第一条记录被删除,那么执行下面的SQL语句:

其执行结果为:

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

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

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

那么就可以在此时将其数据备份到emp_table_bk,即:

这样,就把以前误操作的数据给恢复回来了。

从上面的结果看的出,调用DBMS_FLASHBACK包的ENABLE_AT_TIME函数,可以将数据库的当前查询时间调整到以前,这样给数据恢复提供了帮助。

在使用DBMS_FLASHBACK包的时候还应该注意以下几点:

·倒叙查询是有前提的,即该数据库必须具有撤消管理功能。具体做法是,DBA应该建立一个撤消表空间,并启动自动撤消管理,并建立一个撤消保留时间窗。这样,Oracle将在撤消表空间中维护足够的撤消信息以便在保留时间内支持倒叙查询。

·由于撤消表空间的大小直接决定了倒叙查询执行的成败。即撤消表空间越大,那么可以查询的时间可以越早,那么对于一般的撤消表空间的大小,为了保证倒叙查询的成功,尽量查询5天以内的数据,这样成功的可能性更高一些。

三.任务调度

在UNIX系统中,任务与进程的概念是等同的,即当系统执行一段程序代码时会自动给其分配一个进程号和任务号,这样使用进程号和任务号就可以对该任务进行操作(如挂起,停止,启动等)。而Oracle数据库内部也存在任务调度,比如,需要对某一操作进行周期性的执行,或者是在某事件发生的时候才执行。一般性的做法是使用触发器,即将所有操作封装在触发器里,然后通过指定触发事件即可将该操作等待执行。另外,还可以直接利用操作系统来实现,比如在Windows平台就可以编写Windows脚本并结合"任务计划"来实施;如果在Unix平台,就可以写Shell来实现任务的周期性的执行操作。

而这里主要是采用ORACLE数据库的DBMS_JOB包来实现的。

例如,由于每个月都需要对员工进行考评以进行薪水的调整,那么就需要对emp_table表进行更新处理。更新处理代码如下:

为了定期每个月都运行上面的程序,可以执行如下代码:

submit执行后将使得salary_upt过程马上执行。在上面的代码中,v_jobNum是该作业返回的作业号(任务号),后面两个时间分别为开始时间和结束时间,所以salary_upt过程将每隔30天执行一次salary_upt程序,以此达到了定期更新的目的。

如果要禁止该作业的继续执行,可以执行下面的命令:

使用DBMS_JOB包来实现任务的调度便于跟应用程序集成,有时候这样处理更为的便捷。

四.小结

很多时候,数据库的功能可以通过应用程序来进行扩展,对于进行后台数据库开发操作的用户而言,除了对数据库整体架构熟悉以外,掌握一定的应用程序开发能力是很有必要的。系统通过本文能够给读者一定的启发。

本文的开发环境为:

服务器端:UNIX+ORACLE9.2

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

本文中的代码在上述环境已调试通过。 本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉 本文系统来源:php中文网

oracle 作业调度里pl/sql怎么写,PL/SQL实现Oracle数据库任务调度相关推荐

  1. oracle定时删库,随手胡乱写的批处理,实现Oracle每天定时备库,DMP文件保留3天,3天后删除,对应2000系统...

    echo off set nowdate=%date:~4,4%%date:~9,2%%date:~12,2% rem 如果是XP系统,年月日分别为%date:~0,4%%date:~5,2%%dat ...

  2. oracle sql循环判断语句怎么写,Oracle 非常详细的 PL/SQL入门教程,PL/SQL语法格式/循环语句/条件判断/异常处理...

    PL/SQL入门教程目录 Oracle PL/SQL入门教程,PL/SQL语法格式/循环语句/条件判断/异常处理 一.PL/SQL简介 1.PL/SQL简介 1.PL/SQl是过程语言PL与结构化语言 ...

  3. oracle游标语法举例,PL/SQL语句块基本语法(ORACLE存储过程,函数,包,游标)

    1.PL/SQL语句块 PL/SQL语句块只适用于Oracle数据库,使用时临时保存在客户端,而不是保存在数据库. 基本语法: declare 变量声明.初始化 begin 业务处理.逻辑代码 exc ...

  4. 关于PL/SQL我写了一份从0到1的入门教程

    PL/SQL 什么是PL/SQL ​ 许多时候我们会利用结构化查询语言(SQL)来访问和操作关系型数据库.这种语言的特点就是非过程化.也就是说使用的时候不用指明执行的具体方法和途径,即不用关注任何的实 ...

  5. ORACLE EBS 开发 用于并发程序的PL/SQL API

    ORACLE EBS 开发 用于并发程序的PL/SQL API 1.  FND_CONC_GLOBAL包 这个包用于从PL/SQL程序中提交子请求. u  函数FND_CONC_GLOBAL.REQU ...

  6. Oracle入门(十四)之PL/SQL

    一.PL/SQL 基本语法 PL/SQL语言是模块式的过程化SQL,是oracle公司对SQL的扩展. (1) (2) (3) (5) (6) (7)数据类型 Number 数字型 Varchar2 ...

  7. 通过PL/SQL developer工具访问远程的Oracle数据库_访问数据库_连接数据库_登录数据库

    文章目录 工具简介 电脑没有安装 Oracle 数据库 电脑安装了 Oracle 数据库 工具简介 PL/SQL Developer 是 Oracle 数据库开发工具,PL/SQL Developer ...

  8. java oracle sql 参数_oracle pl/sql之在java中调用带有输入输出参数的oracle存储过程...

    只需注意一点输出参数是用CallableStatement里面的registerOutParameter方法注册进去 存储过程: import java.sql.CallableStatement; ...

  9. oracle执行策略是什么意思,郁闷的问题:oracle pl/sql 和 pro c中的执行策略

    同样的一条语句,一条是在pl/sql里面组装成sql之后提交执行,另外一条是用pro*c程序后绑定执行,没想到执行策略和效率天差地别.看来做什么事都不能想当然,要细心学习才行.保留此条语句以做纪念: ...

最新文章

  1. gdb 查找动态库方法
  2. 项目管理十大知识领域之项目进度管理
  3. 小波的秘密1_小波变换概况与综述
  4. HDU4607(求树中的最长链)
  5. python语言有哪两个系列_(转)Python学习笔记系列——Python是一种纯粹的语言
  6. loadrunner学习记录一
  7. 云原生数据库风起云涌,华为云GaussDB破浪前行
  8. oracle锁类型tx,Oracle中的锁类型
  9. BG2EE 术士solo
  10. quartz配置参数说明
  11. 调用Google翻译API实现文本翻译
  12. Canonical标签怎么使用,Canonical标签有什么作用?
  13. 近一个月总结(鸡汤多于技术)
  14. 党校报告称中国使用互联网每年需向美国付5000亿
  15. 【多媒体封装格式详解】---MP4【1】
  16. 交叉线和直通线的做法
  17. wmi服务或wmi提供程序_什么是WMI提供程序主机(WmiPrvSE.exe),为什么使用那么多的CPU?...
  18. 对新课改及其实施的认识
  19. Redis监控和告警
  20. Python xlwings插入图片(Excel插入图片)

热门文章

  1. 大学生工作满一年别忘转正定级
  2. 【华为2019年校园招聘】2019-4-10 软件题
  3. GPT和parted命令详解
  4. 企业生产计划管理标准
  5. 谈一个普通211计算机研究生学渣的Java后端开发的面试之路
  6. 结合学生实际 建设学生文化
  7. HTML DOM元素小结
  8. 域控制器设置计算机密码,教你轻松设置Win 2003域控制器密码
  9. 地图放大镜(Magnifying Glass)
  10. python 的列表是从0还是1开始的_Python 列表