如果在特定分钟内未提交,则回滚 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;
我们在生产中遇到了问题,一些开发人员没有提交导致锁定的事务。如果事务在特定分钟数内完成但未提交,我有办法回滚事务吗?
您可以创建新的或更改当前的数据库配置文件以限制用户空闲时间:
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;