zoukankan      html  css  js  c++  java
  • 图解一个事务操作流程

    事务的操作流程

      undo段的组成:段头、回滚块

       事务ID

           select xid,xidusn,xidslot,xidsqn,ubablk,ubafil from v$transaction;

        例子:在开启事务前查看一下事务的信息,显示为空,证明现在是没有开启事务的

        

          向表中插入数据,开启一个事务

         一个事务开始以后,oracle首先会分配一个事务ID,这个ID是唯一的。

       事务表

           undo表空间的undo段的第一个数据块,存在一个事务表,根据数据块的大小,每一个表最多可以放47个事务。每一个回滚段最多可以47个事务

        在分配到ID后,在undo表空间中找一个undo段,在undo段头块中的事务表中写上自己的信息。一个undo段最多可以有47个活动事务。

          1.oracle尽量的一个事务使用一个回滚段

          2.事务太多而回滚段太少,那么可以多个是事务使用一个回滚段

               3.oracle尽量的将活动的事务均匀的放在回滚段上

       回滚块的段头块

           查看回滚段

            select * from v$rollname;

            

           查看回滚段的地址

            select header_block,header_file from dba_segments where segment_name='_SYSSMU13$';

          alter system dump undo header '_SYSSMU22$';//转储回滚段头 ----存储的名字是以当前会话的进程编号命名的

        查看当前会话的进程编号  

            alter system dump datafile 5 block 4308;//转储回滚段数据块

          事务槽:xid uba(undo block address)1-255个

            一个事务的开始要在两个位置写上事务信息

            1.回滚段的段头块里的事务表上写上事务信息

            2.在要修改的数据块上写上事务信息

            事务槽在具体的数据块中,事务表在回滚段的段头块中

          当一个事务的开启,会有三个地方存放回滚数据

        1.事务表:回滚段的段头块里有事务表 ---- 存储事务信息

        2.事务槽:修改的数据块的块头部事务槽  ---- 存储事务信息

        3.回滚块:存储修改前的数据

      事务开启,在undo表空间中,找一个相对空闲的undo段,然后在undo段的段头块中事务表寻找槽位,写上事务信息xid。同时oracle会给这个事务分配一个undo块,(uba)undo块的地址写到事务表中。

      修改数据:首先事务槽中找到槽位,将事务ID写上,这个事务ID即是一个编号,也是一个地址。之后进行修改数据。

      修改数据前,将修改前的数据写入分配的undo数据块中。同时事务槽中也有uba地址指向的是回滚块。

      剖析xid:既是事务编号,也是地址

          1.使用了哪个回滚段的回滚块 块地址

          2.使用段头块的事务表的哪一行

          3.第几次使用,覆盖次数,循环使用的次数

       以上三点可以唯一标志事务。

    oracle在rollback时,首先要找到事务,找到uba,之后再找最新的回滚块。

    事务的修改过程

        1.事务开始首先在undo表空间中相对空闲的undo段的段头块中的事务表里,找一行信息将自己的xid信息写上 ,同时在undo段中分配一个回滚块,将回滚块的地址写到事务表的事务槽中。 

        2.修改具体的数据块,将修改前的数据写入回滚块,同时将回滚块的地址写入事务表

        3.当一个回滚块不够用会分配其他的回滚块,这些回滚块之间是串联起来的,还要讲最新的回滚块地址写到事务表中

    在hui

          

      

      

       

  • 相关阅读:
    Security and Cryptography in Python
    Security and Cryptography in Python
    Security and Cryptography in Python
    Security and Cryptography in Python
    Security and Cryptography in Python
    Security and Cryptography in Python
    Security and Cryptography in Python
    微信小程序TodoList
    C语言88案例-找出数列中的最大值和最小值
    C语言88案例-使用指针的指针输出字符串
  • 原文地址:https://www.cnblogs.com/KAJIA1/p/12124288.html
Copyright © 2011-2022 走看看