`
winxpxt
  • 浏览: 26936 次
  • 性别: Icon_minigender_2
  • 来自: 厦门
社区版块
存档分类

分析索引文件中rowid以及伪列rowid

 
阅读更多
SELECT T1.owner,T1.object_name,T1.object_id
FROM DBA_OBJECTS T1
WHERE T1.object_name = 'PK_EMP'
AND T1.owner = 'SCOTT'
AND T1.object_type = 'INDEX';
 
OWNER     OBJECT_NAME     OBJECT_ID
SCOTT      PK_EMP                  73197
 
通过alter session set events  'immediate trace name  treedump level index_object_id'   --通过查询去获取index_object_id的值
 
ALTER SESSION SET EVENTS 'IMMEDIATE TRACE NAME TREEDUMP LEVEL 73197';
通过上面的events可以获取叶子节点的文件号跟块号
Trace file c:\app\oracle\diag\rdbms\orcl\orcl\trace\orcl_ora_11516.trc
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Windows NT Version V6.1 Service Pack 1
CPU                 : 4 - type 8664, 2 Physical Cores
Process Affinity    : 0x0x0000000000000000
Memory (Avail/Total): Ph:3835M/7915M, Ph+PgF:9762M/15830M
Instance name: orcl
Redo thread mounted by this instance: 1
Oracle process number: 22
Windows thread id: 11516, image: ORACLE.EXE (SHAD)


*** 2013-06-20 21:56:44.071
*** SESSION ID:(130.16) 2013-06-20 21:56:44.071
*** CLIENT ID:() 2013-06-20 21:56:44.071
*** SERVICE NAME:(orcl) 2013-06-20 21:56:44.071
*** MODULE NAME:(PL/SQL Developer) 2013-06-20 21:56:44.071
*** ACTION NAME:(SQL Window - New) 2013-06-20 21:56:44.071

----- begin tree dump
leaf: 0x100009b 16777371 (0: nrow: 14 rrow: 14)                ----数值是一样的,只是一个是2进制一个是16进制
----- end tree dump
 
select to_number('100009b' ,'xxxxxxx' from dual;
TO_NUMBER('100009B','XXXXXXX')
16777371
 
select dbms_utility.data_block_address_file(16777371 ) "文件号",dbms_utility.data_block_address_block( 16777371) "块号"
from dual;
文件号     块号
4             155
 
alter system dump datafile 4 block 155;
Trace file c:\app\oracle\diag\rdbms\orcl\orcl\trace\orcl_ora_11516.trc
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Windows NT Version V6.1 Service Pack 1
CPU                 : 4 - type 8664, 2 Physical Cores
Process Affinity    : 0x0x0000000000000000
Memory (Avail/Total): Ph:3835M/7915M, Ph+PgF:9762M/15830M
Instance name: orcl
Redo thread mounted by this instance: 1
Oracle process number: 22
Windows thread id: 11516, image: ORACLE.EXE (SHAD)


*** 2013-06-20 21:56:44.071
*** SESSION ID:(130.16) 2013-06-20 21:56:44.071
*** CLIENT ID:() 2013-06-20 21:56:44.071
*** SERVICE NAME:(orcl) 2013-06-20 21:56:44.071
*** MODULE NAME:(PL/SQL Developer) 2013-06-20 21:56:44.071
*** ACTION NAME:(SQL Window - New) 2013-06-20 21:56:44.071

----- begin tree dump
leaf: 0x100009b 16777371 (0: nrow: 14 rrow: 14)
----- end tree dump
Start dump data blocks tsn: 4 file#:4 minblk 155 maxblk 155

*** 2013-06-20 22:10:09.380
Block dump from cache:
Dump of buffer cache at level 4 for tsn=4, rdba=16777371
BH (0x000007FF9EF6C9C8) file#: 4 rdba: 0x0100009b (4/155) class: 1 ba: 0x000007FF9E0B4000
  set: 9 pool 3 bsz: 8192 bsi: 0 sflg: 2 pwc: 46,28
  dbwrid: 0 obj: 73197 objn: 73197 tsn: 4 afn: 4 hint: f
  hash: [0x000007FFC1ABC028,0x000007FFC1ABC028] lru: [0x000007FF9EF6CD10,0x000007FF9EF6C980]
  ckptq: [NULL] fileq: [NULL] objq: [0x000007FFBA1FA9C8,0x000007FFBA1FA9C8]
  st: XCURRENT md: NULL tch: 6
  flags:
  LRBA: [0x0.0.0] LSCN: [0x0.0] HSCN: [0xffff.ffffffff] HSUB: [65535]
  cr pin refcnt: 0 sh pin refcnt: 0
Block dump from disk:
buffer tsn: 4 rdba: 0x0100009b (4/155)
scn: 0x0000.000e6080 seq: 0x01 flg: 0x06 tail: 0x60800601
frmt: 0x02 chkval: 0xec89 type: 0x06=trans data
Hex dump of block: st=0, typ_found=1
Dump of memory from 0x000000001F118200 to 0x000000001F11A200
01F118200 0000A206 0100009B 000E6080 06010000  [.........`......]
01F118210 0000EC89 00000002 00011DED 000E6077  [............w`..]
01F118220 00000000 00320002 01000098 00000000  [......2.........]
01F118230 00000000 00000000 00000000 00000000  [................]
01F118240 00000000 001F0009 000002E0 00C001EC  [................]
01F118250 0049007E 0000200E 000E6080 00000000  [~.I.. ...`......]
01F118260 00000000 01800000 00000000 0040000E  [..............@.]
01F118270 1E7D1EBD 00000000 00000000 00000000  [..}.............]
01F118280 00000006 00001F64 1F4C1F58 1F341F40  [....d...X.L.@.4.]
01F118290 1F1C1F28 1F041F10 1EEC1EF8 1ED51EE0  [(...............]
01F1182A0 1EBD1EC9 00000000 00000000 00000000  [................]
01F1182B0 00000000 00000000 00000000 00000000  [................]
        Repeat 486 times
01F11A120 01020000 00970000 50C2030D 01020023  [...........P#...]
01F11A130 00970000 50C2030C 01020003 00970000  [.......P........]
01F11A140 50C2020B 00010200 0A009700 4D4FC203  [...P..........OM]
01F11A150 00010200 09009700 2D4FC203 00010200  [..........O-....]
01F11A160 08009700 284FC203 00010200 07009700  [......O(........]
01F11A170 594EC203 00010200 06009700 534EC203  [..NY..........NS]
01F11A180 00010200 05009700 634DC203 00010200  [..........Mc....]
01F11A190 04009700 374DC203 00010200 03009700  [......M7........]
01F11A1A0 434CC203 00010200 02009700 164CC203  [..LC..........L.]
01F11A1B0 00010200 01009700 644BC203 00010200  [..........Kd....]
01F11A1C0 00009700 464AC203 00000000 00000000  [......JF........]
01F11A1D0 00000000 00000000 00000000 00000000  [................]
        Repeat 1 times
01F11A1F0 00000000 00000000 00000000 60800601  [...............`]
Block header dump:  0x0100009b
Object id on Block? Y
seg/obj: 0x11ded  csc: 0x00.e6077  itc: 2  flg: E  typ: 2 - INDEX
     brn: 0  bdba: 0x1000098 ver: 0x01 opc: 0
     inc: 0  exflg: 0

Itl           Xid                  Uba         Flag  Lck        Scn/Fsc
0x01   0x0000.000.00000000  0x00000000.0000.00  ----    0  fsc 0x0000.00000000
0x02   0x0009.01f.000002e0  0x00c001ec.007e.49  --U-   14  fsc 0x0000.000e6080
Leaf block dump
===============
header address 521241188=0x1f118264
kdxcolev 0
KDXCOLEV Flags = - - -
kdxcolok 0
kdxcoopc 0x80: opcode=0: iot flags=--- is converted=Y
kdxconco 1
kdxcosdc 0
kdxconro 14
kdxcofbo 64=0x40
kdxcofeo 7869=0x1ebd
kdxcoavs 7805
kdxlespl 0
kdxlende 0
kdxlenxt 0=0x0
kdxleprv 0=0x0
kdxledsz 6
kdxlebksz 8036
row#0[8024] flag: ------, lock: 2, len=12, data:(6):  01 00 00 97 00 00
col 0; len 3; (3):  c2 4a 46
row#1[8012] flag: ------, lock: 2, len=12, data:(6):  01 00 00 97 00 01
col 0; len 3; (3):  c2 4b 64
row#2[8000] flag: ------, lock: 2, len=12, data:(6):  01 00 00 97 00 02
col 0; len 3; (3):  c2 4c 16
row#3[7988] flag: ------, lock: 2, len=12, data:(6):  01 00 00 97 00 03
col 0; len 3; (3):  c2 4c 43
row#4[7976] flag: ------, lock: 2, len=12, data:(6):  01 00 00 97 00 04
col 0; len 3; (3):  c2 4d 37
row#5[7964] flag: ------, lock: 2, len=12, data:(6):  01 00 00 97 00 05
col 0; len 3; (3):  c2 4d 63
row#6[7952] flag: ------, lock: 2, len=12, data:(6):  01 00 00 97 00 06
col 0; len 3; (3):  c2 4e 53
row#7[7940] flag: ------, lock: 2, len=12, data:(6):  01 00 00 97 00 07
col 0; len 3; (3):  c2 4e 59
row#8[7928] flag: ------, lock: 2, len=12, data:(6):  01 00 00 97 00 08
col 0; len 3; (3):  c2 4f 28
row#9[7916] flag: ------, lock: 2, len=12, data:(6):  01 00 00 97 00 09
col 0; len 3; (3):  c2 4f 2d
row#10[7904] flag: ------, lock: 2, len=12, data:(6):  01 00 00 97 00 0a
col 0; len 3; (3):  c2 4f 4d
row#11[7893] flag: ------, lock: 2, len=11, data:(6):  01 00 00 97 00 0b
col 0; len 2; (2):  c2 50
row#12[7881] flag: ------, lock: 2, len=12, data:(6):  01 00 00 97 00 0c
col 0; len 3; (3):  c2 50 03
row#13[7869] flag: ------, lock: 2, len=12, data:(6):  01 00 00 97 00 0d
col 0; len 3; (3):  c2 50 23
----- end of leaf block dump -----
End dump data blocks tsn: 4 file#: 4 minblk 155 maxblk 155
 
01 00 00 97 00 00   16进制----》2进制  00000001 00000000 00000000 10010111 00000000 00000000
 
转换为2进制后
前十位表示文件号                               00000001 00          ---------------------->4 
中间22位表示块号                               000000 00000000 10010111 ----------->151
最后16位表示行号                               00000000 00000000
上面分析的是index数据文件中存储的rowid,这是没有记录数据对象编号的rowid
 
下面看伪列rowid
数据对象编号        文件编号        块编号           行编号
OOOOOO             FFF            BBBBBB            RRR
AAAR3s                    AAE                AAAACX              AAA   --64进制
A-Z  0-25
a-z  26-51
0-9  52-61
+/   62-63
 
select t.rowid,dbms_rowid.rowid_object(t.rowid) object_id,dbms_rowid.rowid_relative_fno(t.rowid) file_id,
       dbms_rowid.rowid_block_number(t.rowid) block_id,dbms_rowid.rowid_row_number(t.rowid) row_id
from scott.emp t;
 
ROWID         OBJECT_ID     FILE_ID     BLOCK_ID     ROW_ID
AAAR3sAAEAAAACXAAA     73196     4     151     0
AAAR3sAAEAAAACXAAB     73196     4     151     1
AAAR3sAAEAAAACXAAC     73196     4     151     2
AAAR3sAAEAAAACXAAD     73196     4     151     3
AAAR3sAAEAAAACXAAE     73196     4     151     4
AAAR3sAAEAAAACXAAF     73196     4     151     5
AAAR3sAAEAAAACXAAG     73196     4     151     6
AAAR3sAAEAAAACXAAH     73196     4     151     7
AAAR3sAAEAAAACXAAI     73196     4     151     8
AAAR3sAAEAAAACXAAJ     73196     4     151     9
AAAR3sAAEAAAACXAAK     73196     4     151     10
AAAR3sAAEAAAACXAAL     73196     4     151     11
AAAR3sAAEAAAACXAAM     73196     4     151     12
AAAR3sAAEAAAACXAAN     73196     4     151     13
0
6
分享到:
评论

相关推荐

    SQL Server数据库中伪列及伪列的含义详解

    SQL Server中的伪列 下午看QQ群有人在讨论(非...Oracle中的表中有一个伪列的概念,就是在查询表的时候加上select rowid,* from Table,会查询出来伪列。 SQL Server中同样有这么一个伪列,在SQL Server中,这个伪列

    Oracle中的rowid

    ROWID它是一个伪列,它并不实际存在于表中。它是ORACLE在读取表中数据行时,根据每一行数据的物理地址信息编码而成的一个伪列。所以根据一行数据的ROWID能找到一行数据的物理地址信息。从而快速地定位到数据行。...

    Oracle DBA实战索引优化

    索引是一种可以选择创建的数据库...ROWID包含了存储列值的表行在磁盘上的物理位置,索引中记录了rowid,因此oracle 就可以根据索引中的rowid来判断记录是否是在同一个block 中,通过下面语句找到记录对应的block号。

    ORACLE重建索引总结

    1、索引重建是否有必要,一般看索引是否倾斜的严重,是否浪费了空间, 那应该如何才可以判断索引是否倾斜的严重,是否浪费了空间, 对索引进行结构分析(如下): SQL>Analyze index index_name validate ...

    MySQL中主键与rowid的使用陷阱总结

    大家在MySQL中我们可能听到过rowid的概念,但是却很难去测试实践,不可避免会有一些疑惑,比如: 如何感受到rowid的存在; rowid和主键有什么关联关系; 在主键的使用中存在哪些隐患; 如何来理解rowid的潜在...

    Oracle数据库管理员技术指南

    2.4.5 怎样从数据字典中提取索引定义 2.5 回顾 第3章 导出和导入技术 3.1 导出/导入特性概述 3.1.1 使用导出和导入 3.1.2 导出/导入的一般使用 3.1.3 导出方式 3.1.4 导入方式 3.1.5 创建必需的数据字典视图...

    索引Index的优化设计

    1、管理组织索引 索引可以大大加快数据库的查询速度,索引把表中的逻辑值映射到安全的RowID,因此索引能进行快速定位数据的物理地址。但是有些DBA发现,对一个大型表建立的索引,并不能改善数据查询速度,反而会影响...

    ORACLE数据库重建索引

    导致索引失效: 1、表上频繁发生update,delete操作; 2、表上发生了alter table ..move操作(move操作导致了rowid变化)。

    oracle使用索引与不使用索引的性能详析

    上级索引块包括下级索引块的索引数据,叶节点包括索引数据和确定行实际位置的rowid。 使用索引的目的: 加快查询速度 降低I/O操作 消除磁盘排序 何时使用索引: 查询返回的记录数 排序表<40% 非排序表 <...

    Oracle SQL建立有效索引减少回表

    回表:在数据中,当查询数据的时候,在索引中查找索引后,获得该行的rowid,根据rowid再查询表中数据,是回表。  在数据库中,数据的存储都是以块为单位的,称为数据块,表中每一行数据都有的地址标志ROWID。每次...

    oracle 数据库优化技术资料

    ORACLE的优化器共有3种: a. RULE (基于规则) b. COST (基于成本) c.... 设置缺省的优化器,可以通过对init.ora文件中OPTIMIZER... 通常索引提供了快速访问ROWID的方法,因此那些基于索引列的查询就可以得到性能上的提高.

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    简单来说是本身可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据运行新增、截取、更新、删除等操作。 常见的数据模型 1. 层次结构模型: 层次结构模型实质上是一种有根结点的定向有序树,IMS...

    facial-keypoints-detection.zip

    每个预测的关键点由像素索引空间中的(x,y)实值对指定。有15个关键点,它们代表面部的以下元素:left_eye_center,right_eye_center,left_eye_inner_corner,left_eye_outer_corner,right_eye_inner_corner,...

    Oracle课件.pdf

    2. Oracle中的伪列 2.1 ROWID 2.2 ROWNUM 3. Oracle单行函数 3.1字符函数 3.2数字函数 3.3日期函数 3.4转换函数 3.5其他常用函数 4. Oracle分析函数 4.1 分析函数介绍 4.2 分析函数种类和用法 4.3 行列...

    oracle_sql性能优化

    通常索引提供了快速访问ROWID的方法,因此那些基于索引列的查询就可以得到性能上的提高. 3. 共享SQL语句 为了不重复解析相同的SQL语句,在第一次解析之后, ORACLE将SQL语句存放在内存中.这块位于系统全局区域SGA...

    分区表管理.ppt

    关于ORACLE分区表的管理教程 使用适当的存储设置创建表 控制表占用的空间 分析表以检查完整性和移植 从数据字典中检索有关表的信息 在不同格式的 ROWID 之间转换

Global site tag (gtag.js) - Google Analytics