Script:when transaction will finish rollback

Posted dataart

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Script:when transaction will finish rollback相关的知识,希望对你有一定的参考价值。

-------------------------------------------------------------------------------
--
-- Script:	rolling_back.sql
-- Purpose:	to predict when transactions will finish rolling back
-- For:		9.0+
--
-- Copyright:	(c) Ixora Pty Ltd
-- Author:	Steve Adams
--
-------------------------------------------------------------------------------
@save_sqlplus_settings

set serveroutput on
set feedback off
prompt
prompt Looking for transactions that are rolling back ...
prompt

declare
  cursor tx is
    select
      s.username,
      t.xidusn,
      t.xidslot,
      t.xidsqn,
      x.ktuxesiz
    from
      sys.x$ktuxe  x,
      sys.v_$transaction  t,
      sys.v_$session  s
    where
      x.inst_id = userenv(‘Instance‘) and
      x.ktuxesta = ‘ACTIVE‘ and
      x.ktuxesiz > 1 and
      t.xidusn = x.ktuxeusn and
      t.xidslot = x.ktuxeslt and
      t.xidsqn = x.ktuxesqn and
      s.saddr = t.ses_addr;
  user_name  varchar2(30);
  xid_usn    number;
  xid_slot   number;
  xid_sqn    number;
  used_ublk1 number;
  used_ublk2 number;
begin
  open tx;
  loop
    fetch tx into user_name, xid_usn, xid_slot, xid_sqn, used_ublk1;
    exit when tx%notfound;
    if tx%rowcount = 1
    then
      sys.dbms_lock.sleep(10);
    end if;
    select
      sum(ktuxesiz)
    into
      used_ublk2
    from
      sys.x$ktuxe
    where
      inst_id = userenv(‘Instance‘) and
      ktuxeusn = xid_usn and
      ktuxeslt = xid_slot and
      ktuxesqn = xid_sqn and
      ktuxesta = ‘ACTIVE‘;
    if used_ublk2 < used_ublk1
    then
      sys.dbms_output.put_line(
        user_name ||
        ‘‘‘s transaction ‘ ||
        xid_usn  || ‘.‘ ||
        xid_slot || ‘.‘ ||
        xid_sqn  ||
        ‘ will finish rolling back at approximately ‘ ||
        to_char(
          sysdate + used_ublk2 / (used_ublk1 - used_ublk2) / 6 / 60 / 24,
          ‘HH24:MI:SS DD-MON-YYYY‘
        )
      );
    end if;
  end loop;
  if user_name is null
  then
    sys.dbms_output.put_line(‘No transactions appear to be rolling back.‘);
  end if;
end;
/

prompt
@restore_sqlplus_settings

以上是关于Script:when transaction will finish rollback的主要内容,如果未能解决你的问题,请参考以下文章

@Transactional 和 @Transactional(readOnly=true) 有啥区别

HDU 6201 transaction transaction transaction(拆点最长路)

transaction transaction transaction 最大费用最大流转化到SPFA最长路

Grails @Transactional 与 Spring @Transactional 注释之间的差异

@Transactional 方法调用另一个没有@Transactional 注释的方法?

HDU 6201 transaction transaction transaction DFS 图论