本帖最后由 听海★蓝心梦 于 2012-3-10 08:33 编辑
之前看到论坛里很多大师都在研究ORACLE BLOCK的物理结构,对他们那些理论和研究方法很是佩服。
总觉得,作为一个DBA,对ORACLE的内部原理如果不了解,怎么都不能算是精通ORACLE。
于是,站在巨人的肩上,希望能从巨人的智慧中获取一些东西,除了知识,还有大师们孜孜不倦的求知精神和长时间如一日的坚定信念,我想这才是我们与他们之间的差别。
好了,废话少说,开贴:PDF已上传,欢迎大家下载。
一、Data Block 物理结构图
11.jpg (18.58 KB, 下载次数: 455)
下载附件
2012-3-8 08:16 上传
二、对block的dump过程1、dump blocktest@ORCL> create table test (a varchar(10));
Table created.
test@ORCL> insert into test values('a');
1 row created.
test@ORCL> commit;
Commit complete.
test@ORCL> set serveroutput on
test@ORCL> exec show_space('test');
Total Blocks............................8
Total Bytes.............................65536
Unused Blocks...........................0
Unused Bytes............................0
Last Used Ext FileId....................5
Last Used Ext BlockId................... 141344
Last Used Block.........................8
PL/SQL procedure successfully completed.
test@ORCL> alter system dump datafile 5 block 141347;
System altered.
test@ORCL> select * from v$tablespace;
TS# NAME
INC BIG FLA ENC
---------- ---------------------------------------- --- --- --- ---
0 SYSTEM
YES NOYES
1 SYSAUX
YES NOYES
2 UNDOTBS1
YES NOYES
4 USERS
YES NOYES
3 TEMP
NO NOYES
2、Trace 文件[oracle@localhost trace]$ more orcl_ora_3981.trc
Trace file /opt/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_3981.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
ORACLE_HOME = /opt/oracle/product/db_1
System name:Linux
Node name:localhost.localdomain
Release: 2.6.18-128.el5
Version: #1 SMP Wed Dec 17 11:41:38 EST 2008
Machine:x86_64
Instance name: orcl
Redo thread mounted by this instance: 1
Oracle process number: 30
Unix process pid: 3981, image: [url=mailto
[email protected]][email protected][/url] (TNS V1-V3)
*** 2012-03-07 13:38:14.885
*** SESSION ID
43.120) 2012-03-07 13:38:14.885
*** CLIENT ID
) 2012-03-07 13:38:14.885
*** SERVICE NAME
SYS$USERS) 2012-03-07 13:38:14.885
*** MODULE NAME
SQL*Plus) 2012-03-07 13:38:14.885
*** ACTION NAME
) 2012-03-07 13:38:14.885
Start dump data blocks tsn: 4 file#:5 minblk 141345 maxblk 141345
Block dump from cache:
Dump of buffer cache at level 4 for tsn=4, rdba=21112865
BH (0x67bd9dc8) file#: 5 rdba: 0x01422821 (5/141345) class: 9 ba: 0x67834000
set: 3 pool 3 bsz: 8192 bsi: 0 sflg: 1 pwc: 0,0
dbwrid: 0 obj: 81699 objn: 81699 tsn: 4 afn: 5 hint: f
hash: [0x6e55dc30,0x6e55dc30] lru: [0x677f6f00,0x67bf1ab0]
obj-flags: object_ckpt_list
ckptq: [0x673faf68,0x677eb608] fileq: [0x6a824028,0x677eb618] objq: [0x673fc708,0x67bf1ad8]
st: XCURRENT md: NULL tch: 1
flags: buffer_dirty redo_since_read
LRBA: [0xe.ebc2.0] LSCN: [0x0.148e704] HSCN: [0x0.148e704] HSUB: [1]
cr pin refcnt: 0 sh pin refcnt: 0
Block dump from disk:
buffer tsn: 4 rdba: 0x01422821 (5/141345)
scn: 0x0000.01371db0 seq: 0x02 flg: 0x04 tail: 0x1db02102
frmt: 0x02 chkval: 0x9311 type: 0x21=SECOND LEVEL BITMAP BLOCK
Hex dump of block: st=0, typ_found=1
Dump of memory from 0x00002AE0A5C58200 to 0x00002AE0A5C5A200
2AE0A5C58200 0000A221 01422821 01371DB0 04020000[!...!(B...7.....]
2AE0A5C58210 00009311 00000000 00000000 00000000[................]
2AE0A5C58220 00000000 00000000 00000000 00000000[................]
Repeat 1 times
2AE0A5C58240 00000000 00000000 00000000 01422822[............"(B.]
2AE0A5C58250 00000001 00000001 00000000 00000000[................]
2AE0A5C58260 00000000 00000000 00013C62 00000001[........b select header_file,header_block from dba_segments where segment_name='TEST';
HEADER_FILE HEADER_BLOCK
----------- ------------
5 141346
2、空表segment header dump数据Start dump data blocks tsn: 4 file#:5 minblk 141346 maxblk 141346
*** 2012-03-07 18:57:14.768
Block dump from cache:
Dump of buffer cache at level 4 for tsn=4, rdba=21112866
BH (0x66ff7078) file#: 5 rdba: 0x01422822 (5/141346) class: 4 ba: 0x66f46000
set: 3 pool 3 bsz: 8192 bsi: 0 sflg: 1 pwc: 0,0
dbwrid: 0 obj: 81700 objn: 81699 tsn: 4 afn: 5 hint: f
hash: [0x673e5da8,0x6e54e140] lru: [0x6a81cce0,0x67bf5020]
obj-flags: object_ckpt_list
ckptq: [0x673e2fd8,0x6a81cbf8] fileq: [0x6e5c6540,0x6e5c6540] objq: [0x6bbe99f0,0x6bbe99f0]
st: XCURRENT md: NULL tch: 1
flags: buffer_dirty redo_since_read
LRBA: [0xf.21ee.0] LSCN: [0x0.149208d] HSCN: [0x0.149208d] HSUB: [1]
cr pin refcnt: 0 sh pin refcnt: 0
BH (0x673e5cf8) file#: 5 rdba: 0x01422822 (5/141346) class: 4 ba: 0x67176000
set: 3 pool 3 bsz: 8192 bsi: 0 sflg: 1 pwc: 0,0
dbwrid: 0 obj: 81700 objn: -1 tsn: 4 afn: 5 hint: f
hash: [0x6a81a7e8,0x66ff7128] lru: [0x66ff9170,0x67bf8de0]
ckptq: [NULL] fileq: [NULL] objq: [NULL]
st: CR md: NULL tch: 1
cr: [scn: 0x0.1492089],[xid: 0x0.0.0],[uba: 0x0.0.0],[cls: 0x0.1492089],[sfl: 0x0],[lc: 0x0.0]
flags:
cr pin refcnt: 0 sh pin refcnt: 0
BH (0x6a81a738) file#: 5 rdba: 0x01422822 (5/141346) class: 4 ba: 0x6aaea000
set: 3 pool 3 bsz: 8192 bsi: 0 sflg: 1 pwc: 0,0
dbwrid: 0 obj: 81699 objn: -1 tsn: 4 afn: 5 hint: f
hash: [0x6e54e140,0x673e5da8] lru: [0x66ff79b0,0x6a809400]
lru-flags: on_auxiliary_list
ckptq: [NULL] fileq: [NULL] objq: [NULL]
st: CR md: NULL tch: 1
cr: [scn: 0x0.1492079],[xid: 0x0.0.0],[uba: 0x0.0.0],[cls: 0x0.1492079],[sfl: 0x0],[lc: 0x0.0]
flags:
cr pin refcnt: 0 sh pin refcnt: 0
Block dump from disk:
buffer tsn: 4 rdba: 0x01422822 (5/141346)
scn: 0x0000.01492080 seq: 0x01 flg: 0x04 tail: 0x20802301
frmt: 0x02 chkval: 0xdd36 type: 0x23=PAGETABLE SEGMENT HEADER
Hex dump of block: st=0, typ_found=1
Dump of memory from 0x00002AFF1E617200 to 0x00002AFF1E619200
......................................................................................................................................................
Extent Control Header
-----------------------------------------------------------------
Extent Header:: spare1: 0spare2: 0#extents: 1#blocks: 8
last map0x00000000#maps: 0offset: 2716
Highwater::0x01422823ext#: 0blk#: 3ext size: 8
#blocks in seg. hdr's freelists: 0
#blocks below: 0
mapblk0x00000000offset: 0
Disk Lock:: Locked by xid:0x0001.016.000048c7
--------------------------------------------------------
Low HighWater Mark :
Highwater::0x01422823ext#: 0blk#: 3ext size: 8
#blocks in seg. hdr's freelists: 0
#blocks below: 0
mapblk0x00000000offset: 0
Level 1 BMB for High HWM block: 0x01422820
Level 1 BMB for Low HWM block: 0x01422820
--------------------------------------------------------
Segment Type: 1 nl2: 1blksz: 8192 fbsz: 0
L2 Array start offset:0x00001434
First Level 3 BMB:0x00000000
L2 Hint for inserts:0x01422821
Last Level 1 BMB:0x01422820
Last Level II BMB:0x01422821
Last Level III BMB:0x00000000
Map Header:: next0x00000000#extents: 1obj#: 81700flag: 0x10000000
Inc # 0
Extent Map
-----------------------------------------------------------------
0x01422820length: 8
Auxillary Map
--------------------------------------------------------
Extent 0 :L1 dba:0x01422820 Data dba:0x01422823
--------------------------------------------------------
Second Level Bitmap block DBAs
--------------------------------------------------------
DBA 1: 0x01422821
End dump data blocks tsn: 4 file#: 5 minblk 141346 maxblk 141346
3、插入数据后segment header dump数据Start dump data blocks tsn: 4 file#:5 minblk 141346 maxblk 141346
*** 2012-03-07 19:07:53.269
Block dump from cache:
Dump of buffer cache at level 4 for tsn=4, rdba=21112866
BH (0x673db328) file#: 5 rdba: 0x01422822 (5/141346) class: 4 ba: 0x67058000
set: 3 pool 3 bsz: 8192 bsi: 0 sflg: 1 pwc: 0,0
dbwrid: 0 obj: 81700 objn: 81699 tsn: 4 afn: 5 hint: f
hash: [0x6e54e140,0x6e54e140] lru: [0x6a80fc50,0x673dbd90]
lru-flags: hot_buffer
ckptq: [NULL] fileq: [NULL] objq: [0x66fe2768,0x66ff92c8]
st: XCURRENT md: NULL tch: 3
flags: block_written_once redo_since_read
LRBA: [0x0.0.0] LSCN: [0x0.0] HSCN: [0xffff.ffffffff] HSUB: [1]
cr pin refcnt: 0 sh pin refcnt: 0
Block dump from disk:
buffer tsn: 4 rdba: 0x01422822 (5/141346)
scn: 0x0000.0149228b seq: 0x03 flg: 0x04 tail: 0x228b2303
frmt: 0x02 chkval: 0x95e7 type: 0x23=PAGETABLE SEGMENT HEADER
Hex dump of block: st=0, typ_found=1
Dump of memory from 0x00002AFF1E617200 to 0x00002AFF1E619200
………………………………………………………………………………
Extent Control Header
-----------------------------------------------------------------
Extent Header:: spare1: 0spare2: 0#extents: 1#blocks: 8
last map0x00000000#maps: 0offset: 2716
Highwater::0x01422828ext#: 0blk#: 8ext size: 8
#blocks in seg. hdr's freelists: 0
#blocks below: 5
mapblk0x00000000offset: 0
Unlocked
--------------------------------------------------------
Low HighWater Mark :
Highwater::0x01422828ext#: 0blk#: 8ext size: 8
#blocks in seg. hdr's freelists: 0
#blocks below: 5
mapblk0x00000000offset: 0
Level 1 BMB for High HWM block: 0x01422820
Level 1 BMB for Low HWM block: 0x01422820
--------------------------------------------------------
Segment Type: 1 nl2: 1blksz: 8192 fbsz: 0
L2 Array start offset:0x00001434
First Level 3 BMB:0x00000000
L2 Hint for inserts:0x01422821
Last Level 1 BMB:0x01422820
Last Level II BMB:0x01422821
Last Level III BMB:0x00000000
Map Header:: next0x00000000#extents: 1obj#: 81700flag: 0x10000000
Inc # 0
Extent Map
-----------------------------------------------------------------
0x01422820length: 8
Auxillary Map
--------------------------------------------------------
Extent 0 :L1 dba:0x01422820 Data dba:0x01422823
--------------------------------------------------------
Second Level Bitmap block DBAs
--------------------------------------------------------
DBA 1: 0x01422821
End dump data blocks tsn: 4 file#: 5 minblk 141346 maxblk 141346
4、segment header dump数据差异对于20字节的头部来说,有变动的只有scn,seq和tail字段:
scn: 0x0000.01492080 seq: 0x01 flg: 0x04 tail: 0x20802301
scn: 0x0000.0149228b seq: 0x03 flg: 0x04 tail: 0x228b2303
而对于Extent Control Header部分,变动的部分是高水线,空表情况下数据块都是unformat,高水线在segment header block后面的一个block,也就是首个extent block为141347,那么高水线在141347(0x01422823),而当插入几行数据后高水线推到了141352(0x01422828)。
1.)建立表后的高水线Highwater::0x01422823ext#: 0blk#: 3ext size: 8
2.) 建立表后L1块的dba range --------------------------------------------------------
DBA Ranges :
--------------------------------------------------------
0x01422820Length: 8Offset: 0
0:Metadata 1:Metadata 2:Metadata 3:unformatted
4:unformatted 5:unformatted 6:unformatted 7:unformatted
--------------------------------------------------------
3.) 插入数据后高水线Highwater::0x01422828ext#: 0blk#: 8ext size: 8
4.) 插入数据后L1块的dba range 一同变化的还有低高水线的位置
--------------------------------------------------------
DBA Ranges :
--------------------------------------------------------
0x01422820Length: 8Offset: 0
0:Metadata 1:Metadata 2:Metadata 3:75-100% free
4:75-100% free 5:75-100% free 6:75-100% free 7:75-100% free
----------------------------------------------------------
注:高水位线Highwater::0x01422828中,前两位:0x是十六进制标识,最后八位才是高水位线的block id。16进制的dba转化为10进制是:SELECT dbms_utility.data_block_address_block(to_number('01422823','xxxxxxxx')) FROM dual;
|