如何回滚 Oracle DB 中的所有提交

How to rollback all the commits in Oracle DB

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

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

如果您只是丢弃了一个 table,假设您没有禁用回收站,您可以简单地做一个 flashback drop

flashback table <<table name>> to before drop

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

create restore point <<your restore point name>>

<<run your script>>

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