数据库的回滚

回滚(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
版权声明:本文为博主原创文章,转载请附上博文链接!

原文地址:https://www.cnblogs.com/klb561/p/10963527.html