设为首页 - 加入收藏 PHP编程网 - PHP站长网 (http://www.52php.cn)- 电商,百科,编程,业界,移动互联,5G,云计算,站长网!
热搜: google 20亿 原来
当前位置: 首页 > 站长百科 > 正文

Oracle UNDO块

发布时间:2021-05-14 16:25 所属栏目:[站长百科] 来源:网络整理
导读:?1)首先更新几条数据,但是不进行commit如下: [email?protected] prodselect * from scott.emp;EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO---------- ---------- --------- ---------- ------------------- ---------- ---------- ----------7369 SM

?1)首先更新几条数据,但是不进行commit如下:

[email?protected] prod>select * from scott.emp;

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- ------------------- ---------- ---------- ----------
7369 SMITH CLERK 7902 1980-12-17 00:00:00 800 20
7499 ALLEN SALESMAN 7698 1981-02-20 00:00:00 1600 300 30
7521 WARD SALESMAN 7698 1981-02-22 00:00:00 1250 500 30
7566 JONES MANAGER 7839 1981-04-02 00:00:00 2975 20
7654 MARTIN SALESMAN 7698 1981-09-28 00:00:00 1250 1400 30

[email?protected] prod>update scott.emp set sal=2000 where empno=‘7369‘;

1 row updated.

[email?protected] prod>update scott.emp set sal=2001 where empno=‘7499‘;

1 row updated.

[email?protected] prod>update scott.emp set sal=2002 where empno=‘7521‘;

1 row updated.

[email?protected] prod>update scott.emp set sal=2003 where empno=‘7566‘;

1 row updated.

?2)v$transaction列出活动事务相关信息

[email?protected] prod>select xidusn,xidslot,ubafil,ubablk from v$transaction;

    XIDUSN    XIDSLOT     UBAFIL     UBABLK
---------- ---------- ---------- ----------
        11         25          6         12

XIDUSN:Undo segment number
XIDSLOT:Slot number
UBAFIL:Undo block address(UBA) filenum
UBABLK:UBA block number
该事务使用的undo段号为11,该事务在undo的第25个槽位,数据文件号为6,使用的数据块为12;?

3)V$ROLLNAME列出所有在线回滚段。只能在数据库打开时访问。

[email?protected] prod>select * from v$rollname where usn=11;

       USN NAME
---------- ------------------------------
        11 _SYSSMU11_1796584641$?

NAME:Rollback segment name
undo段号为11,名字为?_SYSSMU11_1796584641$

4)V$ROLLSTAT包含回滚段信息。

[email?protected] prod>select usn,status,curext,xacts from v$rollstat;

       USN STATUS              CUREXT      XACTS
---------- --------------- ---------- ----------
         0 ONLINE                   1          0
        11 ONLINE                   0          1?

USN:Rollback segment number
STATUS:Rollback segment status:ONLINE/PENDING OFFLINE/OFFLINE/FULL
CUREXT:Current extent
XACTS:Number of active transactions
undo段号为6,在线,区号为3,1个活动事务

4)转储undo header

[email?protected] prod>alter system dump undo header ‘_SYSSMU11_1796584641$‘;

System altered.?

5)查看默认trace文件位置?

[email?protected] prod>col value for a50
[email?protected] prod>select * from v$diag_info;

   INST_ID NAME                                                             VALUE
---------- ---------------------------------------------------------------- --------------------------------------------------
         1 Diag Enabled                                                     TRUE
         1 ADR Base                                                         /u01
         1 ADR Home                                                         /u01/diag/rdbms/prod/prod
         1 Diag Trace                                                       /u01/diag/rdbms/prod/prod/trace
         1 Diag Alert                                                       /u01/diag/rdbms/prod/prod/alert
         1 Diag Incident                                                    /u01/diag/rdbms/prod/prod/incident
         1 Diag Cdump                                                       /u01/diag/rdbms/prod/prod/cdump
         1 Health Monitor                                                   /u01/diag/rdbms/prod/prod/hm
         1 Default Trace File                                               /u01/diag/rdbms/prod/prod/trace/prod_ora_2361.trc
         1 Active Problem Count                                             0
         1 Active Incident Count                                            0

11 rows selected.?

6)分析UDNO段头块的日志?

more /u01/diag/rdbms/prod/prod/trace/prod_ora_2361.trc?
********************************************************************************
Undo Segment:  _SYSSMU11_1796584641$ (11)
********************************************************************************
  Extent Control Header
  -----------------------------------------------------------------
  Extent Header:: spare1: 0      spare2: 0      #extents: 2      #blocks: 15    
                  last map  0x00000000  #maps: 0      offset: 4080  
      Highwater::  0x0180000e  ext#: 0      blk#: 5      ext size: 7     
  #blocks in seg. hdr‘s freelists: 0     
  #blocks below: 0     
  mapblk  0x00000000  offset: 0     
                   Unlocked
     Map Header:: next  0x00000000  #extents: 2    obj#: 0      flag: 0x40000000
  • #extents: 2??表示11号UNDO段有两个区
  • #blocks: 15? ?表示11号UNDO回滚段两个区中有15个UNDO BLOCK可用。(为什么不是16个UNDO BLOCK块呢,去掉一个UNDO段头块)
  • ext#: 0? ?? ? 表示这个事务发生在第1个区(从0开始)
  • blk#: 5 ?? ? 表示这个事务发生在第1个区的第5个块上。
  • ext size: 7? ???表示1个区上有7个UNDO BLOCK可用

7)通过dba_extents视图查出一共有两个区,共16个块?

[email?protected] prod>select extent_id,file_id,block_id,blocks,bytes from dba_extents where segment_name=‘_SYSSMU11_1796584641$‘;

 EXTENT_ID    FILE_ID   BLOCK_ID     BLOCKS      BYTES
---------- ---------- ---------- ---------- ----------
         0          6          8          8      65536
         1          6         16          8      65536

8)通过dba_segments视图查出UNDO段头块,即6号文件的8号块是UNDO段头块(所以#blocks:15)

[email?protected] prod>select header_file,header_block from dba_segments where segment_name=‘_SYSSMU11_1796584641$‘; 

HEADER_FILE HEADER_BLOCK
----------- ------------
          6            8

?9)继续向下

  Extent Map
  -----------------------------------------------------------------
   0x01800009  length: 7     
   0x01800010  length: 8     

?区位图:第一个区是undo块的地址为0x0180009开始的前7个块+头块;第二个区是0x0180010开始的8-16块。

10)继续向下

 Retention Table 
  -----------------------------------------------------------
 Extent Number:0  Commit Time: 1552092157
 Extent Number:1  Commit Time: 1552092157?

区的提交时间戳,是从1970年1月1号零时开始计数(以秒为单位记录)

11)继续向下

  TRN CTL:: seq: 0x0003 chd: 0x0020 ctl: 0x0000 inc: 0x00000000 nfb: 0x0001
            mgc: 0xb000 xts: 0x0068 flg: 0x0001 opt: 2147483646 (0x7ffffffe)
            uba: 0x0180000e.0003.0c scn: 0x0000.00104372?

事务控制:

?seq: 0x0003? 表示此事务修改前的值所在的UNDOBLOCK块被覆盖了3次,与第三行的uba:0x0180000f.0003.08中的0003对应。

?chd:0x0020? 表示发生一个新的事务,此时会在下面的TRNTBL::(事务表)的index=0x00020槽中放入新事务信息,即事务表的链头或叫入口。

?ctl: 0x0000? 表示事务表的链尾(实际上大家可以去TRN TBL::看index=0x0000,它对应的SCN=0x0000.00104485是本事务表中最大的SCN,即此事务槽最后才会被覆盖)

?nfb: 0x0001??表示UNDO块在空闲池的空闲块数,0x0000表示池中没有空闲UNDO块了,即FREE BLOCKPOOL::没空闲的块了。

?flg: 0x0001??表示该块的用途,1=KTUUNDO HEADER(2=KTU UNDO BLOCK等等)

?uba:?0x0180000e.0003.0c 表示新事务的第一条UNDO记录(由三部分组成undo块的地址、UNDO块被重用的次数、在UNDO块的第几条记录)。

  • UNDO块的地址:0x0180000e即6号文件的14号块(把0x0180000e 转为2进制,前10为文件号,后22位为块号,转换为10进制可得数据文件号为6,数据块为14)。
  • UNDO块被重用的次数: 0003 即UNDO块被覆盖了3次? ?? ?
  • 在UNDO块的第几条记录 18 即在UNDO块的第12条
  • scn: 0x0000.00104372? 表示11号UNDO段头块中最小的提交的SCN。实际上这个SCN就是事务表中最小的SCN所对应的事务槽上的SCN?

12)继续向下

  FREE BLOCK POOL::
    uba: 0x0180000e.0003.0e ext: 0x0  spc: 0x183a  
    uba: 0x00000000.0003.19 ext: 0x0  spc: 0x10c0  
    uba: 0x00000000.0001.0e ext: 0x0  spc: 0x18a2  
    uba: 0x00000000.0000.00 ext: 0x0  spc: 0x0     
    uba: 0x00000000.0000.00 ext: 0x0  spc: 0x0?

UNDO块的空闲池,当事务做了提交会把此事务所在的UNDO块加入空闲池中。

【免责声明】本站内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

推荐文章
热点阅读