Oracle:如何确定是否有待处理的事务?

Eri*_*ler 31 oracle transactions

我正在寻找一种方法来确定当前会话中是否存在未提及的INSERT,UPDATE或DELETE语句.一种方法是使用当前sid检查v $ lock,但这需要对v $ lock的读访问权限,如果DBA不想授予它,这将是一个问题.任何其他方式(除了跟踪应用程序发出的所有数据库命令)?

Vin*_*rat 40

您可以检查您的会话是否有一行V$TRANSACTION(显然需要对此视图具有读取权限):

SQL> SELECT COUNT(*)
       FROM v$transaction t, v$session s, v$mystat m
      WHERE t.ses_addr = s.saddr
        AND s.sid = m.sid
        AND ROWNUM = 1;

  COUNT(*)
----------
         0

SQL> insert into a values (1);

1 row inserted

SQL> SELECT COUNT(*)
       FROM v$transaction t, v$session s, v$mystat m
      WHERE t.ses_addr = s.saddr
        AND s.sid = m.sid
        AND ROWNUM = 1;

  COUNT(*)
----------
         1

SQL> commit;

Commit complete

SQL> SELECT COUNT(*)
       FROM v$transaction t, v$session s, v$mystat m
      WHERE t.ses_addr = s.saddr
        AND s.sid = m.sid
        AND ROWNUM = 1;

  COUNT(*)
----------
         0
Run Code Online (Sandbox Code Playgroud)


Mat*_*son 32

这是我通常使用的查询,

select s.sid
      ,s.serial#
      ,s.username
      ,s.machine
      ,s.status
      ,s.lockwait
      ,t.used_ublk
      ,t.used_urec
      ,t.start_time
from v$transaction t
inner join v$session s on t.addr = s.taddr;
Run Code Online (Sandbox Code Playgroud)

  • 工作得很好,我还需要在使用ALTER SYSTEM KILL SESSION'sid,serial#'之后杀死不活动的事务; (2认同)

小智 9

使用下面的查询找出待处理的交易。

如果它返回一个值,则表示有待处理的事务。

这是查询:

select dbms_transaction.step_id from dual;

参考资料:
http : //www.acehints.com/2011/07/how-to-check-pending-transaction-in.html http://www.acehints.com/p/site-map.html


Rob*_*gin 8

SELECT * FROM V$TRANSACTION
WHERE STATUS='ACTIVE';
Run Code Online (Sandbox Code Playgroud)

请参阅:http: //forums.oracle.com/forums/thread.jspa?threadID = 691061

  • ORA-00942: 表或视图不存在 00942.00000 - “表或视图不存在”*原因:*操作:行:1 列:15 处出错 (2认同)