欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Orcacle回滚update操作之前的数据

程序员文章站 2022-06-24 22:42:57
如果数据库不注意改错了数据提交了,还能不能回滚数据呢?我们先来看个过程:现在有一个数据结构create table ABCS( UPDATE_DATE DATE not null, EMPOLYEE_NAME NVARCHAR2(80), SALARY NUMBER)INSERT INTO ABCS VALUES (2020/7/1, 张三, 12);INSERT INTO ABCS VALU...

如果数据库不注意改错了数据提交了,还能不能回滚数据呢?

我们先来看个过程:现在有一个数据结构

create table ABCS
(
  UPDATE_DATE           DATE not null,
  EMPOLYEE_NAME     NVARCHAR2(80),
  SALARY                       NUMBER
)

INSERT INTO ABCS VALUES (2020/7/1,    张三,    12);
INSERT INTO ABCS VALUES (2020/7/2,    张三,    11);
INSERT INTO ABCS VALUES (2020/7/2,    李四,    20);
INSERT INTO ABCS VALUES (2020/7/1,    张三,    20);
INSERT INTO ABCS VALUES (2020/7/1,    张三,    20);
INSERT INTO ABCS VALUES (2020/6/1,    张三,    12);
INSERT INTO ABCS VALUES (2020/6/1,    李四,    10);
INSERT INTO ABCS VALUES (2020/6/2,    张三,    11);
INSERT INTO ABCS VALUES (2020/6/2,    李四,    20);
INSERT INTO ABCS VALUES (2020/6/1,    张三,    20);

 

1.有10条数据,现UPDATE所有数据的SALARY字段都加1。

update abcs sb set sb.salary=sb.salary+1 ;

查询结果:

Orcacle回滚update操作之前的数据

2.使用as of timestamp to_timestamp查询更新之前的数据,下面可以查到14点50以前修改前的状态

select * from abcs as of timestamp to_timestamp('2020-07-17 14:50:00', 'yyyy-mm-dd hh24:mi:ss');

查询结果:

Orcacle回滚update操作之前的数据

3.执行回滚,这两部执行完之后就能恢复到update之前的状态了

-- 开启移动数据命令
alter table abcs enable row movement;
--正式回滚 update 语句前的数据
flashback table abcs to timestamp to_timestamp('2020-07-17 14:00:00', 'yyyy-mm-dd hh24:mi:ss');

 

4.以上3部是基本的操作,当然也能只查询部分之前修改的状态,如下,我只查询修改前名字叫张三的数据。

select *
  from (select *
  from abcs sb
 where sb.empolyee_name = '张三' ) as of timestamp
 to_timestamp('2020-07-17 14:50:00', 'yyyy-mm-dd hh24:mi:ss');

运行结果:

Orcacle回滚update操作之前的数据

注意

1.因为是回滚到指定时间的状态,所以这种方式只适用于UPDATE后期间这张表的数据没有经过其他修改的情况使用哦。

2.在数据量特别大的情况下:添加过滤条件查询UPDATE之前的数据可能会会出现下面的错误

Orcacle回滚update操作之前的数据

    ORA-01555说明: 快照过旧,是数据库中很常见的一个错误,比如当我们的事务需要使用undo来构建CR块的时候,而此时对应的undo 已经不存在了, 这个时候就会报ORA-01555的错误。

这里呢主要是由于时间过长update之前的数据已丢失,所以查询不到UPDATE之前的数据状态导致这个过程无法进行。

具体原因可以查看解说非常详细:https://blog.csdn.net/lxpbs8851/article/details/7108705/

 

 

本文地址:https://blog.csdn.net/baidu_39186435/article/details/107408215

相关标签: ORCACLE 数据库