如何判断我在 Oracle 事务中是不是有未提交的工作?

Posted

技术标签:

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

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

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

谢谢

【问题讨论】:

【参考方案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:请将其作为问题发布。

以上是关于如何判断我在 Oracle 事务中是不是有未提交的工作?的主要内容,如果未能解决你的问题,请参考以下文章

oracle分批查询数据提交

oracle 提交事务后为啥不能撤销或回滚,不是有撤销段吗

关于oracle 触发器,与事务回滚

NHibernate Oracle - 事务提交问题

如何将组事务提交到 oracle 中的存储过程

Oracle 中的事务