如果在特定分钟内未提交,则回滚 Oracle 事务

Rolling back Oracle Transction if not committed within certain minutes

我们在生产中遇到了问题,一些开发人员没有提交导致锁定的事务。如果事务在特定分钟数内完成但未提交,我有办法回滚事务吗?

您可以创建新的或更改当前的数据库配置文件以限制用户空闲时间:

Create Profile Idle_Time_Out limit idle_time 30;

然后将用户分配给该配置文件:

Alter User some_user Profile Idle_Time_Out;

上述配置文件将 some_user 不活动时间限制为 30 分钟,届时他们的会话将断开连接,任何未提交的事务都将回滚。

您可以手动创建 PROCEDURE kill_long_transaction 和 运行 程序,或者 运行 按计划创建此程序。 如果您限制配置文件中的非活动时间,所​​有非活动会话都将被标记为已终止。当开发人员编写代码或应用程序很少使用会话时,这可能会带来不便。

CREATE OR REPLACE PROCEDURE kill_long_transaction (time_transaction in number default 30 )
   IS
BEGIN

  FOR loop_kill IN (
 select
   s.sid,s.serial#
from
   v$session     s,
   v$transaction t
where
 s.taddr = t.addr
and  round((sysdate -t.start_date)*60*24 ,2) >time_transaction
)
  LOOP
      execute immediate 'alter system kill session '''||loop_kill.sid||','||loop_kill.serial#||''' ';

  END LOOP loop_kill;


END;