[20190227]简单探究tab$的bojb#字段.txt

--//上午做了删除tab$表,其对应索引i_tab1的恢复,我一直以为这个索引会很大,没有想到在我的测试环境仅仅139个键值.
--//查看/u01/app/oracle/product/11.2.0.4/dbhome_1/rdbms/admin/dcore.sql的内容tab$的定义如下.(我使用版本11.2.0.4)

1.环境:
SYS@book> @ ver1
PORT_STRING                    VERSION        BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx            11.2.0.4.0     Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

create table tab$                                             /* table table */
( obj#          number not null,                            /* object number */
  /* DO NOT CREATE INDEX ON DATAOBJ#  AS IT WILL BE UPDATED IN A SPACE
   * TRANSACTION DURING TRUNCATE */
  dataobj#      number,                          /* data layer object number */
  ts#           number not null,                        /* tablespace number */
  file#         number not null,               /* segment header file number */
  block#        number not null,              /* segment header block number */
  bobj#         number,                /* base object number (cluster / iot) */
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  ...
  spare1        number,                       /* used to store hakan_kqldtvc */
  spare2        number,         /* committed partition # used by drop column */
  spare3        number,                           /* summary sequence number */
  spare4        varchar2(1000),         /* committed RID used by drop column */
  spare5        varchar2(1000),      /* summary related information on table */
  spare6        date                                  /* flashback timestamp */
)
cluster c_obj#(obj#)
/

--//可以从后面的注解发现base object number (cluster / iot).也就是IOT表以及cluster table的base object number.

2.对于cluster table:

select obj# from sys.tab$ where bobj#=2
minus
select object_id from dba_objects where data_object_id=2;

no rows selected

select object_id from dba_objects where data_object_id=2
minus
select obj# from sys.tab$ where bobj#=2

OBJECT_ID
----------
         2

SYS@book> select * from sys.tab$ where obj#=2  ;
no rows selected

SCOTT@book> select obj#,dataobj#,bobj#,tab# from sys.tab$ a where bobj#=2 order by obj#;
      OBJ#   DATAOBJ#      BOBJ#       TAB#
---------- ---------- ---------- ----------
         4          2          2          1
         5          2          2          2
        19          2          2          3
        20          2          2          4
        21          2          2          5
        80          2          2          6
        83          2          2          7
        86          2          2          8
        88          2          2          9
        92          2          2         10
        95          2          2         11
       114          2          2         12
       174          2          2         13
       252          2          2         14
       253          2          2         15
       512          2          2         16
       517          2          2         17
17 rows selected.

--//可以发现tab$表中没有obj#=2的记录.也就是对于cluster table,tab$的bobj#字段仅仅记录各个子表的情况.并且等于dataobj#.

3.IOT表的情况呢?
--//建立IOT看看:

SCOTT@book> create table t_iot ( a varchar2(10),b varchar2(10),vc varchar2(1200), constraint t_iot_pk PRIMARY KEY(a)) ORGANIZATION INDEX;
Table created.

SCOTT@book> select object_id,data_object_id,object_name from dba_objects where object_name in ('T_IOT_PK','T_IOT') and owner=user;
 OBJECT_ID DATA_OBJECT_ID OBJECT_NAME
---------- -------------- --------------------
     91110                T_IOT
     91111          91111 T_IOT_PK

--//对于IOT表的本质实际上是一个索引,仅仅索引段有空间分配(DATA_OBJECT_ID非空).

SCOTT@book> select obj#,dataobj#,bobj# from sys.tab$ a where obj# in (91110,91111);
      OBJ#   DATAOBJ#      BOBJ#
---------- ---------- ----------
     91110
--//表IOT没有任何段分配.奇怪没有obj#=91111的段.没有插入记录吗?

SCOTT@book> insert into t_iot values ('1','a','a');
1 row created.

SCOTT@book> commit ;
Commit complete.

SCOTT@book> select obj#,dataobj#,bobj# from sys.tab$ a where obj# in (91110,91111);
      OBJ#   DATAOBJ#      BOBJ#
---------- ---------- ----------
     91110

--//当然也很好理解OBJECT_ID=91111是索引段,不会出现在表tab$里面.如何理解注解base object number (cluster / iot)呢?
--//也就是索引组织表(IOT)什么时候会出现表段呢?难道是OVERFLOW段吗?建立包含overflow段的iot表看看:

SCOTT@book> create table z_iot ( a varchar2(10),b varchar2(10),vc varchar2(1200), constraint z_iot_pk PRIMARY KEY(a)) ORGANIZATION INDEX OVERFLOW  TABLESPACE users;
Table created.

SCOTT@book> select object_id,data_object_id,object_name from dba_objects where object_name in ('Z_IOT_PK','Z_IOT') and owner=user;
 OBJECT_ID DATA_OBJECT_ID OBJECT_NAME
---------- -------------- --------------------
     91112                Z_IOT
     91114          91114 Z_IOT_PK
--//注意1个细节,object_id出现跳号.

SCOTT@book> select * from dba_objects where  object_id between 91112 and 91114;
OWNER  OBJECT_NAME          SUBOBJECT_  OBJECT_ID DATA_OBJECT_ID OBJECT_TYPE CREATED             LAST_DDL_TIME       TIMESTAMP           STATUS  T G S  NAMESPACE EDITION_NAME
------ -------------------- ---------- ---------- -------------- ----------- ------------------- ------------------- ------------------- ------- - - - ---------- ------------
SCOTT  Z_IOT_PK                             91114          91114 INDEX       2019-02-28 15:51:44 2019-02-28 15:51:44 2019-02-28:15:51:44 VALID   N N N          4
SCOTT  SYS_IOT_OVER_91112                   91113          91113 TABLE       2019-02-28 15:51:44 2019-02-28 15:51:44 2019-02-28:15:51:44 VALID   N Y N          1
SCOTT  Z_IOT                                91112                TABLE       2019-02-28 15:51:44 2019-02-28 15:51:44 2019-02-28:15:51:44 VALID   N N N          1
--//可以看出多了一个对象SYS_IOT_OVER_91112就是OVERFLOW段(类型是table),也就是这个溢出段按照表的形式保持信息,对于这些东西
--//很少探究.正常的业务表很少使用IOT,至少国内的情况如此.

SCOTT@book> select obj#,dataobj#,bobj# from sys.tab$ a where obj# between 91112 and 91114;
      OBJ#   DATAOBJ#      BOBJ#
---------- ---------- ----------
     91112                 91113
     91113      91113      91112

--//注意看它们之间的关系.
--//OBJ#=91112,对应是表Z_IOT,没有数据段分配,DATAOBJ#等于null,BOBJ#=91113,对应是SYS_IOT_OVER_91112(后面的数字与Z_IOT的object_id一致)
--//OBJ#=91113,对应的是SYS_IOT_OVER_91112.DATAOBJ#=91113.BOBJ#=91112,对应的是Z_IOT,这也就是注解讲base object number(cluster / iot).
--//有点绕,大家慢慢理解吧...

--//这也就是sys.tab$表为什么bobj#非空的记录很少的原因,这样前面的修复索引成为可能,相对容易的缘故.

[20190227]简单探究tab$的bojb#字段.txt的更多相关文章

  1. [20190328]简单探究sql语句相关mutexes.txt

    [20190328]简单探究sql语句相关mutexes.txt --//摘要:http://www.askmaclean.com/archives/understanding-oracle-mute ...

  2. [20190319]shared pool latch与library cache latch的简单探究.txt

    [20190319]shared pool latch与library cache latch的简单探究.txt --//昨天看Oracle DBA手记3:数据库性能优化与内部原理解析.pdf 电子书 ...

  3. [20181226]简单探究cluster table.txt

    [20181226]简单探究cluster table.txt --//简单探究cluster table.以前也做过,有点生疏了. 1.环境:SCOTT@book> @ ver1PORT_ST ...

  4. [20191125]探究等待事件的本源.txt

    [20191125]探究等待事件的本源.txt --//当工作中遇到oracle的性能问题时,查看awr报表提供很好的解决问题途径.但是有时候很容易想当然.--//比如以前我一看到 log file ...

  5. JAVA反序列化的简单探究

    JAVA反序列化的简单探究 本文主要是探究,在反序列化过程中是怎么调用到readObject.readResolve.readExternal方法的问题 新建一个需要被序列化的类ObjectA,写入r ...

  6. [20190423]简单测试latch nowilling等待模式.txt

    [20190423]简单测试latch nowilling等待模式.txt --//我对这个问题的理解就是如果参数willing=0,表示无法获取该latch,直接退出,再寻找类似的latch.--/ ...

  7. [20191119]探究ipcs命令输出2.txt

    [20191119]探究ipcs命令输出2.txt --//继续上午的测试:http://blog.itpub.net/267265/viewspace-2664758/=>[20191119] ...

  8. mysql控制台入门级--简单的创建表,字段。。。(用于网站测试)

    一:在Mysql控制台创建数据表 [sql]  use ceshi;  create table student  (      stuid int primary key auto_incremen ...

  9. 知识备忘phpcms 简单解析一 数据表字段

    PHPCMS V9帮助中心 数据结构 phpcms v9 数据... phpcms v9 数据... PHPSSO 数据库结... phpcms v9 数据表结构 在线版 PHPCMS V9 数据结构 ...

随机推荐

  1. 小程序this.setData

    data: { isChecked: [ { key: true },{ key: true },{ key: true} ]} 如上,如果我想动态修改isChecked里面指定某个下标的值怎么办? ...

  2. [深度学习工具]·极简安装Dlib人脸识别库

    [深度学习工具]·极简安装Dlib人脸识别库 Dlib介绍 Dlib是一个现代化的C ++工具箱,其中包含用于在C ++中创建复杂软件以解决实际问题的机器学习算法和工具.它广泛应用于工业界和学术界,包 ...

  3. Centos7.5基于MySQL5.7的 InnoDB Cluster 多节点高可用集群环境部署记录

    一.   MySQL InnoDB Cluster 介绍MySQL的高可用架构无论是社区还是官方,一直在技术上进行探索,这么多年提出了多种解决方案,比如MMM, MHA, NDB Cluster, G ...

  4. 关于kubernetes使用私有仓库一点说明

    一.概述 关于kubernetes使用私有docker image  registry的一些说明: 1.对于自己构建的项目镜像或一些不想暴露到外网的image需要使用自建的私有仓库,一般有两种选择:d ...

  5. php-fpm无法使用系统环境变量的解决方法

    为了防止任意环境变量到达php-fpm进程,默认默认php-fpm是会清空系统环境变量的, 解决办法 修改php-fpm配置的clear_env = no (默认是yes)

  6. 痞子衡嵌入式:SEGGER J-Link仿真器硬件版本变迁

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是J-Link仿真器版本变迁. 硬件版本 主控芯片 固件升级工具 V7 ARM7TDMI, 55MHz Atmel AT91SAM7S64 ...

  7. Python with/as和contextlib上下文管理使用说明

    with/as 使用open打开过文件的对with/as都已经非常熟悉,其实with/as是对try/finally的一种替代方案. 当某个对象支持一种称为"环境管理协议"的协议时 ...

  8. iOS面试准备之思维导图

    以思维导图的方式对iOS常见的面试题知识点进行梳理复习,文章xmind点这下载,文章图片太大查看不了也点这下载 你可以在公众号 五分钟学算法 获取数据结构与算法相关的内容,准备算法面试 公众号回复 g ...

  9. PAT之气死人不偿命的3n+1猜想

    卡拉兹(Callatz)猜想: 对任何一个自然数n,如果它是偶数,那么把它砍掉一半:如果它是奇数,那么把(3n+1)砍掉一半.这样一直反复砍下去,最后一定在某一步得到n=1.卡拉兹在1950年的世界数 ...

  10. c#调用腾讯云API的实例

    //获取时间戳 .net framework /* DateTime dt = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1 ...