【问题标题】:How do I check whether a savepoint has been established before issuing a rollback?如何在发出回滚之前检查是否已建立保存点?
【发布时间】:2013-11-04 11:24:22
【问题描述】:

我有一个 Oracle 包,它循环遍历一系列过程并动态调用它们。在每个过程调用之前,会创建一个 SAVEPOINT,如果引发异常,它会发出回滚并记录问题。最近引入了一个错误,其中一个动态过程添加了一个 COMMIT,当触发它时,会使 SAVEPOINT 无效。如果相同的过程随后失败(引发异常)并且调用包的异常处理程序尝试回滚,则在异常处理程序块内部引发以下异常:

ORA-01086: savepoint 'EXAMPLE_SAVEPOINT' never established in this session or is invalid

现在,我可以将 另一个 异常处理程序放在我的异常处理程序中,以处理这个特定的异常,但如果我可以快速检查 SAVEPOINT 以查看它是否是在尝试发出回滚之前立即有效或无效。这可能吗?

【问题讨论】:

    标签: oracle transactions rollback savepoints


    【解决方案1】:

    我认为你将不得不忘记它;对不起。 2013 年 4 月,有人向 Tom Kyte 提出了这个问题,his response

    2) oracle 在哪里跟踪我们创建的保存点?SCN 是 正在为创建的保存点创建?

    我们说...

    ...

    2) 保存点在概念上只是指向您的撤消流的指针。 我们不需要 SCN,我们只需要知道回溯到多远 要回滚到的撤消流。

    Jonathan LewisBurleson 都不认为它们存储在数据字典中的任何位置。如果您使用Workspace Manager 或想使用Restore Points,则数据将分别存储在ALL_WM_MODIFIED_TABLESV$RESTORE_POINT 中,但这似乎有点过头了。

    【讨论】:

    • 我怀疑是这种情况,但找不到我正在寻找的确认信息,这是您提供的。谢谢你,先生。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-21
    • 1970-01-01
    相关资源
    最近更新 更多