oracle 误更新/删除数据恢复办法

1.误删除恢复

-- 第一步 从删除的闪存表中找到删除点的时间戳
select * from v$sql where sql_text like '%表名%'
-- 第二步 查询这个时间戳所删除的数据是不是需要的数据
select * from 表名 as of timestamp to_timestamp('删除点的时间戳','yyyy-mm-dd hh24:mi:ss')
-- 第三步 把删除的数据插入原表中
insert into 表名
select * from  表名  as of timestamp to_timestamp('2023-03-10/13:32:16','yyyy-mm-dd hh24:mi:ss')

2.误更新数据

--找到数据表时间戳
select * from (
select * from T_SALEBUDGET  as of timestamp to_timestamp('2024-12-02 07:53:00','yyyy-mm-dd hh24:mi:ss')
) where company =1 and to_char(time,'yyyy-mm')='2024-11'

--将数据撤回恢复到更新之前的状态
flashback table T_SALEBUDGET to timestamp to_timestamp('2024-12-02 07:53:00','yyyy-mm-dd hh24:mi:ss')
--开启行迁移,如果该数据表禁止行迁移则开启
alter table T_SALEBUDGET enable row movement
--关闭行迁移,更新完数据后重新关闭
alter table T_SALEBUDGET disable row movement

在Oracle数据库中,当数据被误更新后,恢复数据之前开启行迁移(Row Movement)的目的主要是为了支持后续的数据恢复操作,特别是当使用闪回表(Flashback Table)功能将数据恢复到某个特定时间点时。以下是对这一过程的详细解释:

行迁移的作用
行迁移是Oracle数据库中的一种机制,它允许数据库在必要时将数据行从一个数据块移动到另一个数据块。这通常发生在数据行因为更新而变大,以至于无法再原地容纳时。然而,在数据恢复的场景中,行迁移的开启主要是为了支持表结构的改变和数据位置的调整。

为什么恢复数据前要开启行迁移
支持闪回表操作:
闪回表是Oracle提供的一种数据恢复功能,它可以将表恢复到某个特定时间点之前的状态。
在执行闪回表操作时,Oracle可能需要移动表中的行以恢复其原始状态。如果行迁移未开启,Oracle可能无法执行必要的行移动操作,从而导致恢复失败。
保持数据一致性:
在数据恢复过程中,保持数据的一致性至关重要。开启行迁移可以确保在恢复过程中行的移动不会破坏数据的一致性。
避免恢复后的数据问题:
如果在恢复数据前未开启行迁移,恢复后的表可能会出现数据行位置不正确或索引碎片化的问题。这些问题可能会影响查询性能和数据完整性。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容