Oracle闪回

概述

  闪回技术是Oracle强大的数据库备份恢复机制的一部分,在数据库发生逻辑错误的时候,闪回技术能提供快速且最小损失的恢复(多数闪回功能都能在数据库联机状态下完成)。需要注意的是,闪回技术旨在快速恢复逻辑错误,对于物理损坏或是介质丢失的错误,闪回技术就回天乏术了.还是得借助于Oracle一些高级的备份恢复工具,如Ramn去完成(这才是Oracle强大的备份恢复机制的精髓所在)

撤销段(UNDO SEGMENT)

  在讲闪回技术前,需要先了解Oracle的一个逻辑结构撤销段。因为大部分闪回技术都需要依赖撤销段中的撤销数据。撤销数据是反转DML语句结果所需的信息,只是某个事务修改了数据,那么更新前的原有数据就会被写入一个撤销段,(事务回滚也会用到撤销段中的数据),事务启动时,Oracle就会为其分配一个撤销段,事务和撤销段存在多对一的关系,即一个事务只能对应一个撤销段,多个事务可以共享一个撤销段(不过在数据库正常运行时一般不会发生这种情况)

闪回技术

  Oracle提供了四种可供使用的闪回技术(闪回查询、闪回删除、闪回归档、闪回数据库),每种都有不同的底层体系结构支撑,但其实这四种不同的闪回技术部分功能是有重叠的,使用时也需要根据实际场合合理选择最合适的闪回功能。

小试牛刀

第一种:delete删除掉的记录

-- 创建数据表
create table ABCDEFG(
       username varchar2(50) primary key,
       userage number
);

-- 插入测试数据
insert into ABCDEFG (USERNAME, USERAGE)
values ('123', 25);

insert into ABCDEFG (USERNAME, USERAGE)
values ('456', 30);

insert into ABCDEFG (USERNAME, USERAGE)
values ('1312', 25);

insert into ABCDEFG (USERNAME, USERAGE)
values ('1231', 31);
commit;

-- 查询数据

select t.*, t.rowid from ABCDEFG t

--我们将其中某一条数据删除;
delete from ABCDEFG where username='123';
commit;

-- 如果记得删除时间的话,可用如下语句查询该表在该时间的原始数据
select * from ABCDEFG as of timestamp to_timestamp('2021-06-11 11:56','yyyy-mm-dd hh24:mi:ss')

-- 开启行移动功能
alter table ABCDEFG enable row movement;

-- 进行闪回(也就是让该表恢复到某一时间)
flashback table ABCDEFG to timestamp to_timestamp('2021-06-11 11:56','yyyy-mm-dd hh24:mi:ss')
create table ABCDEFG(
       username varchar2(50) primary key,
       userage number
);

-- 进行行表数据恢复以后,我们必须要关闭行移动功能
alter table ABCDEFG  disable row movement;

第二种:drop掉的表如何恢复

-- 查询用户下所拥有的表(dropped代表是否删除)
select table_name,dropped from user_tables;

在这里插入图片描述

-- 我们把刚才创建的表进行删除
drop table ABCDEFG;

-- 查询已经删除的表(ogiginal_name就是表名,type代表删掉的类型)
select object_name,original_name,type,droptime from user_recyclebin;

在这里插入图片描述

-- 用ogiginal_name进行恢复
flashback table ABCDEFG to before drop;
-- 用object_name进行恢复,并且重命名为新表

在这里插入图片描述

-- 利用object_name进行恢复,并指定新的名称
flashback table "BIN$xHe8/cqu1tvgVQJQVq0UJQ==$0" to before drop rename to "ABEFG";

在这里插入图片描述

注:truncate 清空的表无法进行回复

闪回失败

闪回表失败的情况如下:

  • 违反了数据库约束,比如用户不小心删除了子表中的数据,现在想利用闪回表技术进行回退,恰好在这中间,父表中与该数据对应的那条记录也被删除了,在这种情况下,由于违反了外键约束,导致闪回表失败
  • 撤销数据失效,比如用于支撑闪回操作的撤销数据被覆盖了,这种情况闪回表操作自然会失败
  • 闪回不能跨越DDL(数据库定义语言),即在闪回点和当前点之间,表结构有过变更,这种情况下闪回操作也会失败
    上述闪回功能都是基于撤销数据的,而撤销数据是会被从写的(Expired会被重写,Active不会被重写),所以,在需要使用这几种闪回功能去恢复数据的时候(确切的说,是需要使用基本撤销数据的闪回功能时),最短时间发现错误,第一时间执行闪回操作,才能最大程度的保证闪回功能的成功。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菜鸟特工007

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值