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

一叶漆黑

一叶漆黑

2016-01-29 16:23

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

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

  一.技术基础

  由于本文是使用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参数:

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/sqlserver/)

  ·JOB_QUEUE_PROCESS指定启动的后台处理数。如果它是0或没有被设置,将没有后台处理进入作业,它们也就不会运行。

  ·JOB_QUEUE_INTERVAL以秒为单位,指定每一个过程在检查新的作业前等待的时间。在JOB_QUEUE_INTERVA所指定的时间内,一个作业最多只能运行一次。

  设置好这两个参数后,就可对程序进行调度了,该包主要使用SUBMIT函数进行调度,该函数的原型为:

submit(返回的作业号,程序过程名,sysdate,下次运行的时间);

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/sqlserver/)

  二.数据恢复

  数据恢复是数据库本身一个极其重要的功能,通常重要的数据可以通过其系统的数据备份功能来实现,所以在实际的开发中,重要的数据往往容易恢复,反而是一些平常的数据因为误操作而引起一些麻烦。

  对于有经验的开发人员来说,往往会对那些开发需要的基表(基表就是提供数据源的数据表)做一些备份。这样,即使以后出现一些数据误操作也不会导致重大的事故。

  更为实用而又很少为开发人员所使用的方法就是采用倒叙查询,鉴于前面已经有了一定的技术铺垫,现在就可以使用DBMS_FLASHBACK包来对数据进行恢复了。为方便讲述,假定一个基表emp_table,其表记录如下:

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

select * 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

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

create table emp_table_bk
as
select * from emp_table;
  这样,就把以前误操作的数据给恢复回来了。

  从上面的结果看的出,调用DBMS_

展开更多 50%)
分享

猜你喜欢

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

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

Oracle数据库PL/SQL过程调试的输出方法

编程语言 网络编程
Oracle数据库PL/SQL过程调试的输出方法

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

Oracle组件实现动态Web数据库

编程语言 网络编程
Oracle组件实现动态Web数据库

Oracle数据库中跟踪sql语句介绍

编程语言 网络编程
Oracle数据库中跟踪sql语句介绍

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

简单实现Standby Sql Server数据库

编程语言 网络编程
简单实现Standby Sql Server数据库

通过SQL Server 2008数据库复制实现数据库同步备份

编程语言 网络编程
通过SQL Server 2008数据库复制实现数据库同步备份

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

Wii《瓦里奥大陆:摇摆》系统介绍

Wii《瓦里奥大陆:摇摆》系统介绍

网线的测试

网线的测试
下拉加载更多内容 ↓