Oracle数据库,误delete表中数据怎么恢复,没有做备份?急!!!请大虾帮忙...
发布网友
发布时间:2022-04-23 08:00
我来回答
共4个回答
热心网友
时间:2022-05-02 09:41
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的位置, 示例的数据恢复情况如下:
热心网友
时间:2022-05-02 10:59
如果是10g的话建议采用flashback query来找出删除前的数据,具体用法如:
select * from TAB as of timestamp systimestamp-XXX;
如何使用flashback query:http://www.oracledatabase12g.com/archives/oracle-9i-recovering-lost-data-through-flashback-query.html
如果flashback query无法找出删除数据或报ORA-1555的话,那么建议赶快停止数据库,然后使用Logmnr的方法找出相关删除数据REDO语句的对应UNDO语句,之后实施这些UNDO语句。
如何使用logmnr:http://www.oracledatabase12g.com/archives/learn-how-to-use-logminer.html
数据库的备份异常重要,没有备份的数据库是不安全的。追问恢复的话,从删除操作后,每天产生的数据是不是就没有了?
flashback query 需要安装吗?
要执行些什么语句?
追答1. 你可以使用闪回查询把久的数据查出来,或者放到另一张表上一遍对比,如:
create table xxx as select * from TAB as of timestamp systimestamp-XXX;
2.10g默认安装的话会有该 flashback query特性
热心网友
时间:2022-05-02 12:34
如果启用有归档日志的话可以归档日志恢复,还可以用flashback恢复到某个时间点或SCN
热心网友
时间:2022-05-02 14:25
没有在系统用户怔的话。。。很好办。。用show recyclebin;