我已经意外删除了表中的某些行并执行了提交。现在 我想恢复它们。
我使用的数据库是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:
但我无法解决这个问题。
任何人都可以帮忙吗?
答案 0 :(得分:5)
这需要一个实际的时间戳(或日期),你传递一对值。
尝试:
SELECT * FROM MY_TABLE
AS OF TIMESTAMP TO_DATE('13-MAR-11 08:50:58','DD-MON-YY HH24:MI:SS')
(您的时间格式说明符也不正确,与日期字符串不匹配。)
答案 1 :(得分:1)
例如:
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失败,其他选项:
Logminer
如果启用了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';
Oracle PRM-DUL
PRM-DUL将是最后一个选项。即使删除了Oracle块中的行块,也只是标记了带删除掩码的行标志,行块仍然可以通过扫描Oracle数据块读取。 PRM-DUL可以扫描整个表格,查找标记为已删除的每个记录/行,并写出平面文件。