日期:2014-05-16 浏览次数:20422 次
用户所执行 DML (即执行事务)操作在 Oracle 内部按如下顺序进行。
1.相应事务分配回滚段( undo segment ), 这时优先使用当前联机状态的回滚段中一个。回滚段的选择是随机的,若另外的事务正在使用则重试 3 次, 在此过程中失败, 则将未联机的回滚段联机后使用。 如果此过程也失败, 就会创建新的回滚段, 通过这个过程也没有分配到回滚段, 则使用 Oracle 8i 中使用的回滚段( rollback segment ) 算法。即,使用另外事务使用中的回滚段中用量最少的回滚段。 如果服务器进程在获得回滚段时没有适当的联机状态的回滚段, 则等待 enq:US-contention 事件, 直到有适当的联机状态的回滚段为止。
?2.分配回滚段后,在回滚段头上创建事务表 Slot ( transaction table slot )。
3.创建事务表后会生成 TXID ( Transaction ID ),再将此 TXID 分配给当前事务。 TXID 通过 V$TRANSACTION 视图的 XIDUSN 、 XIDSLOT 、 XIDSQN 表现, 这个值指向分给事务的回滚段头上存在的事务表的准确位置。事务必须在分配撤销区域后得到 TXID 。
4.事务对象的 数据块载入到高速缓冲区,在块头的 ITL ( Interested Transaction List )上登记事务条目( transaction entry )。如果 ITL 上没有登记条目所需的空间,直到有空间为止,一直等待 enq : TX-allocate ITL entry 事件。
5.将需要修改的块的修改信息存储到 PGA , 存储名为 Change V