Откат Oracle Transction, если не совершено в течение определенных минут - PullRequest
0 голосов
/ 09 февраля 2019

У нас были проблемы на производстве, когда некоторые разработчики не совершали транзакции, что приводило к блокировкам.Можно ли откатить транзакцию, если она завершена и не совершена в течение определенного количества минут?

Ответы [ 2 ]

0 голосов
/ 11 февраля 2019

Вы можете создать 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;
0 голосов
/ 09 февраля 2019

Вы можете создать новый или изменить текущий профиль базы данных, чтобы ограничить время простоя пользователей:

Create Profile Idle_Time_Out limit idle_time 30;

, а затем назначить пользователя этому профилю:

Alter User some_user Profile Idle_Time_Out;

Вышепрофиль ограничит some_user 30 минутами бездействия, после чего их сеанс будет отключен, а все незафиксированные транзакции будут отменены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...