本文详细介绍了Oracle回滚段的UpdateSelectAlter操作
Update一条记录
updatetesttsetta=wheretb=
在v$transactionv$session视图中可查询到相关事物信息两个视图通过v$sessiontaddr=v$transactionaddr(Address of the transaction state object)相关联
查询出该事物号回滚段(xidusn)号事务槽(xidslot)中
selecttXIDUSNtXIDSLOTtXIDSQNtUBAFILtUBABLKtUBARECfromv$transactiont
XIDUSNXIDSLOTXIDSQNUBAFILUBABLKUBAREC
查询v$rollname视图获得回滚段名称usn列对应回滚段号
select*fromv$rollnamerwhererusn=
转储回滚段头信息
Altersystemdumpundoheader_SYSSMU$
indexstatecflagswrap#uelscndbaparentxidnubstmt_num
xbxxaxxadxexxx
转储前镜像信息
通过dba(data block address)字段得到该事务的前镜像数据块地址
xe 转化为二进制
该地址有位文件号和位数据块组成
得到该dba的文件号数据块号与回滚段中UBAFIL(Undo block address (UBA) filenum)UBABLK(UBA block number)相同
转储文件号数据块号中信息
altersystemdumpdatafileblock;
irb: xf 指回滚段中记录的最近的未提交变更的开始之处及最后一次更改之处
rci该参数代表的是同一事务中的关联修改回滚时根据这个数值找到下次回滚之处
col : [ ] c e记录的就是前置信息
由于test表中的A字段是索引所以回滚段中记录的test的回滚信息和索引的回滚信息
索引
*
*Rec#xfslt:xbobjn:(xf)objd:tblspc:(x)
*Layer:(Index)opc:rcixe
Undotype:RegularundoLastbuffersplit:No
TempObject:No
TablespaceUndo:No
rdba:x
*
indexundoforleafkeyoperations
KTBRedo
op:xver:x
op:Cuba:xeeec
Dumpkdilk:itl=kdxlkflg=xsdc=indexid=xcbblock=xce
purgeleafrow
key:():ceceb
表数据
*
*Rec#xdslt:xbobjn:(xf)objd:tblspc:(x)
*Layer:(Row)opc:rcixc
Undotype:RegularundoLastbuffersplit:No
TempObject:No
TablespaceUndo:No
rdba:x
*
KDOundorecord:
KTBRedo
op:xver:x
op:Cuba:xeeea
KDOOpcode:URProwdependenciesDisabled
xtype:XAbdba:xbhdba:xb
itli:ispac:maxfr:
tabn:slot:(x)flag:xclock:ckix:
ncol:nnew:size:
col:[]ce