恢复oracle中误删除drop掉的表 闪回的方法
此时,如果您要对表 TEST 执行闪回操作,那么列 COL1 的值应该是什么?常规想法可能认为从回收站取回表的第一个版本,列 COL1 的值是 1。实际上,取回的是表的第三个版本,而不是第一个。因此列 COL1 的值为 3,而不是 1。 此时您还可以取回被删除表的其他版本。但是,表 TEST 的存在不允许出现这种情况。您有两种选择: 使用重命名选项: FLASHBACK TABLE TEST TO BEFORE DROP RENAME TO TEST2; FLASHBACK TABLE TEST TO BEFORE DROP RENAME TO TEST1; 这些语句将表的第一个版本恢复到 TEST1,将第二个版本恢复到 TEST2。 TEST1 和 TEST2 中的列 COL1 的值将分别是 1 和 2。或者, 使用表的特定回收站名称进行恢复。为此,首先要识别表的回收站名称,然后执行: FLASHBACK TABLE "BIN$04LhcpnoanfgMAAAAAANPw==$0" TO BEFORE DROP RENAME TO TEST2; FLASHBACK TABLE "BIN$04LhcpnqanfgMAAAAAANPw==$0" TO BEFORE DROP RENAME TO TEST1; 这些语句将恢复被删除表的两个版本。 警告...... 取消删除特性使表恢复其原始名称,但是索引和触发器等相关对象并没有恢复原始名称,它们仍然使用回收站的名称。在表上定义的源(如视图和过程)没有重新编译,仍然保持无效状态。必须手动得到这些原有名称并应用到闪回表。 信息保留在名为 USER_RECYCLEBIN 的视图中。在对表进行闪回操作前,请使用以下查询来检索原有名称。 SELECT OBJECT_NAME,ORIGINAL_NAME,TYPE FROM USER_RECYCLEBIN WHERE BASE_OBJECT = (SELECT BASE_OBJECT FROM USER_RECYCLEBIN WHERE ORIGINAL_NAME = ‘RECYCLETEST‘) AND ORIGINAL_NAME != ‘RECYCLETEST‘; OBJECT_NAME? ? ??ORIGINAL_N? ? ? TYPE -------------------------- BIN$04LhcpnianfgMAAAAAANPw==$0? ? ? IN_RT_01? ? ?INDEX BIN$04LhcpnganfgMAAAAAANPw==$0? ? ? ? ?TR_RT? ? ?TRIGGER 在表进行闪回操作后,表 RECYCLETEST 上的索引和触发器将按照 OBJECT_NAME 列中所示进行命名。根据以上查询,可以使用原始名称重新命名对象,如下所示: ALTER INDEX "BIN$04LhcpnianfgMAAAAAANPw==$0" RENAME TO IN_RT_01; ALTER TRIGGER "BIN$04LhcpnganfgMAAAAAANPw==$0" RENAME TO TR_RT; 一个值得注意的例外情况是位图索引。当删除位图索引时,它们并不放置在回收站中 ― 因此无法检索它们。约束名称也无法从视图中检索。必须从其他来源对它们进行重命名。 闪回删除表功能不仅限于恢复表的删除操作。与闪回查询类似,您还可以使用它将表恢复到不同的时间点,形如 flashback table tmm2076 TO TIMESTAMP to_timestamp(‘2007-05-22?12:00:00‘,‘yyyy-mm-dd hh24:mi:ss‘)? ? ------闪回查询 弹出ORA-08189错误,需要执行以下命令先: 然后再flashback,数据被恢复完毕。 (编辑:PHP编程网 - 黄冈站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |