0

我知道当您将 Oracle DB 回滚到保存点时,在该原始保存点之后标记的所有保存点都将被删除,但是自从该保存点也回滚以来,所有已提交的事务是否都已提交?是数据库的完整闪回吗?我假设是,只是想澄清一下。非常感谢。

4

1 回答 1

1

如果您提交事务,那么在此之前的所有保存点都将失效,因此“自从该保存点也回滚以来所有提交的事务”并没有真正的意义。您永远无法回滚提交。

从文档

将 ROLLBACK 与 TO SAVEPOINT 子句一起使用会执行以下操作:

  • 仅回滚保存点之后的事务部分。它不会结束交易。
  • 擦除在该保存点之后创建的所有保存点。命名的保存点被保留,因此您可以多次回滚到同一个保存点。先前的保存点也被保留。

在您的问题中使用“所有交易”令人困惑。事务和保存点仅适用于单个会话 - 其他会话中的任何事务都不受您在会话中执行的任何回滚的影响。

将会话回滚到保存点确实会删除同一会话中的“在该原始保存点之后标记的任何保存点” ,因此它们位于同一事务中。它不会影响任何其他会话中的任何事务或保存点,并且您当前的事务仍然处于活动状态。

所以不,这不是数据库的完整闪回。有工具可以做到这一点,但保存点是完全不同的东西。

阅读有关事务和保存点的更多信息。

于 2017-04-04T11:22:32.157 回答