oracle-transaction-查看回滚事务rollback transaction

简介:

查看事务使用的undo

USED_UBLK NUMBER Number of undo blocks used
USED_UREC NUMBER Number of undo records used
select /*+ rule */s.sid,
     r.name rr,
       nvl(s.username,'no transaction') us,
       s.osuser os,
       s.terminal te,
       t.used_urec rec,
       t.used_ublk blk
  from v$lock l, v$session s, v$rollname r,v$transaction t
 where l.sid = s.sid(+) and
       trunc(l.id1/65536) = r.usn and
       l.type = 'TX' and
       t.ses_addr = s.saddr and
       l.lmode = 6;
       

查看被锁对象

SELECT L.*,O.OBJECT_NAME,
      S.SID,
      S.SERIAL#,
      P.SPID,
      S.PROGRAM,
      S.USERNAME,
      S.MACHINE,
      S.PORT,
      S.LOGON_TIME,
      SQ.SQL_FULLTEXT,
      s.sql_id
 FROM V$LOCKED_OBJECT L,
      DBA_OBJECTS O,
      V$SESSION S,
      V$PROCESS P,
      V$SQL SQ
WHERE     L.OBJECT_ID = O.OBJECT_ID
      AND L.SESSION_ID = S.SID
      AND S.PADDR = P.ADDR
      AND S.SQL_ADDRESS = SQ.ADDRESS and O.object_name='tableA';       
      

预估大事务回滚完成时间

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;
/
目录
相关文章
|
2月前
|
存储 Oracle 关系型数据库
Oracle和MySQL有哪些区别?从基本特性、技术选型、字段类型、事务、语句等角度详细对比Oracle和MySQL
从基本特性、技术选型、字段类型、事务提交方式、SQL语句、分页方法等方面对比Oracle和MySQL的区别。
507 18
Oracle和MySQL有哪些区别?从基本特性、技术选型、字段类型、事务、语句等角度详细对比Oracle和MySQL
|
6月前
|
SQL Oracle 关系型数据库
【ORACLE】 事务 | 锁 | 约束 | 权限、角色与用户管理
【ORACLE】 事务 | 锁 | 约束 | 权限、角色与用户管理
72 1
|
6月前
|
SQL Oracle 安全
Oracle数据库中的事务和锁
【4月更文挑战第19天】Oracle数据库的事务和锁是确保数据完整性和并发控制的核心机制。事务遵循ACID原则,保证操作的原子性、一致性、隔离性和持久性。通过COMMIT或ROLLBACK来管理事务更改。锁包括共享锁(读)、排他锁(写)、行级锁和表级锁,用于控制并发访问。自动锁机制在DML操作时生效,防止数据冲突。事务和锁共同维护数据库的稳定和安全。
|
Oracle 关系型数据库
oracle基础|什么是事务控制|事务的ACID原则|什么是不可重复读、幻影读、脏读
oracle基础|什么是事务控制|事务的ACID原则|什么是不可重复读、幻影读、脏读
|
存储 SQL 运维
Oracle--活跃回滚段损坏故障恢复
当前数据库由活跃事务时活跃回滚段损坏无备份时处理过程。
288 0
|
SQL Oracle 关系型数据库
oracle提交后如何回滚
oracle提交后如何回滚
|
SQL 存储 Oracle
Oracle事务和锁机制
Oracle事务和锁机制
138 0
|
SQL 存储 Oracle
Oracle的视图,索引,约束,事务,数据库范式
🍅程序员小王的博客:程序员小王的博客 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 🍅 如有编辑错误联系作者,如果有比较好的文章欢迎分享给我,我会取其精华去其糟粕 🍅java自学的学习路线:java自学的学习路线
108 0
Oracle的视图,索引,约束,事务,数据库范式
|
6月前
|
SQL Oracle 关系型数据库
Oracle只读事务和PolarDB只读事务的差异
在交付PolarDB的过程中我们也遇到了只读事务造成的困扰,本文主要介绍Oracle只读事务和PolarDB只读事务的不同。
198 0
Oracle只读事务和PolarDB只读事务的差异
|
SQL 存储 缓存
Oracle数据中的序列、索引、视图、事务操作
Oracle数据中的序列、索引、视图、事务操作详解以及rowid 和 rownum的简单介绍(绝对干货!)
Oracle数据中的序列、索引、视图、事务操作