0

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

4

1 回答 1

5

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

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

flashback table <<table name>> to before drop

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

create restore point <<your restore point name>>

<<run your script>>

flashback database to restore point <<your restore point name>>
于 2020-08-04T09:39:36.153 回答