误删除了delete oracle中数据表记录,没备份要怎么恢复?

如题所述

    flashback query闪回查询

尝试使用Oracle 10g 以后的flashback Query特性 闪回查询可以查询若干时间之前的数据

   2. logmnr 日志挖掘

使用logminer 日志挖掘 把delete的redo挖出来看有没有 对应的undo回滚SQL可用

   3. 使用ORACLE PRM-DUL 工具

 Oracle PRM-DUL 工具可以恢复 数据库中表上 被删除的记录,大致流程如下:



对于没有有效物理或逻辑备份的场景,当Oracle中发生delete误操作时 一般会优先考虑使用flashback闪回或logminer日志挖掘等技术来恢复Oracle表中的数据行记录,但很多时候flashback或logminer都无法力挽狂澜。

 

对于delete操作而言,其对于oracle底层数据块block中的row piece记录一般仅仅是修改其row flag标记为已删除标记,容许后续INSERT的记录覆盖这些被标记为delete的数据,也容许破坏这些delete掉的数据的结构。 换句话说如果delete后没有对表做什么操作的话,直接读取block中的这些被标记为deleted的记录还是有可能读取到完整数据的。

总而言之,是否能恢复这部分delete掉的数据,完全取决于磁盘上oracle block中这部分删除的数据行是否有被最终清理掉。

在被清理掉之前ORACLE PRM-DUL工具都可以尝试把这部分数据恢复出来, 具体步骤与普通的数据字典模式差别很小。

启动PRM-DUL 点击恢复向导  字典模式

 

 

 

 

 

 

加入所有oracle数据文件,不需要加入临时文件TEMPFILE、UNDO数据文件、控制文件、日志文件

 


点击load 按钮,PRM会自动加载数据字典 即bootstrap动作

 

 

至此 PRM左侧将出现 树形的对象树,选择你需要恢复的用户下的对应数据表, 右击对象后选择 unload deleted data

 

 

 

PRM-DUL 完成对已删除数据的恢复操作后会将 数据写出到  上图中 File path的位置, 示例的数据恢复情况如下:

 


温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-02-23
没有提交的话不需要恢复

如果提交了,可以使用数据库闪回, 非常简单
--得到一个当前序列号.
select dbms_flashback.get_system_change_number scn from dual;
--7827319是序列号
select * from table as of scn 7827319;
你可以慢慢减序列号,直到你能查询到数据.

例如, 我删除数据提交, Oracle会给这个操作一个序列号. 然后每一次操作都会生成序列号.
你用 as of scn 序列 查询时, 查询当时那个操作的数据情况.本回答被网友采纳
第2个回答  2020-02-12

在无法闪回,没有插入新数据的情况下 网页链接 提供了比较好的恢复方法

相似回答