如何恢复Oracle表中的数据?

Wal*_*ado 2 oracle oracle10g flashback

我在我的工作上犯了一个可怕的错误,我在没有'where'子句的oracle表上执行了更新的查询,并且在此表上更改了所有内容,我想知道是否有任何方法可以恢复表上的数据.我知道我可以使用Flashback,但还有另一种方法吗?如果您知道如何在oracle中制作闪回表,请告诉我.

我正在使用Oracle 10g R2 10.2.0.1

Jus*_*ave 10

首先,你做出了改变吗?如果没有,您只需发出一个rollback即可还原您的更改.

假设您确实提交了更改,其他用户是否同时修改了表?您是否需要保留其他人所做的更改并仅还原您在交易中所做的更改?或者,您可以将整个表恢复到更改之前的某个时间点吗?

如果可以将整个表还原到某个时间点

FLASHBACK TABLE <<table name>>
  TO TIMESTAMP( systimestamp - interval '10' minute )
Run Code Online (Sandbox Code Playgroud)

将表格返回到10分钟前的状态,假设UNDO必要时这样做仍然可用(所以你在错误之后只有有限的时间才能闪回那个错误).为了发行FLASHBACK TABLE,你还必须确保

  • 该表已启用行移动 ALTER TABLE <<table name>> ENABLE ROW MOVEMENT
  • 您必须具有FLASHBACK表或FLASHBACK ANY TABLE系统特权的权限.

  • 如果还想“检索”已删除的数据,则可以在出现错误之前的任何时间使用此查询:`SELECT * FROM &lt;&lt; table name &gt;&gt; AS OF TIMESTAMP TO_DATE('03 -OCT -13 08:50:58','DD-MON-YY HH24:MI:SS')`。但是,如果得到ORA-08180:“找不到基于指定时间的快照”,则表示Oracle无法检索在指定时间存储的数据。 (2认同)