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

时间:2009-02-03 09:16:17

标签: sql oracle transactions

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

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

谢谢

2 个答案:

答案 0 :(得分:23)

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

select dbms_transaction.local_transaction_id from dual;

这仅适用于会话内但不需要v $权限。 如果它返回非null,则表明您已启动事务。这通常意味着未提交的更改,但也有例外。如果您发出了保存点,更改了数据并回滚到保存点,则事务仍然“存在”。此外,使用数据库链接可以启动事务,甚至仅用于选择(或曾经用于)。

答案 1 :(得分:15)

SELECT  *
FROM    v$session v
WHERE   v.AUDSID = userenv('sessionid')
    AND v.TADDR IS NOT NULL