zoukankan      html  css  js  c++  java
  • 如何获取数据块结构信息dump

    有个pub_department的表,索引为PK_PUB_DEPARTMENT。

    1.找到object_id

    select   object_id from dba_objects s  where   s.object_name='PK_PUB_DEPARTMENT';

     OBJECT_ID

    ----------

    64408

    2.进行转储

    alter   session  set  events  'immediate trace name treedump level 64408';

    ----- begin tree dump

    branch: 0x201262433629732 (0: nrow:2,level:1)

       leaf: 0x2012626 33629734 (-1: nrow: 292 rrow:292)

       leaf: 0x2012627 33629735 (0: nrow: 311 rrow:311)

    ----- end tree dump

    select dbms_utility.data_block_address_file(33629735) "file",

           dbms_utility.data_block_address_block(33629735) "block"

      from dual;

          file     block

    ---------- ----------

             8     75303

     alter system dump datafile block 75303;

    。。。。。。。。。。。。省略部分内容。。。。。。。。。。。。

     row#310[7921] flag:------, lock: 0, len=11, data:(6): 02 06 d6 25 00 0d

     col 0; len 2; (2): c35b

    可以看到索引的内部结构为值(c35b为900000)+rowid(0206d625000d此处只是文件号+块号+行数)

    select utl_raw.cast_to_number('c35b')  from dual;

    UTL_RAW.CAST_TO_NUMBER('C35B')

    ------------------------------

                            900000

     3.对rowid的解析

     select   rowid,dbms_rowid.rowid_object(rowid) object_id,--(AAAMim)AAFAAAAAMAAC数据对象号

         dbms_rowid.rowid_relative_fno(rowid) file_id,-- AAAMim(AAF)AAAAAMAAC 相对文件号

         dbms_rowid.rowid_block_number(rowid) block_id,-- AAAMimAAF(AAAAAM)AAC 在第几个块

         dbms_rowid.rowid_row_number(rowid) num -- AAAMimAAFAAAAAM(AAC)在block中的行数

         from pub_departmentwhere department_id =900000;    

    ROWID              OBJECT_ID    FILE_ID   BLOCK_ID        NUM

    ------------------ ---------- ---------- ---------- ----------

    AAAPuXAAIAABtYlAAN     64407         8    448037        13

     

     select rowid,dump(rowid,16)  dump_rowid    from pub_department  where department_id=900000;

    ROWID               DUMP_ROWID

    -------------------- --------------------------------------------------

    AAAPuXAAIAABtYlAAN   Typ=69 Len=10:0,0,fb,97,2,6,d6,25,0,d

      SELECT pkg_number_trans.f_hex_to_dec('fb97'FROM dual;--64407 ojbect_id

     --第5、6为的值除以64得到的商是相对文件号,余数是BLOCK号的高位,

    乘以65536后加上低两位才是BLOCK号。

    包pkg_number_trans来自于http://blog.csdn.net/guogang83/article/details/8002014

      SELECT pkg_number_trans.f_hex_to_dec('0206')  FROM dual;

      select  518/64   from dual;  --8  文件号

      select   mod(518,64)   from dual-    -6余数为block的高位

      SELECT pkg_number_trans.f_hex_to_dec('06d625')   FROM   dual;--448037  块号

      SELECT pkg_number_trans.f_hex_to_dec('0d')  FROM   dual;--13  行号

  • 相关阅读:
    Selenium2+python自动化30-引入unittest框架【转载】
    GitHub上整理的一些工具
    git使用教程2-更新github上代码【转载】
    git使用教程1-本地代码上传到github【转载】
    Selenium2+python自动化46-js解决click失效问题【转载】
    linux_常用命令_2
    linux_磁盘体系
    linux_定时任务
    yum错误,Cannot find a valid baseurl for repo: base 和 No more mirrors to try
    linux批量添加10个用户并将其随机密码和用户名写入文件
  • 原文地址:https://www.cnblogs.com/HondaHsu/p/3532513.html
Copyright © 2011-2022 走看看