zoukankan      html  css  js  c++  java
  • oracle的闪回

    本文前半部分是一个plsql程序,程序实现了对不同职位的员工加薪,更改了数据库的数据.并且commit了事务;后半分结合前面的例子介绍了对oracle中的数据恢复,即如何撤销这个已经commit过的操作.,也由于本人技术水平和表达能力有限,对于概念性的部分和总结引自摘自: http://www.cnblogs.com/chengxiao/p/5860823.html,如果想更详细的了解oracle中的闪回机制可以访问该地址的博文,本文是重点是实例演示

    一、首先需求是在emp表中实现:

    给员工涨工资,总裁涨1000 经理涨800 其他涨400

    再没有执行该程序前先查询一下emp表中的数据如图所示:

    Jobs为clerk的员工薪资是800

    Jobs为President的员工薪资是5000

    按照给员工涨工资,总裁涨1000 经理涨800 其他涨400的需求写如下plsql程序语句如下:

    set serveroutput on

    declare

      vjob emp.jobs%type;

      vmpno emp.empno%type;

    --定义光标mysur

      cursor mysur is select jobs,empno from emp;

    begin

      open mysur;

        loop

        fetch mysur into vjob,vmpno;

    exit when mysur%notfound;

    --循环换判断,给不同职位的员工加薪

         if vjob='PRESIDENT' then update emp set sal=sal+1000 where empno=vmpno;

        elsif vjob='MANAGER' then update emp set sal=sal+800 where empno=vmpno;

        else update emp set sal=sal+400 where empno=vmpno;

        end if;

        end loop;

      close mysur;

             --提交事务

       commit;

       dbms_output.put_line('执行完毕');

    end;

    /

    执行程序之后emp表中的数据为:

    可以看到jobs为clerk的薪资是1200涨了400

    jobs为president的薪资是6000涨了1000

     

    二、以上是plsql程序这里不再累述下面通过以上emp表的数据具体演示oracle的数据恢复:

      基于作者技术水平有限,本小结暂时先讲一下闪回查询中的闪回表,对于闪回的其它类型可以在最后的ps内容部分下查看

      闪回表:是将某个数据表闪回到过去的某个时间点

                       一下步骤是结合上文中emp数据表进行操作的,根据上面的操作emp表的数据已

                       经被更改,并且commit了事务;这个时候我们考虑到使用oracle的闪回机制去撤销

                      已经提交事物的操作:

                      步骤

          首先需求是在emp表中实现,给员工涨工资,总裁涨1000 经理涨800 其他涨400

          还及得再没有执行该需求前emp表中的数据是怎样的吧这里再给大家看一下:

          :

     

       

    (一)首先是先闪回到某个时间点去查询一下表中的数据确定是否要闪回到该时间点:

      (sql1:)select * from emp

      as of timestamp to_timestamp('2017-9-16 00:30:00','yyyy-MM-dd hh24:mi:ss');

      该语句将表闪回到了2017-9-16 00:30:00这个时间点然后看一下数据表中

      的数据是否是你想要的结果:

      可以看到在这个时间点emp表中的数据是没有被修改的状态

      (二)如果确定这个时间点查询到的表中的数据是你想要的结果就进行闪回表操作:

      但是首先要设置表支持行移动:

      (sql1:)alter table emp enable row movement;

      然后执行闪回操作:

      (sql2:) flashback table emp

      to timestamp to_timestamp('2017-9-15 08:00:00','yyyy-MM-dd hh24:mi:ss');

         这样对于emp表的撤销就完成了:

         以上两行语句执行结果为:

          table EMP已变更。

          table EMP 成功。

      查询一下emp表中的数据可以看到:

        Jobs为clerk的员工薪资是800

        Jobs为President的员工薪资是5000

        大功告成!

    PS:介绍一下oracle的闪回机制:

    闪回

    概念:闪回技术是Oracle强大数据库备份恢复机制的一部分,在数据库发生逻辑错误的时候,闪回技术能提供快速且最小损失的恢复.

    撤销段

    在讲闪回技术前,需要先了解Oracle中一个逻辑结构--撤销段。因为大部分闪回技术都需要依赖撤销段中的撤销数据。撤销数据是反转DML语句结果所需的信息,只要某个事务修改了数据,那么更新前的原有数据就会被写入一个撤销段。(事务回滚也会用到撤销段中的数据)。事务启动时,Oracle 会为其分配一个撤销段,事务和撤销段存在多对一的关系,即一个事务只能对应一个撤销段,多个事务可以共享一个撤销段(不过在数据库正常运行时一般不会发生这种情况)

    闪回技术:

     Oracle提供了四种可供使用的闪回技术(闪回查询,闪回删除,闪回归档,闪回数据库),每种都有不同的底层体系结构支撑,但其实这四种不同的闪回技术部分功能是有重叠的,使用时也需要根据实际场景合理选择最合适的闪回功能。

    PS内容摘自: http://www.cnblogs.com/chengxiao/p/5860823.html

                               

  • 相关阅读:
    将mysql数据库的数据导出做成excl表格通过邮件发送附件发给指定人
    监听服务端口及邮件报警脚本
    ubantu下docker安装
    python 邮件报警
    3、.net core 部署到IIS
    1、Ubuntu 16.04 安装.net core
    解决asp.net mvc的跨域请求问题
    Jquery常用方法汇总(转)
    mongodb Helper
    数据库CTE递归查询
  • 原文地址:https://www.cnblogs.com/zhangshi/p/7529371.html
Copyright © 2011-2022 走看看