Oracle实验--如何通过undo块查看事务信息?

概述

今天主要分享一个最近做的实验,主要是为了通过undo块来查看Oracle事务信息,下面介绍下实验的整体过程。


1、开始一个事务

SQL>create table t1(id int,name varchar2(10));
SQL>insert into t1 values(1,'aa');
SQL>insert into t1 values(2,'ab');
SQL>insert into t1 values(3,'bb');
SQL>insert into t1 values(5,'cc');
SQL>insert into t1 values(4,'dd');
SQL>insert into t1 values(2,'ee');
SQL>insert into t1 values(2,'cc');
SQL> select * from t1;
SQL> update t1 set id=6 where name='cc';
--此事务不要commit或者rollback。

Oracle实验--如何通过undo块查看事务信息?


2、查看事务信息

a)查看session号:

SQL> select sid from v$mystat where rownum=1;

b)获取undo槽位等信息:

SQL> select xidusn,xidslot,xidsqn from V$TRANSACTION t,v$session s where s.sid=132 and s.taddr=t.addr;
SQL> select sid,trunc(id1/65536) usn,mod(id1,65536) slot,id2 wrap,lmode from v$lock where type='TX' and sid='132';

Oracle实验--如何通过undo块查看事务信息?

其中

Oracle实验--如何通过undo块查看事务信息?


3、根据查询到的信息找到undo块:

a)查看undo块头位置

SQL> clear columns
SQL> col name for a40
SQL> select * from v$rollname where usn=4;

Oracle实验--如何通过undo块查看事务信息?

b)dump undo块

oradebug setmypid
alter system dump undo header"_SYSSMU4_1152005954$";
oradebug tracefile_name

Oracle实验--如何通过undo块查看事务信息?

c)查看undo块头信息

$cat /home/oracle/app/oracle/diag/rdbms/nwppdb/nwppdb/trace/nwppdb_ora_15490.trc

Oracle实验--如何通过undo块查看事务信息?

Oracle实验--如何通过undo块查看事务信息?

Oracle实验--如何通过undo块查看事务信息?

可以看到找到了对应的事务

state为10说明为活动事务,warp#为0xdcea同v$lock查到的信息相同,换算成10进制为56554。

Oracle实验--如何通过undo块查看事务信息?

Oracle实验--如何通过undo块查看事务信息?


后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注一下~

Oracle实验--如何通过undo块查看事务信息?

相关推荐