3

我已经意外删除了表中的一些行并且也进行了提交。现在我想恢复它们。

我使用的数据库是 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:

但我无法解决这个查询中的问题。

有人可以帮忙吗?

4

2 回答 2

5

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

尝试:

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

(您的时间格式说明符也不正确,并且与您的日期字符串不匹配。)

于 2013-03-11T07:12:20.000 回答
2

例如 :

    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 失败,其他选项:

日志矿工

如果启用了 Oracle 补充日志,您可以为您的删除语句获取 undo sql

-- 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 可以扫描整个表,找出标记为已删除的每条记录/行并写入平面文件。

于 2016-02-21T13:43:43.710 回答