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

cag*_*boy 12 sql oracle transactions

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

从运行开放事务的会话的内部和外部发现这一点的方法将是受欢迎的.

谢谢

Gar*_*ers 23

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

select dbms_transaction.local_transaction_id from dual;
Run Code Online (Sandbox Code Playgroud)

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


Qua*_*noi 15

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