Oracle - 恢复单个表

use*_*985 4 oracle export import

在大型数据库中,执行了一项活动以上传数据。由于一些错误,重新输入了一个月的数据,这些数据留在了临时保存表中。因此,为了掩盖这一点,我们从另一台机器上恢复的备份中转储了 2 个表。重命名发生错误并从备份中恢复的表。但是当表被恢复时,约束无法加载,因为同名已经在使用中。使用oracle exp/imp 命令导出和导入数据。

我不是 DBA,但在这个问题上需要帮助。

小智 6

您可以使用闪回将表数据返回到其原始状态。

是否启用闪回?

数据库需要处于归档模式:

select log_mode from v$database;
Run Code Online (Sandbox Code Playgroud)

应该返回“ARCHIVEMODE”

检查是否启用了闪回:

select flashback_on from v$database;
Run Code Online (Sandbox Code Playgroud)

应该返回“是”

如果“否”,您可以通过运行来启用闪回:

alter database flashback on;
Run Code Online (Sandbox Code Playgroud)

检查撤消保留:

show parameter undo
Run Code Online (Sandbox Code Playgroud)

默认值为 900 秒(15 分钟)。因此,您可以使用以下命令将表闪回到 15 分钟前:

Alter table t enable row movement ;

FLASHBACK TABLE t TO TIMESTAMP TO_TIMESTAMP ('2015-aug-11 12:00:00', 'YYYY-MON-DD HH24:MI:SS');
Run Code Online (Sandbox Code Playgroud)

其他闪回命令:

  • 闪回数据库 = > 使您能够将整个数据库带到过去的时间点(使用闪回日志,db_flashback_retention_target)。
  • Flashback drop => 允许您检索意外删除的表和索引(使用回收站)。
  • 闪回表 => 允许您将表恢复到过去的时间(使用撤消数据)。
  • 闪回查询 => 可让您查询并将数据行恢复到某个时间点(使用撤消数据)。

对于使用 SCN 的闪回表,请参阅此链接:https : //oracle-base.com/articles/10g/flashback-10g#flashback_table