oracle 数据库误删数据,如何恢复

一. 采用oracle的闪回技术

先上干活

-- 1. 如果误删了某条数据,可以通过闪回查询查询改某个时间点的数据。
select *
from TABLE_NAME 
    as of timestamp to_timestamp('2023-04-28 16:00:00','yyyy-mm-dd hh24:mi:ss')
where ID='xxxxxx'(删除时的条件);

-- 确认数据无误,插入原来误删的数据
insert into TABLE_NAME
select *
from TABLE_NAME 
    as of timestamp to_timestamp('2023-04-28 16:00:00','yyyy-mm-dd hh24:mi:ss')
where ID='xxxxxx'(删除时的条件);


-- 2. 查看某个时间点数据前后变动记录
select COLUMN_NAME, 
       versions_starttime, versions_endtime, versions_operation
from mgj_commission_sqlgroups versions 
    between timestamp to_timestamp('2023-09-07 10:00:00','yyyy-mm-dd hh24:mi:ss') and to_timestamp('2023-09-07 11:00:00','yyyy-mm-dd hh24:mi:ss')
where YOUR_CONDITION
order by versions_starttime desc;


-- 2.1 查询最大时间区间内的修改
-- 该查询很花时间
select COLUMN, 
       versions_starttime, versions_endtime, versions_operation
from TABLE_NAME versions
    between timestamp minvalue and maxvalue
where versions_starttime is not null
order by versions_starttime desc;

-- 3. 整个表进行闪回
alter table TABLE_NAME enable row movement;
flashback table TABLE_NAME to timestamp to_timestamp('2023-11-15 16:00:00','yyyy-mm-dd HH24:MI:SS');

1.1 闪回技术介绍

闪回技术是Oracle强大数据库备份恢复机制的一部分,在数据库发生逻辑错误的时候,闪回技术能提供快速且最小损失的恢复(多数闪回功能都能在数据库联机状态下完成)。

1. 撤销段

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

2. 闪回技术分分类

Oracle提供了四种可供使用的闪回技术(闪回查询,闪回删除,闪回归档,闪回数据库)。

2.1 闪回查询:

功能描述:可以查询过去某个时间段的数据库状态。
工作原理:Oracle 会提取所需要的撤销数据(前提是撤销是可用的,即撤销数据还没被覆盖)进行回滚,但这种回滚是临时的,仅针对当前session可见。
优点:简单,短时间内的少量数据恢复无需任何额外操作和开销。
缺点:撤销数据会过期,过期了就无法闪回了。

2.2 闪回删除:

功能描述:闪回删除可以轻松将一个已经被Drop的表还原回来。相应的索引,数据库约束也会被还原(除了外键约束)
原理描述:Drop命令其实是Rename命令,早期的Oracle版本(10g之前),闪回删除意味着从数据字典中删除了该表的所有引用,虽然表中数据可能还存在,但已成了孤魂野鬼,没法进行恢复了,10g版本之后,Drop命令则仅仅是一个Rename操作,所以恢复就很容易了。

2.3 闪回归档:

功能描述:闪回数据归档可使表具有回退到过去任何时间点的能力,前面提到的闪回查询,闪回表都会受限于撤销数据是否失效,如果撤销数据被覆盖重写了,闪回操作自然会失败,闪回删除则受限于表空间是否有足够可用空间,而闪回数据归档,则没有这些限制。
原理描述:需要用户创建一个归档表,用于记录归档数据。
优点:不受撤销数据撤销时间和大小限制
缺点:占用额外的表空间,数据量过大时,需要人维护。

2.4 闪回数据库:

功能描述:闪回数据库可将整个数据库回退到过去某个时间点,闪回表是某张表的时空穿梭,闪回数据库则是整个数据库的时空穿梭。当然,闪回点之后的所有工作就丢失了,其实就相当于数据库的不完整恢复,所以只能以resetlogs模式打开数据库。闪回数据库会造成停机时间,当然相比于传统备份恢复机制,恢复过程会快很多。
工作原理:闪回数据库不使用撤销数据,使用另外一种机制来保留回退所需要的恢复数据,当启用闪回数据库,发生变化的数据块会不断从数据库缓冲区缓存中复制到闪回缓冲区,然后,称为恢复写入器(Recovery Writer)的后台进程会将这些数据刷新到磁盘中的闪回日志文件中。闪回的过程,则是一个 提取闪回日志–>将块映像复制回数据文件 的过程。
缺点:需要配置闪回数据库。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值