恢复删除的记录

问题描述:

我已经适当地删除了表中的一些行,并做了提交。现在 我想恢复它们。恢复删除的记录

我使用的数据库是Oracle 11g R2。

我用下面的查询来获取删除的记录:

SELECT * FROM MY_TABLE AS OF TIMESTAMP ('13-MAR-11 8:50:58','DD-MON-YY HH24: MI: SS') 

但在执行它给出了一个错误说:

Error at Command Line:3 Column:75 
Error report: 
SQL Error: ORA-00907: missing right parenthesis 
00907. 00000 - "missing right parenthesis" 
*Cause:  
*Action: 

但在这个queury我想不出问题。

任何人都可以帮忙吗?

这需要一个实际的时间戳(或日期),你传递了一对值。

尝试:(你的时间格式说明不正确或者与不符合您的日期字符串)

SELECT * FROM MY_TABLE 
AS OF TIMESTAMP TO_DATE('13-MAR-11 08:50:58','DD-MON-YY HH24:MI:SS') 

+0

这就像一个魅力... 非常感谢你。 我还有一个小问题。 说我执行两个删除操作后,每个提交。 那么我可以到达第一个删除点吗? 或者我只能走到最后一个删除点? – KTB 2013-03-11 07:22:26

+1

您可以回到之前的几个提交。主要因素是回滚提交所需的撤消块是否仍存在于撤消表空间中。您应该查看'undo_retention'参数和闪回查询文档(以及Flashback数据库,或者更全面的回忆以获得更为极端的方法)。 – Mat 2013-03-11 08:37:29

例如:

SELECT * FROM EMP AS OF TIMESTAMP 
    TO_TIMESTAMP('2005-04-04 09:30:00', 'YYYY-MM-DD HH:MI:SS') 
    WHERE name = 'JOHN'; 

但是闪回查询ORA-1555可能会失败,其他选项:

Logmine [R

如果启用了甲骨文补充日志,你可以撤消SQL您delete语句

-- switch again logfile to get a minimal redo activity alter system switch logfile; 

-- mine the last written archived log 
exec dbms_logmnr.add_logfile('archivelog/redologfile', options =>dbms_logmnr.new); 
exec dbms_logmnr.start_logmnr(options => dbms_logmnr.dict_from_online_catalog); 
select operation, sql_redo from v$logmnr_contents where seg_name = 'EMP'; 

甲骨文PRM-DUL

PRM-DUL将是最后的选择。即使在Oracle块中删除的行块始终只是标记了带有删除掩码的行标志,仍然可以通过扫描Oracle数据块读取行块。 PRM-DUL可以扫描整个表格,找出标记为已删除的每个记录/行块并将其写入平面文件。