如何恢复整个Oracle架构

时间:2014-06-23 06:46:30

标签: oracle oracle11g navicat recover

我使用Navicat for Oracle来备份整个架构。我错误地选择了“执行SQL文件”而不是“备份文件”选项,并且所有以前的数据都已更改/丢失。我尝试使用Oracle Undo功能,但它表示表定义已更改。请我不熟练使用oracle,我只将它用于项目,因为它是必需的,所以我只是用它来存储数据。我需要所有的帮助,我现在可以恢复整个架构到24小时前的状态,我是如此搞砸......(原谅我的语言)

1 个答案:

答案 0 :(得分:0)

根据您的描述,您运行了一个删除并重新创建表的脚本。由于您已启用闪回并且已删除的表位于回收站中,因此您可以use the 'Flashback Drop' feature将已删除的表恢复。

这是一个包含单个表的示例:

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进行还原后重命名它们。

你不能撤消序列;那些不进入回收站的人。如果您需要重置序列以使其不重复您已有的值,您可以获得它应该保留的最高值(从已恢复的表上的主键,比如说)and use temporarily change the increment value以跳过用过的数字。