逍遥一派 发表于 2015-1-16 22:36:27

MYSQL网页编程之PL/SQL完成Oracle数据库义务调剂

到2009年,甲骨文的数据库Oracle已经诞生了30周年,而MySQL却连它的一半时间都没有。微软的SQLServer仅仅比MySQL大两年,但是SQLServer的发布是建立在Sybase的基础上。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参数:
  ・JOB_QUEUE_PROCESS指定启动的背景处置数。假如它是0或没有被设置,将没有背景处置进进功课,它们也就不会运转。
  ・JOB_QUEUE_INTERVAL以秒为单元,指定每个历程在反省新的功课前守候的工夫。在JOB_QUEUE_INTERVA所指定的工夫内,一个功课最多只能运转一次。
  设置好这两个参数后,便可对程序举行调剂了,该包次要利用SUBMIT函数举行调剂,该函数的原型为:
submit(前往的功课号,程序历程名,sysdate,下次运转的工夫);
<P>  二.数据恢复

  数据恢复是数据库自己一个极为主要的功效,一般主要的数据能够经由过程其体系的数据备份功效来完成,以是在实践的开辟中,主要的数据常常简单恢复,反而是一些寻常的数据由于误操纵而引发一些贫苦。

  关于有履历的开辟职员来讲,常常会对那些开辟必要的基表(基表就是供应数据源的数据表)做一些备份。如许,即便今后呈现一些数据误操纵也不会招致严重的变乱。

  更加有用而又很少为开辟职员所利用的办法就是接纳倒叙查询,鉴于后面已有了必定的手艺展垫,如今就能够利用DBMS_FLASHBACK包来对数据举行恢复了。为便利报告,假定一个基表emp_table,其表纪录以下:

Emp_noEmp_nameEmp_salary001Jacky5000002Rose6000003John7000
  即此表唯一3笔记录,那末因为对数据库的误操纵,招致第一笔记录被删除,那末实行上面的SQL语句:

select*fromemp_table;
  其实行了局为:

Emp_noEmp_nameEmp_salary
002Rose6000
003John7000
  因为已实行了提交操纵(COMMIT),以是没法举行回滚(ROLLBACK),如许本来的数据就没法用一般办法举行恢复。不外,因为误操纵的时分在不久之前(假定是5分钟之前),在这类情形下,可使用DBMS_FLASHBACK包来恢单数据,能够在SQL*PLUS里键进以下代码:

executedbms_flashback.enable_at_time(sysdate-5/1440);

  此时,将数据库调剂到5分钟之前的形态,假如再实行查询表的命令就会为以下了局:

Emp_noEmp_nameEmp_salary
001  Jacky 5000
002  Rose  6000
003  John  7000

  那末就能够在此时将其数据备份到emp_table_bk,即:

createtableemp_table_bk
as
select*fromemp_table;
  如许,就把之前误操纵的数据给恢复返来了。

  从下面的了局看的出,挪用DBMS_FLASHBACK包的ENABLE_AT_TIME函数,能够将数据库确当前查询工夫调剂到之前,如许给数据恢复供应了匡助。

  在利用DBMS_FLASHBACK包的时分还应当注重以下几点:

  ・倒叙查询是有条件的,即该数据库必需具有取消办理功效。详细做法是,DBA应当创建一个取消表空间,并启动主动取消办理,并创建一个取消保存工夫窗。如许,Oracle将在取消表空间中保护充足的取消信息以便在保存工夫内撑持倒叙查询。

  ・因为取消表空间的巨细间接决意了倒叙查询实行的成败。即取消表空间越年夜,那末能够查询的工夫能够越早,那末关于一样平常的取消表空间的巨细,为了包管倒叙查询的乐成,只管查询5天之内的数据,如许乐成的大概性更高一些。

  三.义务调剂

  在UNIX体系中,义务与历程的观点是同等的,即当体系实行一段程序代码时会主动给其分派一个历程号和义务号,如许利用历程号和义务号就能够对该义务举行操纵(如挂起,中断,启动等)。而Oracle数据库外部也存在义务调剂,好比,必要对某一操纵举行周期性的实行,大概是在某事务产生的时分才实行。一样平常性的做法是利用触发器,行将一切操纵封装在触发器里,然后经由过程指定触发事务便可将该操纵守候实行。别的,还能够间接使用操纵体系来完成,好比在Windows平台就能够编写Windows剧本并分离"义务企图"来实行;假如在Unix平台,就能够写Shell来完成义务的周期性的实行操纵。

  而这里次要是接纳ORACLE数据库的DBMS_JOB包来完成的。

  比方,因为每月都必要对员工举行考评以举行薪水的调剂,那末就必要对emp_table表举行更新处置。更新处置代码以下:

createorreplaceproceduresalary_upt(v_emp_novarchar2,v_salarynumber)
as
begin
updateemp_table
setemp_salary=v_salary
whereemp_no=v_emp_no;
commit;
end;
/
  为了按期每月都运转下面的程序,能够实行以下代码:

Variablev_jobNumnumber;
Begin
Dbms_job.submit(:v_jobNum,salary_upt,sysdate,sysdate+30);
Commit;
End;
/
  submit实行后将使得salary_upt历程即刻实行。在下面的代码中,v_jobNum是该功课前往的功课号(义务号),前面两个工夫分离为入手下手工夫和停止工夫,以是salary_upt历程将每隔30天实行一次salary_upt程序,以此到达了按期更新的目标。

  假如要克制该功课的持续实行,能够实行上面的命令:

dbms_job.remove(:v_jobNum);
  利用DBMS_JOB包来完成义务的调剂便于跟使用程序集成,偶然候如许处置更加的便利。

  四.小结

  良多时分,数据库的功效能够经由过程使用程序来举行扩大,关于举行背景数据库开辟操纵的用户而言,除对数据库全体架构熟习之外,把握必定的使用程序开辟才能是很有需要的。体系经由过程本文可以给读者必定的启示。

  本文的开辟情况为:

  服务器端:UNIX+ORACLE9.2

  客户端:WINDOWS2000PRO+TOAD(大概SQL*PLUS)

  本文中的代码人力成本上的节省,MySQL的用户Spacemonkey实验室的首席执行官MitchPirtle如此表示:“维护MySQL使得你不需要一个年薪15万美元的DBA。

逍遥一派 发表于 2015-1-19 08:35:58

如果你是从“学习某一种数据库应用软件,从而获得应聘的资本和工作机会”的角度来问的话。

飘飘悠悠 发表于 2015-1-24 11:27:27

这就引发了对varchar和char效率讨论的老问题。到底如何分配varchar的数据,是否会出现大规模的碎片?

若相依 发表于 2015-2-1 09:03:52

如安全管理、备份恢复、性能监控和调优等,SQL只要熟悉基本操作就可以,只要程序设计部分只要稍加了解即可(如存储过程、触发器等)。

飘灵儿 发表于 2015-2-19 16:18:41

我是新手,正在学习数据库和操作系统,深感理论的泛广,唯有一步一步来,但是又感觉时间不够,收集了很多资料却总是没能认真的看完,希望有一个讨论板块,大家共同解决,共同分享,共同努力

柔情似水 发表于 2015-3-6 15:17:56

所以你总能得到相应的升级版本,来满足你的需求。

小妖女 发表于 2015-3-13 03:08:35

你觉得我的非分区索引无法对起子分区,你可以提醒我一下呀!没有任何的提醒,直接就变成了非分区表。不知道这算不算一个bug。大家也可以试试。

仓酷云 发表于 2015-3-20 11:06:41

财务软件要用SQL也只是后台的数据库而已,软件都是成品的,当然多学东西肯定是有好处的..
页: [1]
查看完整版本: MYSQL网页编程之PL/SQL完成Oracle数据库义务调剂