我正在使用 Navicat for Oracle 备份整个 Schema。我错误地选择了执行 SQL 文件而不是备份文件选项,并且所有以前的数据都已更改/丢失。我尝试使用 Oracle Undo 功能,但它说表定义已更改。请我不熟悉oracle,我只将它用于项目,因为它是必需的,所以我只是用它来存储数据。我需要我现在能得到的所有帮助来将整个架构恢复到 24 小时前的状态,否则我会被搞砸……(原谅我的语言)
问问题
4724 次
1 回答
0
根据您的描述,您运行了一个删除并重新创建表的脚本。由于您启用了闪回并且您删除的表在回收站中,您可以使用“闪回删除”功能来恢复已删除的表。
这是一个带有单个表的示例:
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
值以跳过使用过的值数字。
于 2014-06-23T14:57:47.733 回答