【问题标题】:How can I tell if I have uncommitted work in an Oracle transaction?如何判断我在 Oracle 事务中是否有未提交的工作?
【发布时间】:2009-02-03 09:16:17
【问题描述】:

有没有办法判断我在事务中是否有未提交的工作(即 DML)?也许我可以查询一个数据字典视图?

欢迎在运行开放事务的会话内部和外部找到这一点的方法。

谢谢

【问题讨论】:

    标签: sql oracle transactions


    【解决方案1】:

    如果您无权访问 v$session,您可以使用

    select dbms_transaction.local_transaction_id from dual;
    

    这仅适用于会话内,但不需要 v$ 权限。 如果它返回一个非空值,你已经开始了一个事务。这通常意味着未提交的更改,但也有例外。如果您发布了一个保存点、更改了数据并回滚到该保存点,那么事务仍然“有效”。此外,使用数据库链接启动事务,即使只是为了选择(或者他们曾经这样做过)。

    【讨论】:

    • 这个。依赖于许多数据库用户不太可能拥有的增强权限的解决方案在 imo 中并不是好的解决方案。
    【解决方案2】:
    SELECT  *
    FROM    v$session v
    WHERE   v.AUDSID = userenv('sessionid')
        AND v.TADDR IS NOT NULL
    

    【讨论】:

    • :我如何查看其他会话中是否有任何未提交的工作。我在两个不同的会话中完成了更新,但我在每个会话中只看到一个记录。我期待两个记录会话。是否可以看到其他会话未提交的数据。
    • @GauravSoni:请将其作为问题发布。
    猜你喜欢
    • 2010-12-29
    • 2016-03-22
    • 1970-01-01
    • 1970-01-01
    • 2012-02-26
    • 2011-04-18
    • 2011-03-01
    • 2012-05-15
    • 2013-09-03
    相关资源
    最近更新 更多