如果在某些分钟内未提交,则回滚Oracle Transction

时间:2019-02-08 23:12:36

标签: oracle locking rollback

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

2 个答案:

答案 0 :(得分:4)

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

Create Profile Idle_Time_Out limit idle_time 30;

,然后将用户分配给该个人资料:

Alter User some_user Profile Idle_Time_Out;

上面的配置文件会将some_user限制为不活动30分钟,此时他们的会话将被断开,所有未提交的事务将被回滚。

答案 1 :(得分:0)

您可以创建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;