我使用Navicat for Oracle备份整个Schema。我错误地选择了执行SQL文件而不是备份文件选项和所有以前的数据已更改/丢失。我尝试使用Oracle撤销功能,但它说表定义已经改变。请我不是熟练的oracle,我只使用它的一个项目,因为它是必需的,所以我只是用它来存储数据。我现在需要所有我能得到的帮助来恢复整个架构到24小时前的样子,否则我就完蛋了…(原谅我的语言)
从描述中运行一个脚本,删除并重新创建表。当您启用了闪回并且您的删除表在回收站中时,您可以使用"闪回删除"功能来恢复删除的表。
下面是一个单表的例子:
create table t43 (id number);
drop table t43;
create table t43 (id2 number);
show recyclebin;
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
-------------------------------- ------------------------------ ------------------------- -------------------
T43 BIN$/ILKmnS4b+jgQwEAAH9jKA==$0 TABLE 2014-06-23:15:38:06
如果你试图恢复新表,你会得到一个错误:
flashback table t43 to before drop;
SQL Error: ORA-38312: original name is used by an existing object
您可以重命名已恢复的表:
flashback table t43 to before drop rename to t43_restored;
…如果你想保留新表,但又能参考旧表,这是很有用的;或者在您的情况下可能更有用的是在恢复之前重命名新表:
alter table t43 rename to t43_new;
table T43 altered.
flashback table t43 to before drop;
table T43 succeeded.
desc t43
Name Null Type
---- ---- ------
ID NUMBER
您可以删除所有的表,并且由于引用约束仍然与bin中的表一起工作,因此您不必过于担心在子表之前恢复父表,尽管如果可以的话,这样做可能更简洁。
请注意文档中关于恢复依赖对象的部分—索引名称不会被保留,您需要在使用alter index
恢复后重新命名它们。
你不能删除一个序列;那些不会被扔进回收站。如果您需要重置一个序列,这样它就不会重复您已经拥有的值,您可以获得它应该保存的最大值(例如,从您恢复的表的主键中),并使用临时更改increment
值来跳过使用的数字。