Oracle undo镜像数据探究(三)
7 icl: 0x0 flg: 0x0000
貌似有点乱,整理一下思路。
当执行个update语句的时候,首先在segment上分配段分配slot,然后再数据块头部记录itl信息指向undo record,undo record记录了数据的前镜像,
并且从最后一个记录开始到第一个执行update语句,这是一个倒叙研究查看过程,随后在数据块itl中存储锁信息,指定该数据块状态。然后再修改数据。
对了,现在看一下数据块锁的信息:
eg:
SQL> SELECT * FROM V$MYSTAT WHERE ROWNUM<2;
SID STATISTIC# VALUE
---------- ---------- ----------
1 0 0
SQL>
SQL> select a.sid,a.lmode,a.id1,b.type,b.name,b.description from v$lock a,v$lock_type b where a.sid=1 and a.type=b.type;
SID LMODE ID1 TYPE NAME DESCRIPTION
---------- ---------- ---------- ---------------------------------------------------------------- ---------------------------------------------------------------- --------------------------------------------------------------------------------
1 4 100 AE Edition Lock Prevent Dropping an edition in use
1 3 73229 TM DML Synchronizes accesses to an object
1 6 786439 TX Transaction Lock held by a transaction to allow other transactions to wait for it
SQL>
在数据块中的itl中锁的状态为3.代表Prevent Dropping an edition in use。