数据库的回滚
Posted klb561
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库的回滚相关的知识,希望对你有一定的参考价值。
回滚(Rollback)指的是程序或数据处理错误,将程序或数据恢复到上一次正确状态的行为。回滚包括程序回滚和数据回滚等类型。
execute执行后 可以回滚
commit提交后 不可以回滚
其实Oracle提交数据是分两步操作的,第一步execute执行,第二步commit提交。对应的PL\\SQL也是要先点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
版权声明:本文为博主原创文章,转载请附上博文链接!
以上是关于数据库的回滚的主要内容,如果未能解决你的问题,请参考以下文章