我知道当您将 Oracle DB 回滚到保存点时,在该原始保存点之后标记的所有保存点都将被删除,但是自从该保存点也回滚以来,所有已提交的事务是否都已提交?是数据库的完整闪回吗?我假设是,只是想澄清一下。非常感谢。
问问题
520 次
1 回答
1
如果您提交事务,那么在此之前的所有保存点都将失效,因此“自从该保存点也回滚以来所有提交的事务”并没有真正的意义。您永远无法回滚提交。
从文档:
将 ROLLBACK 与 TO SAVEPOINT 子句一起使用会执行以下操作:
- 仅回滚保存点之后的事务部分。它不会结束交易。
- 擦除在该保存点之后创建的所有保存点。命名的保存点被保留,因此您可以多次回滚到同一个保存点。先前的保存点也被保留。
在您的问题中使用“所有交易”令人困惑。事务和保存点仅适用于单个会话 - 其他会话中的任何事务都不受您在会话中执行的任何回滚的影响。
将会话回滚到保存点确实会删除同一会话中的“在该原始保存点之后标记的任何保存点” ,因此它们位于同一事务中。它不会影响任何其他会话中的任何事务或保存点,并且您当前的事务仍然处于活动状态。
所以不,这不是数据库的完整闪回。有工具可以做到这一点,但保存点是完全不同的东西。
阅读有关事务和保存点的更多信息。
于 2017-04-04T11:22:32.157 回答