[20140920]oracle cluster index (11g)(2)

[20140920]oracle cluster index (11g)(补充).txt

--上个星期简单研究了一下cluster表.

--应用中除了堆表,很少使用cluser表,也就仅仅在生产系统使用IOT索引组织表.
--实际上系统表中许多都是cluster表.比如SYS.TAB$,SYS.COL$等都建立在cluster中.

--没事,简单研究一下其存储结构.

1.建立测试环境:
链接
http://blog.itpub.net/267265/viewspace-1266411/

SCOTT@test> @ver
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production

--create cluster cluster_dept (deptno NUMBER(2)) index ;
create cluster cluster_dept (deptno NUMBER(2)) ;
create index i_cluster_deptno on cluster cluster_dept;

create table dept1 cluster cluster_dept(deptno) as select * from dept;
create table emp1  cluster cluster_dept(deptno) as select * from emp;

SCOTT@test> alter system dump datafile 4 block 1983 ;
System altered.

2.以下是数据块转储:
Block header dump:  0x010007bf
Object id on Block? Y
seg/obj: 0x470c8  csc: 0x02.a63f479c  itc: 2  flg: E  typ: 1 - DATA
     brn: 0  bdba: 0x10007b8 ver: 0x01 opc: 0
     inc: 0  exflg: 0

Itl           Xid                  Uba         Flag  Lck        Scn/Fsc
0x01   0x0001.021.000044c0  0x00c005b5.1c5b.0d  C---    0  scn 0x0002.a63f4788
0x02   0x0005.008.0000725e  0x00c007a0.2518.1b  --U-    3  fsc 0x0000.a63f47a3
bdba: 0x010007bf
data_block_dump,data header at 0x2a9752e064
===============
tsiz: 0x1f98
hsiz: 0x24
pbl: 0x2a9752e064
     76543210
flag=--------
ntab=3
nrow=5
frre=-1
fsbo=0x24
fseo=0x1efd
avsp=0x1ed9
tosp=0x1ed9
0xe:pti[0]  nrow=1  offs=0
0x12:pti[1] nrow=1  offs=1
0x16:pti[2] nrow=3  offs=2
0x1a:pri[0] offs=0x1f82
0x1c:pri[1] offs=0x1f6a
0x1e:pri[2] offs=0x1f44
0x20:pri[3] offs=0x1f21
0x22:pri[4] offs=0x1efd
block_row_dump:
tab 0, row 0, @0x1f82
tl: 22 fb: K-H-FL-- lb: 0x0  cc: 1
curc: 4 comc: 4 pk: 0x010007bf.0 nk: 0x010007bf.0
col  0: [ 2]  c1 0b
tab 1, row 0, @0x1f6a
tl: 24 fb: -CH-FL-- lb: 0x0  cc: 2 cki: 0
col  0: [10]  41 43 43 4f 55 4e 54 49 4e 47
col  1: [ 8]  4e 45 57 20 59 4f 52 4b
tab 2, row 0, @0x1f44
tl: 38 fb: -CH-FL-- lb: 0x2  cc: 6 cki: 0
col  0: [ 3]  c2 4e 53
col  1: [ 5]  43 4c 41 52 4b
col  2: [ 7]  4d 41 4e 41 47 45 52
col  3: [ 3]  c2 4f 28
col  4: [ 7]  77 b5 06 09 01 01 01
col  5: [ 3]  c2 19 33
tab 2, row 1, @0x1f21
tl: 35 fb: -CH-FL-- lb: 0x2  cc: 6 cki: 0
col  0: [ 3]  c2 4f 28
col  1: [ 4]  4b 49 4e 47
col  2: [ 9]  50 52 45 53 49 44 45 4e 54
col  3: *NULL*
col  4: [ 7]  77 b5 0b 11 01 01 01
col  5: [ 2]  c2 33
tab 2, row 2, @0x1efd
tl: 36 fb: -CH-FL-- lb: 0x2  cc: 6 cki: 0
col  0: [ 3]  c2 50 23
col  1: [ 6]  4d 49 4c 4c 45 52
col  2: [ 5]  43 4c 45 52 4b
col  3: [ 3]  c2 4e 53
col  4: [ 7]  77 b6 01 17 01 01 01
col  5: [ 2]  c2 0e
end_of_block_dump
End dump data blocks tsn: 4 file#: 4 minblk 1983 maxblk 1983

--说明:
ntab=3 =>表示有3个表. nrow=5 有5条记录.

tab 0, row 0, @0x1f82
tl: 22 fb: K-H-FL-- lb: 0x0  cc: 1
curc: 4 comc: 4 pk: 0x010007bf.0 nk: 0x010007bf.0
col  0: [ 2]  c1 0b
--tab 0 实际上cluster主键.

SCOTT@test01p> select dump(10,16) from dual ;
DUMP(10,16)
-----------------
Typ=2 Len=2: c1,b

--tab 1 实际上dept1表.
tab 1, row 0, @0x1f6a
tl: 24 fb: -CH-FL-- lb: 0x0  cc: 2 cki: 0
col  0: [10]  41 43 43 4f 55 4e 54 49 4e 47
col  1: [ 8]  4e 45 57 20 59 4f 52 4b

SCOTT@test01p> select dump(dname,16) c50 ,dump(loc,16) c40 from dept1 where  deptno=10 ;
C50                                                C40
-------------------------------------------------- ----------------------------------------
Typ=1 Len=10: 41,43,43,4f,55,4e,54,49,4e,47        Typ=1 Len=8: 4e,45,57,20,59,4f,52,4b

--tab 2 实际上emp1表.
tab 2, row 0, @0x1f44
tl: 38 fb: -CH-FL-- lb: 0x2  cc: 6 cki: 0
col  0: [ 3]  c2 4e 53
col  1: [ 5]  43 4c 41 52 4b
col  2: [ 7]  4d 41 4e 41 47 45 52
col  3: [ 3]  c2 4f 28
col  4: [ 7]  77 b5 06 09 01 01 01
col  5: [ 3]  c2 19 33

SCOTT@test01p> select dump(empno,16) c30 ,dump(ename,16) c30 from emp1 where empno=7782;
C30                            C30
------------------------------ ------------------------------
Typ=2 Len=3: c2,4e,53          Typ=1 Len=5: 43,4c,41,52,4b

--可以发现信息是一致的.
--有点奇怪的是oracle如何知道tab1 对应的就是dept1.tab 2 对应的就是emp1呢?

--自己遇到一个小问题oracle如何知道tab1 对应的就是dept1.tab 2 对应的就是emp1呢? 我建立按照顺序
--先建立dept1,然后emp1,自己当然很清楚.但是oracle内部如何知道这些呢?

3.昨天查看tab视图时,无意中发现.
SCOTT@test01p> @desc tab
Name                    Null?    Type
----------------------- -------- ----------------
TNAME                   NOT NULL VARCHAR2(128)
TABTYPE                          VARCHAR2(7)
CLUSTERID                        NUMBER

--可以发现包含clusterid字段.

SCOTT@test01p> select * from tab where clusterid is not null order by 3;
TNAME                          TABTYPE  CLUSTERID
------------------------------ ------- ----------
DEPT1                          TABLE            1
EMP1                           TABLE            2
--clusterid的数字正好对上!

SCOTT@test01p> select text_vc from dba_views where owner='SYS' and view_name='TAB';
TEXT_VC
------------------------------------------------------------------------------------
select o.name,
      decode(o.type#, 2, 'TABLE', 3, 'CLUSTER',
             4, 'VIEW', 5, 'SYNONYM'), t.tab#
  from  sys.tab$ t, sys."_CURRENT_EDITION_OBJ" o
  where o.owner# = userenv('SCHEMAID')
  and o.type# >=2
  and o.type#   and o.linkname is null
  and o.obj# = t.obj# (+)

SELECT object_id, data_object_id, object_name
  FROM dba_objects
WHERE owner = USER AND object_name IN ('EMP1', 'DEPT1', 'DEPT')

OBJECT_ID DATA_OBJECT_ID OBJECT_NAME
---------- -------------- -------------
     96173          96170 EMP1
     96172          96170 DEPT1
     92285          92285 DEPT

SELECT a.obj#,
         a.dataobj#,
         b.object_name,
         a.bobj#,
         a.tab#,
         a.cols,
         a.clucols
    FROM sys.tab$ a, dba_objects b
   WHERE     a.obj# = b.object_id
         AND a.dataobj# = b.data_object_id
         AND b.owner = USER
         AND b.object_name IN ('EMP1', 'DEPT1', 'DEPT')
ORDER BY 1

      OBJ#   DATAOBJ# OBJECT_NAME                         BOBJ#       TAB#       COLS    CLUCOLS
---------- ---------- ------------------------------ ---------- ---------- ---------- ----------
     92285      92285 DEPT                                                          3
     96172      96170 DEPT1                               96170          1          3          1
     96173      96170 EMP1                                96170          2          8          1

--可以从这里看出一些线索,CLUCOLS=1表示cluster表,TAB#表示顺序.

时间: 2024-08-31 04:30:04

[20140920]oracle cluster index (11g)(2)的相关文章

[20140909]oracle cluster index (11g).txt

[20140909]oracle cluster index (11g).txt --应用中除了堆表,很少使用cluser表,也就仅仅在生产系统使用IOT索引组织表. --实际上系统表中许多都是cluster表.比如SYS.TAB$,SYS.COL$等都建立在cluster中. --没事,简单研究一下其存储结构. 1.建立测试环境: SCOTT@test> @ver BANNER ----------------------------------------------------------

oracle cluster的物理配置要求及限制

1.Oracle Clusterware supports up to 100 nodes in a cluster on configurations running Oracle Database 10grelease 2 (10.2) and later releases. 在10.2以后的版本开始 oracle的集群支持最多100g节点的集群. 2.网络配置: 每个节点最少2张网卡(one for a public network and one for a private networ

Oracle 的 Index

oracle 索引( Index )是常见的数据库对象,它的设置好坏.使用是否得当,极大地影响数据库应用程序和Database 的性能.虽然有许多资料讲索引的用法, DBA 和 Developer 们也经常与它打交道,但笔者发现,还是有不少的人对它存在误解,因此针对使用中的常见问题,讲三个问题.此文所有示例所用的数据库是 Oracle 8.1.7 OPS on HP N series ,示例全部是真实数据,读者不需要注意具体的数据大小,而应注意在使用不同的方法后,数据的比较.本文所讲基本都是陈词

Failed to upgrade Oracle Cluster Registry configuration(root.sh)

    最近在给客户基于Suse 11 sp3安装Oracle 10g RAC,在安装完clusterware执行/u01/app/crs/root.sh时收到错误提示,Failed to upgrade Oracle Cluster Registry configuration由于当前的环境使用了多路径,从Oracle的描述来看,这是一个Oracle Bug(4679769),如果你有相同的问题,请接着往下看. 一.故障现象suse11a:/u01/app/crs # /u01/app/crs

rac安装clusterware遇到:Failed to upgrade Oracle Cluster Registry configuration

在RAC安装中,有一步是要安装clusterware.当clusterware快要安装完的时候,会需要我们执行两个脚本, 关于rac安装执行脚本的含义,参考:http://blog.csdn.net/cymm_liu/article/details/11468657 当执行第二个脚本root.sh的时候报了如下错误:Failed to upgrade Oracle Cluster Registry configuration 关于这个错误,很简单的理解,就是OCR磁盘不能配置,具体什么原因造成的

Oracle 补丁全集 (Oracle 9i 10g 11g Path)

******************************************   Oracle 补丁全集 (Oracle 9i 10g 11g Path) ******************************************        俗话说,金无赤足,人无完人. Oracle 的补丁也是层出不穷.下面将其罗列,或许你就用到了.     从 Oracle 官方网站下载需要使用 Metalink 帐号,下面的下载链接可以直接使用迅雷来下载,对于没 Metalink 帐号

Redhat 5.4 RAC multipath 配置raw,运行root.sh 时报错Failed to upgrade Oracle Cluster Registry configuration

原文:http://blog.csdn.net/tianlesoftware/article/details/6039210 之前打算装Oracle 11gR2的RAC的. 后来因为资源不够,就改装oracle 10g了. raw 是用openfiler 配置 加 Multipath多路径配置的.               raw的配置参考我的Blog:               Linux 5.4 LVM RAW 设备配置的深入研究               http://blog.cs

甲骨文推出最新版Oracle TimesTen内存数据库11g第2版

甲骨文公司日前宣布推出最新版本的Oracle应用层内存数据库Oracle TimesTen 内存数据库11g 第2版(Oracle TimesTen In-Memory Database 11g Release 2). Oracle TimesTen内存数据库是一个功能全面的关系型内存数据库,旨在通过在应用层的运行,加速处理响应时间和关键任务型应用所需的高吞吐量. 通过实时内存数据管理,最新版本的产品可以提供适用于在线事务处理(OLTP)应用的高性能和强大可扩展性,并推出了新功能以支持分析应用.

Oracle融合中间件11g在SPECjEnterprise2010创造EjOPS世界纪录

甲骨文公司日前宣布,Oracle® WebLogic服务器11g,作为Oracle融合中间件11g的组件和Oracle数据库11g第2版运行于Sun Blade X6270 M2服务器模块上,共同创造了SPECjEnterprise2010业界标准基准测试1的世界纪录. 在采用同型号.相同数量的的英特尔至强处理器的条件下,集成和优化的Oracle解决方案所取得的基准测试结果,比在IBM http://www.aliyun.com/zixun/aggregation/13387.html">