【问题标题】:How to rollback all the commits in Oracle DB如何回滚 Oracle DB 中的所有提交
【发布时间】:2020-08-04 07:40:25
【问题描述】:

最近我犯了一个错误,我的 oracle 数据库中的所有表都被删除(从 SQL Developer 工具运行 drop 命令)在我不知道的所有事务序列中,我在错误的数据库中删除了表。每次我删除一组表时,我都会提交操作。到那时,我意识到我已经在错误的数据库中删除了表,我已经来不及回滚了,因为它只回滚了最后一个操作。我也在网上搜索,发现 SavePoints 是分辨率,但我没有配置保存点。我在 2 天前备份了所有表格,因此,我从那里运行脚本并在过去 2 天丢失了更改。 有没有其他方法可以让我的数据库状态恢复。不过,我已经将在执行此类操作时创建保存点作为一种做法。但是,我仍然很困惑。不了解保存点的人会丢失所有数据。

【问题讨论】:

标签: oracle11g oracle-sqldeveloper database-administration rollback savepoints


【解决方案1】:

drop 这样的 DDL 语句会执行隐式提交,因此您不能 rollback 取消删除表。保存点也不会帮助您,因为它只能让您回到当前事务中的较早点。

如果你只是删除了一个表,假设你没有禁用回收站,你可以简单地做一个flashback drop

flashback table <<table name>> to before drop

如果您有一个更复杂的脚本,而不仅仅是删除表,您可能需要在运行脚本之前设置restore point。如果出现问题,您可以将整个数据库闪回到该还原点。

create restore point <<your restore point name>>

<<run your script>>

flashback database to restore point <<your restore point name>>

【讨论】:

  • 非常感谢贾斯汀。我试过闪回。闪回不起作用有什么原因吗?
  • @Ashish - 您尝试了哪个命令? flashback table?还是flashback drop? “不起作用”是什么意思?你收到错误了吗?如果是这样,错误是什么?
  • @Ashish Flashback 必须在您的数据库中启用。我们不启用它会产生额外的开销。
  • @BrianLeach - “闪回”是由许多不同设置控制的许多不同功能的广义术语。您必须启用闪回日志才能执行flashback database。您无需执行任何操作即可启用flashback table。您可以禁用回收站,这将阻止flashback table 工作。还有一些闪回查询使用undo 而不是闪回日志,因此它们的配置不同。
猜你喜欢
  • 2011-04-23
  • 2011-10-01
  • 1970-01-01
  • 2022-11-10
  • 2014-04-17
  • 2020-02-24
  • 2019-05-29
  • 1970-01-01
  • 2014-11-20
相关资源
最近更新 更多