【问题标题】:I dropped a table in Oracle, how can I retrieve it from the undo tablespace?我在 Oracle 中删除了一个表,如何从 undo 表空间中检索它?
【发布时间】:2013-10-08 03:52:15
【问题描述】:

我不小心掉落了一张相当大的桌子——回收站未启用。我相当确定数据仍然存在于 UNDO 表空间中,但我不确定如何将其取出。我完全按照它被删除之前的样子重新创建了表——结构完全相同。但是,当我尝试闪回表时,我收到此错误:

flashback table tablex to timestamp (systimestamp - interval '120' minute);
Error: 01466
DBD::Oracle::db do failed: ORA-01466: unable to read data - table definition has changed

知道如何克服这个错误吗?从我所做的所有搜索来看,它似乎认为该表在结构上与删除时不同。

【问题讨论】:

  • 嗯,我没有回滚,因为我认为删除表实际上无法通过回滚来撤消。我以为只有像插入和更新这样的 DML 操作可以回滚?
  • FLASHBACK TABLE 在使用闪回时间戳功能时不需要回收站。如果你正在使用它,它会检查 UNDO 表空间,据我所知(我可能是错的)。
  • 如果未启用回收站,并且您通过在show parameter recyclebin 的结果中的value 列中看到off 来确认它,那么真的没有简单的方法来恢复表而不对数据库或 talespace 进行时间点恢复。您也可以尝试使用LogMiner 来恢复和恢复已删除的表,但这可能需要更多时间。

标签: sql oracle undo flashback sql-drop


【解决方案1】:

我认为你不应该自己重新创建表 - 当你闪回它时,它会被 Oracle 重新创建,我推荐以下文章:http://www.oracle-base.com/articles/10g/flashback-10g.php#flashback_table

例子:

CREATE TABLE flashback_table_test (
  id NUMBER CONSTRAINT pk_flashback_table_test PRIMARY KEY
);

DROP TABLE flashback_table_test;
FLASHBACK TABLE flashback_table_test TO BEFORE DROP;

我认为您需要在手动重新创建表时使用一些 SCN 编号将其闪回。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-10
    • 2020-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-22
    • 1970-01-01
    相关资源
    最近更新 更多