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可能无法执行必要的行移动操作,从而导致恢复失败。
保持数据一致性:
在数据恢复过程中,保持数据的一致性至关重要。开启行迁移可以确保在恢复过程中行的移动不会破坏数据的一致性。
避免恢复后的数据问题:
如果在恢复数据前未开启行迁移,恢复后的表可能会出现数据行位置不正确或索引碎片化的问题。这些问题可能会影响查询性能和数据完整性。