Oracle 基于 表的 的闪回(误删除数据)

本文介绍了如何使用Oracle的表闪回功能来恢复误删除的数据。首先创建了一个测试表并查看了14条初始数据,接着模拟删除操作。通过查询历史版本的SCN号,启用行移动功能,然后执行闪回表操作,最终成功恢复删除的数据,确保了数据一致性。
摘要由CSDN通过智能技术生成

Oracle 基于 表的 的闪回(误删除数据)

  • 创建一张测试表,并查看数据,有14条数据
create table emp as select * from scott.emp;
select count(*) from emp;

在这里插入图片描述

  • 查看当前数据时间(便于实验环境,生产中一定要记得大概时间)
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;

在这里插入图片描述

  • 删除表数据,并查看
begin
	delete from emp;
	comit;
end;
/
select count(*) from emp;

在这里插入图片描述

  • 下面开始进行闪回,闪回的查询的方法有很多种,比如比较历史版本信息,然后通过flashback_transaction_query进行回滚,下面介绍(根据历史版本信息,查询对应的xid及scn号,如果数据量大也可执行where条件)
select versions_startscn,
       to_char(versions_starttime,'yyyy-mm-dd hh24 mi:ss'),
       versions_xid,
       versions_operation
from emp versions
between scn minvalue and maxvalue

在这里插入图片描述

  • 根据SCN号查询删除操作前的数据是否正确

上图出现的SCN号为发生"DELETE“操作时的SCN,一般查询我们进行“-1"操作;

select count(*) from emp as of 7262728;

在这里插入图片描述

在这里插入图片描述

  • 开启行移动,(因为表内的任意行都是被rowid记录的,且oracle的一致性在闪回到旧时刻的时候,不仅仅是保证数据的一致,也保证原表结构的一致,所以如果你想闪回的rowid已经被其他数据占用了的话,在不对当前表启用行迁移的情况下,是没法迁移回去的。)
alter table emp enable row movement;

在这里插入图片描述

  • 闪回表
flashback table emp to scn  7262728;

在这里插入图片描述

  • 查询表数据
select count(*) from emp;

在这里插入图片描述

  • 关闭行移动
alter table emp disable row movement;

在这里插入图片描述
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值