如何恢复整个Oracle架构



我使用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值来跳过使用的数字。

相关内容

  • 没有找到相关文章

最新更新