当前位置:  数据库>oracle

Oracle undo 镜像数据探究

    来源: 互联网  发布时间:2017-05-25

    本文导语: 我们都知道,undo是为了保证一致性读的,也就是说你在对更改的数据但是没有提交,那么其他session是无法查看到你更改的内容的,如果对方 进行读取数据,依然是之前的数据,undo就是保存了数据的前镜像。看完我写的这篇文...

我们都知道,undo是为了保证一致性读的,也就是说你在对更改的数据但是没有提交,那么其他session是无法查看到你更改的内容的,如果对方 进行读取数据,依然是之前的数据,undo就是保存了数据的前镜像。看完我写的这篇文章之后,你就知道undo是怎么保存前镜像的以及它的内部机 制是什么。现在开始挖掘undo是怎么保存前镜像的。

推荐阅读:

[Oracle] 在没有备份的情况下undo损坏怎么办?

UNDO表空间失败的处理方法

undo表空间故障和ORA-01548处理

RAC下丢失undo表空间的恢复

UNDO表空间备份恢复

 1)首先更新一条数据,但是不进行commit如下:
SQL> col name for a50     
SQL> select obj#,name from t where rownum update t set name='rhys1' where obj#=46;

1 row updated.

SQL> update t set name='rhys2' where obj#=28;

1 row updated.

SQL> update t set name='rhys3' where obj#=15;

1 row updated.

SQL> update t set name='rhys4' where obj#=29;

1 row updated.

SQL> select xidusn,xidslot,ubafil,ubablk from v$transaction;

    XIDUSN    XIDSLOT    UBAFIL    UBABLK
---------- ---------- ---------- ----------
        12          7          8      1493

SQL> select * from v$rollname where usn=12;

      USN NAME
---------- ------------------------------
        12 _SYSSMU12_584745277$

SQL> select usn,status,curext from v$rollstat;

      USN STATUS              CUREXT
---------- --------------- ----------
        0 ONLINE                  5
        11 ONLINE                  4
        12 ONLINE                  3
        13 ONLINE                  2
        14 ONLINE                  3
        15 ONLINE                  2
        16 ONLINE                  2
        17 ONLINE                  14
        18 ONLINE                  4
        19 ONLINE                  3
        20 ONLINE                  2

11 rows selected.

SQL> select usn,status,curext,xacts from v$rollstat where xacts>0;

      USN STATUS              CUREXT      XACTS
---------- --------------- ---------- ----------
        12 ONLINE                  3          1

SQL> alter system dump undo header '_SYSSMU12_584745277$';

System altered.

SQL> alter system dump datafile 8 block 1493;

System altered.

SQL> col name for a80
SQL> col inst_id for 9999 
SQL> col value for a80
SQL> select * from v$diag_info;

INST_ID NAME                                                                            VALUE
------- -------------------------------------------------------------------------------- --------------------------------------------------------------------------------
      1 Diag Enabled                                                                    TRUE
      1 ADR Base                                                                        /opt/app/oracle
      1 ADR Home                                                                        /opt/app/oracle/diag/rdbms/rhys/RHYS
      1 Diag Trace                                                                      /opt/app/oracle/diag/rdbms/rhys/RHYS/trace
      1 Diag Alert                                                                      /opt/app/oracle/diag/rdbms/rhys/RHYS/alert
      1 Diag Incident                                                                    /opt/app/oracle/diag/rdbms/rhys/RHYS/incident
      1 Diag Cdump                                                                      /opt/app/oracle/diag/rdbms/rhys/RHYS/cdump
      1 Health Monitor                                                                  /opt/app/oracle/diag/rdbms/rhys/RHYS/hm
      1 Default Trace File                                                              /opt/app/oracle/diag/rdbms/rhys/RHYS/trace/RHYS_ora_5284.trc
      1 Active Problem Count                                                            1
      1 Active Incident Count                                                            1

11 rows selected.
2)从以上步骤中,我们可以获得的信息如下:
    该事务使用的undo段为12,其区为3
    undo段的名字为“_SYSSMU12_584745277$”
  该事务在undo的第7个槽位,数据文件号为8,使用的数据块为1493;
3)我们开始挖掘undo内部机制,首先转储undo header;(摘录信息如下)
********************************************************************************
Undo Segment:  _SYSSMU12_584745277$ (12)
********************************************************************************
  Extent Control Header
  -----------------------------------------------------------------
  Extent Header:: spare1: 0      spare2: 0      #extents: 4      #blocks: 271 
                  last map  0x00000000  #maps: 0      offset: 4080 
      Highwater::  0x020005d5  ext#: 3      blk#: 85    ext size: 128 
  #blocks in seg. hdr's freelists: 0   
  #blocks below: 0   
  mapblk  0x00000000  offset: 3   
                  Unlocked
    Map Header:: next  0x00000000  #extents: 4    obj#: 0      flag: 0x40000000
  Extent Map
  -----------------------------------------------------------------
  0x02000091  length: 7   
  0x02000168  length: 8   
  0x02000280  length: 128 
  0x02000580  length: 128 
 
 Retention Table
  -----------------------------------------------------------
 Extent Number:0  Commit Time: 1376748046
 Extent Number:1  Commit Time: 1376748092
 Extent Number:2  Commit Time: 1376804143
 Extent Number:3  Commit Time: 1376804143
 
  TRN CTL:: seq: 0x033a chd: 0x0020 ctl: 0x0001 inc: 0x00000000 nfb: 0x0000
            mgc: 0xb000 xts: 0x0068 flg: 0x0001 opt: 2147483646 (0x7ffffffe)
            uba: 0x020005d5.033a.24 scn: 0x0000.009b9276
Version: 0x01
  FREE BLOCK POOL::
    uba: 0x00000000.033a.23 ext: 0x3  spc: 0xc78 
    uba: 0x00000000.033a.27 ext: 0x3  spc: 0xb20 
    uba: 0x00000000.033a.08 ext: 0x3  spc: 0x1c66 
    uba: 0x00000000.033a.45 ext: 0x3  spc: 0x200 
    uba: 0x00000000.0000.00 ext: 0x0  spc: 0x0   
  TRN TBL::
 
  index  state cflags  wrap#    uel        scn            dba            parent-xid    nub    stmt_num    cmt
  ------------------------------------------------------------------------------------------------
  0x00    9    0x00  0x0059  0x0016  0x0000.009b9292  0x020005d3  0x0000.000.00000000  0x00000001  0x00000000  1376806203
  0x01    9    0x00  0x005a  0xffff  0x0000.009b94e5  0x020005d5  0x0000.000.00000000  0x00000001  0x00000000  1376806887
  0x02    9    0x00  0x005a  0x000a  0x0000.009b9461  0x020005d5  0x0000.000.00000000  0x00000001  0x00000000  1376806707
  0x03    9    0x00  0x0059  0x0017  0x0000.009b930e  0x020005d3  0x0000.000.00000000  0x00000001  0x00000000  1376806203
  0x04    9    0x00  0x0059  0x0005  0x0000.009b92cf  0x020005d3  0x0000.000.00000000  0x00000001  0x00000000  1376806203
  0x05    9    0x00  0x0059  0x0008  0x0000.009b92d8  0x020005d3  0x0000.000.00000000  0x00000001  0x00000000  1376806203
  0x06    9    0x00  0x0059  0x0009  0x0000.009b92aa  0x020005d3  0x0000.000.00000000  0x00000001  0x00000000  1376806203
  0x07  10    0x80  0x005a  0x0003  0x0000.00000000  0x020005d5  0x0000.000.00000000  0x00000001  0x00000000  0
  0x08    9    0x00  0x0059  0x001b  0x0000.009b92e1  0x020005d3  0x0000.000.00000000  0x00000001  0x00000000  1376806203
  0x09    9    0x00  0x0059  0x000c  0x0000.009b92b6  0x020005d3  0x0000.000.00000000  0x00000001  0x00000000  1376806203
  0x0a    9    0x00  0x0059  0x001f  0x0000.009b9479  0x020005d5  0x0000.000.00000000  0x00000001  0x00000000  1376806707
  0x0b    9    0x00  0x0059  0x001a  0x0000.009b92fc  0x020005d3  0x0000.000.00000000  0x00000001  0x00000000  1376806203
  0x0c    9    0x00  0x0059  0x0004  0x0000.009b92c3  0x020005d3  0x0000.000.00000000  0x00000001  0x00000000  1376806203

可以看到在事务表中0x07正是第七个slot,把dba转为2进制,在转为10进制,可以打出数据文件号为8,数据块为1493,这正是数据的前镜像。


    
 
 

您可能感兴趣的文章:

  • Oracle数据库应用程序性能优化探究
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Oracle 数据库(oracle Database)Select 多表关联查询方式
  • oracle数据库导出和oracle导入数据的二种方法(oracle导入导出数据)
  • oracle中如何把表中具有相同值列的多行数据合并成一行
  • Oracle 数据库开发工具 Oracle SQL Developer
  • Oracle数据库(Oracle Database)体系结构及基本组成介绍
  • 请问大家用oracle数据库, 用import oracle.*;下的东西么? 还是用标准库?
  • ORACLE数据库常用字段数据类型介绍
  • 怎样调出ORACLE数据库中的数据,该如何连接?
  • Oracle 数据库(oracle Database)性能调优技术详解
  • 用JDBC连接Oracle数据库时,如何向数据库中写日期型数据(格式)?谢了!
  • 关于JDBC连接Oracle数据库,是否必须有Oracle客户端
  • linux上安装oracle 数据库后,是否能写shell程序实现数据库的自动启动。
  • win2000+jbuilder6+oracle817编出的程序,在win2000下执行很好,在win98下却访问不了oracle数据库
  • jsp文件上传smartupload到oracle数据库中没有longblob的数据类型如何处理的?
  • 将Oracle 8i数据成功移植Oracle 10g的方法
  • Oracle收购TimesTen 提高数据库软件性能
  • 我从JSP页将数据插入到oracle数据库中,为何汉字插入后数据库中显示为乱码呢?
  • Oracle数据库恢复后心得
  • 紧急求救:对Oracle数据库中long 型数据进行模糊查询 如何查?
  • Linux下Oracle数据库,dbstart持续不动,数据库无法启动解决
  • 卸载oracle数据库
  • Oracle 12c发布简单介绍及官方下载地址
  • 在linux下安装oracle,如何设置让oracle自动启动!也就是让oracle那个服务自动启动,不是手动的
  • oracle 11g最新版官方下载地址
  • 请问su oracle 和su - oracle有什么不同?
  • 如何设置让Oracle SQL Developer显示的时间包含时分秒
  • 虚拟机装Oracle R12与Oracle10g
  • Oracle 10g和Oracle 11g网格技术介绍
  • Oracle EBS R12 支持 Oracle Database 11g
  • java开发知识 iis7站长之家
  • SCO unix下安装oracle,但没有光盘,请大家推荐一个oracle下载站点(unix版本的)。谢谢!!!!


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,