我们已经对生产,其中一些开发商还没有犯下这就造成了锁的交易问题。有没有办法对我来说回滚事务,如果它完整,且无特定的分钟数内犯?
你可以创建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;
您可以创建一个新的或改变当前的数据库配置文件来限制用户的空闲时间:
Create Profile Idle_Time_Out limit idle_time 30;
然后用户分配到该配置文件:
Alter User some_user Profile Idle_Time_Out;
以上个人资料将限制some_user到闲置30分钟,此时他们的会话将被中断任何未提交的事务将被回滚。