如何判断我在 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 事务中是不是有未提交的工作?的主要内容,如果未能解决你的问题,请参考以下文章