user3141985 Asked: 2015-08-08 03:37:58 +0800 CST2015-08-08 03:37:58 +0800 CST 2015-08-08 03:37:58 +0800 CST Oracle - 恢复单个表 772 在一个大型数据库中,执行了一项活动来上传数据。由于一些错误,再次输入了一个月的数据,这些数据留在了临时保存表中。因此,为了掩盖这一点,我们从另一台机器上恢复的备份中转储了 2 个表。重命名了发生错误并从备份中恢复的表。但是,当恢复表时,约束无法加载,因为同名已在使用中。使用 oracle exp/imp 命令导出和导入数据。 我不是 DBA,但在这个问题上需要帮助。 oracle export 3 个回答 Voted Stringer 2015-08-08T10:56:17+08:002015-08-08T10:56:17+08:00 您可以使用闪回将表数据返回到其原始状态。 是否启用闪回? 数据库需要处于归档模式: select log_mode from v$database; 应该返回“ARCHIVEMODE” 检查是否启用了闪回: select flashback_on from v$database; 应该返回“是” 如果“否”,您可以通过运行启用闪回: alter database flashback on; 检查撤消保留: show parameter undo 默认值为 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'); 其他闪回命令: 闪回数据库 => 使您能够将整个数据库带到过去的时间点(使用闪回日志,db_flashback_retention_target)。 Flashback drop => 让您检索意外删除的表和索引(使用回收站)。 闪回表 => 让您将表恢复到过去的某个时间(使用撤消数据)。 闪回查询 => 允许您查询数据行并将其恢复到某个时间点(使用撤消数据)。 对于使用 SCN 的闪回表,请参阅此链接: https ://oracle-base.com/articles/10g/flashback-10g#flashback_table Best Answer Marco 2015-08-08T04:18:19+08:002015-08-08T04:18:19+08:00 为重命名的表保留约束。在导入具有正确数据的表之前删除它们。 alter table t1 drop constraint c; 如果您不想丢失错误的数据,还有另一种方法可以做到这一点。您可以基于 2 个表创建一个新表: create table t1 as select * from t; 然后您必须禁用约束并删除 table 的内容t。现在您可以将数据导入表并启用约束。 alter table t disable constraint c; truncate table t; 现在导入“旧”表t并忽略约束错误。如果您不希望出现错误,请将该选项添加constraints=n到imp. alter table t enable constraint c; 请注意,在disable和之间enable没有检查插件。如果存在不符合约束的行,enable则将失败。如果在旧情况和新情况之间插入了行,情况也是如此。 Bill N. Varelli 2015-08-08T11:08:18+08:002015-08-08T11:08:18+08:00 尝试闪回你的桌子 ALTER TABLE your_table ENABLE ROW MOVEMENT; FLASHBACK TABLE your_table TO TIMESTAMP (SYSTIMESTAMP - INTERVAL '1' minute);
您可以使用闪回将表数据返回到其原始状态。
是否启用闪回?
数据库需要处于归档模式:
应该返回“ARCHIVEMODE”
检查是否启用了闪回:
应该返回“是”
如果“否”,您可以通过运行启用闪回:
检查撤消保留:
默认值为 900 秒(15 分钟)。因此,您可以使用以下命令将表闪回到 15 分钟前:
其他闪回命令:
对于使用 SCN 的闪回表,请参阅此链接: https ://oracle-base.com/articles/10g/flashback-10g#flashback_table
为重命名的表保留约束。在导入具有正确数据的表之前删除它们。
如果您不想丢失错误的数据,还有另一种方法可以做到这一点。您可以基于 2 个表创建一个新表:
然后您必须禁用约束并删除 table 的内容
t
。现在您可以将数据导入表并启用约束。现在导入“旧”表
t
并忽略约束错误。如果您不希望出现错误,请将该选项添加constraints=n
到imp
.请注意,在
disable
和之间enable
没有检查插件。如果存在不符合约束的行,enable
则将失败。如果在旧情况和新情况之间插入了行,情况也是如此。尝试闪回你的桌子