zoukankan      html  css  js  c++  java
  • 数据库的回滚

    回滚(Rollback)指的是程序或数据处理错误,将程序或数据恢复到上一次正确状态的行为。回滚包括程序回滚和数据回滚等类型。

    execute执行后 可以回滚
    commit提交后 不可以回滚

    其实Oracle提交数据是分两步操作的,第一步execute执行,第二步commit提交。对应的PLSQL也是要先点execute执行,执行后再点commit提交。
    但是 commit提交后 可以用闪回查询恢复原来的数据 因为oracle会将近期的数据保存到快照中 如:

    SELECT * FROM tab AS OF TIMESTAMP TO_TIMESTAMP('20130506 20:00:00','YYYYMMDD HH24:MI:SS');
    这里'20130506 20:00:00'就是你想恢复数据到哪个时间状态 tab是数据库的表名 这样查询到的数据就是执行更新操作之前的数据

    https://www.cnblogs.com/fiberhome/p/7680458.html    回滚原理

        --查看和UNDO相关的参数

            SQL> SHOW PARAMETER undo;

     

            NAME                                 TYPE        VALUE

            ------------------------------------ ----------- ------------------------------

            undo_management                      string      MANUAL

            undo_retention                       integer     900

            undo_tablespace                      string      UNDOTBS1

               

        undo_management:

            设置数据库的撤销段是否使用自动管理模式,值可以为auto或manual,当为manual时将不使用撤销段,即不使用自动管理模式

            该参数为静态参数,修改后需重启实例才能生效       

        undo_retention:

            指定撤销段数据在undo段中为非活动状态后被覆盖前保留的时间,单位为秒。在undo_management位auto时生效,为动态参数      

        undo_tablespace:

            指定使用哪个表空间来实现数据的撤销,在undo_management位auto时生效,为动态参数

    语法
    ROLLBACK [WORK] [TO [SAVEPOINT] savepoint_name | FORCE 'string'};

    work - 可选。隐式关键字,可写可不写。
    to savepoint savepoint_name - 可选。rollback 语句撤销当前会话的所有更改,直到由 savepoint_name 指定的保存点。如果省略该子句,则所有更改都将被撤销。
    force 'string - 可选'。用于 强制回滚 可能已损坏或有问题的事务。使用此子句,可以将单引号中的 事务id 指定为 字符串。可以在 系统视图 中找到名为 dba_2pc_pengding、v$corrupt_xid_list 的事务标识(无法将有问题的事务回滚到保存点。)

    ---------------------

    回滚与删除

    commit rollback savepoint
    这组操作在sql命令行,connect scott/TIGER @XE
    1.删除emp数据表中的记录
    delete emp;
    select * from emp;
    看到14行记录全部删除
    关闭当前登录窗口,再次登录到sql命令行中。
    select * from emp;
    2.在dept中添加一条记录,50,DATAC,JINAN
    insert into dept values(50,‘datac’,‘jinan’);
    select * from dept;
    关闭当前登录窗口,再次登录到sql命令行
    select * from dept;
    3.修改40部门的名称datac
    update dept set dname=‘datac’
    where deptno=40;
    select * from dept;
    关闭当前登录窗口,再次登陆到sql命令行
    select * from dept
    使用commit提交命令来实现,数据增删改
    update dept set dname=‘datac’
    where deptno=40;
    select * from dept;
    加入一条:commit
    关闭当前登录窗口,再次登录到sql命令行中。
    select * from dept;
    2. rollback
    truncate(截断 删除后不可恢复)
    (1)回滚到原点
    删除emp数据表中所有的记录
    delete emp;
    select * from emp;
    rollback;
    (2)应用savepoint设定回滚点
    也是拿dept信息表做案例
    插入一条记录50 software shanghai
    insert into dept values(50,‘software’,‘shanghai’)
    select * from dept;
    设置存储点A
    savepoint a
    修改将办公地点shanghai修改beijing
    update dept set loc=‘beijing’
    where deptno=50;
    select * from dept;
    设定存储点B
    savepoint b
    删除操作40部门的信息
    delete dept where deptno=40;
    select * from dept;
    回滚到存储点B
    rollback to B
    ---------------------
    作者:懿范
    来源:CSDN
    原文:https://blog.csdn.net/weixin_43312392/article/details/83245706
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    (转)eclipse安装jetty
    (转)Java compiler level does not match解决方法
    (转)关于eclipse的TestNG的插件安装方法
    win7 远程桌面连接过程
    (转)IntelliJ IDEA 破解方法
    (转) Eclipse Maven 编译错误 Dynamic Web Module 3.1 requires Java 1.7 or newer 解决方案
    (转)@ContextConfiguration注解说明
    (转)java中/r与/n还有/r/n的区别
    (转)eclipse导入Gradle项目
    tomcat架构分析(valve机制)
  • 原文地址:https://www.cnblogs.com/klb561/p/10963527.html
Copyright © 2011-2022 走看看