
承接上篇文章,一开始DUMP出文件的时候,特别晕头转向,看别人的描述,做实验总结了些平易近人的说法。
用类比的手法让我门一起探究。
本文可以结合上衣篇文章来看。帮助理解生疏的概念。
一个tablespace对应一个酒厂,酒厂有很多酒仓,酒仓就代表了一个Oracle block

数据块头:
Block dump from disk:
buffer tsn: 6 rdba: 0x01400084 (5/132)
scn: 0x0000.000edf37 seq: 0x01 flg: 0x06 tail: 0xdf370601
frmt: 0x02 chkval: 0x67a0 type: 0x06=trans data
buffer tsn: 6 rdba: 0x01400087(5/132):
首先我们进入酒厂,酒厂太大了搞得晕头转向。一大片酒厂的一种酒仓的位置,怎么找到?
去酒厂门口放置一个地图,通过地图来定位酒仓的位置。酒厂代表了一个tablespace,如何来找到blcok ,就是通过这个地图位置。
地图可能有不同的方式来解读,其中(5/132))表示该块为5号数据文件第132个块,用4个字节32位来表示,前10位为相对数据文件号,后22位为块号。
scn: 0x0000.000edf37
酒仓这批酒什么时候放置到此位置的,注意这个放置时间,指的是这批酒最后的放置时间。比如操作人员动了一瓶酒,记录这个时间代表了最后一批酒的查看时间。
seq: 0x01
酒仓中的酒需要检查或者试喝,维护的次数。
flg: 0x06
酒仓的状态:
0x01代表New block即新建块;
0x02代表Delayed Logging Change advanced SCN即 数据块延迟清洗推进scn和seq;
0x04代表Check value即设置校验和;
0x08代表Temporary block即临时块。
0x01 新建的酒仓
0x02 酒仓门口有个登记表(ITL 事务槽),存在登记表的存放日期和实际上瓶身的生产日期不相同.
但是这个登记表只是一张纸随用随扔(临时空间)。 只有要扔纸的时候(用完了ITL 事务槽清空)或者即将要扔纸(’–U-’=>‘C—’)的时候才会更新纸上信息.
实验参见上篇文章:十、详细研究flg标志:
0x04 每次搬运酒到酒仓,是否对酒进行真伪,质量校验.(DB_BLOCK_CHECKSUM=TRUE)
后续可以继续探究。
0x08 临时的酒仓(临时表)
tail: 0xdf370601
tail check的组成:SCN Base的低2个字节+type+seq。即tail:0xdf370601=32d3+06+01
数据块的最后四字节 tail: 0xdf370601 = scnBASE+flg+seq, 如果不相等会报块损坏!!!
维护人员在维护得时候查看是否存在坏酒,假酒。
frmt: 0x02
frmt: 0x02 代表块格式。01表示Oracle 7,02表示Oracle 8+
酒仓存酒方式,不同的标准
chkval: 0x67a0
有些酒存在售出,查看,当搬运到其他位置(一个方便查看的位置),
在搬运回来的时候:检查是否存在坏酒,维护人员翻开酒仓能看到是否存在坏酒(flg:0x04)
type: 0x06
存仓的什么酒:酱香型酒仓,酱香型?
事务槽ITL
Block header dump: 0x01400084
Object id on Block? Y
seg/obj: 0x1553e csc: 0x00.edf34 itc: 2 flg: E typ: 1 - DATA
brn: 0 bdba: 0x1400080 ver: 0x01 opc: 0
inc: 0 exflg: 0
Itl Xid Uba Flag Lck Scn/Fsc
0x01 0x0005.021.0000036b 0x00c00ddb.00d0.25 --U- 1 fsc 0x0000.000edf37
0x02 0x0000.000.00000000 0x00000000.0000.00 ---- 0 fsc 0x0000.00000000
bdba: 0x01400084
data_block_dump,data header at 0x7fe7b05c2a64
seg/obj: 0x1553e --16进制转成10进制87358
酒仓上面的一个级别如:白酒大酒仓,红酒大酒仓,黄酒大酒仓…
csc: 0x00.edf34 --cleanoutSCN,块清除时的SCN
只有要扔纸的时时间(用完了ITL 事务槽清空)或者即将要扔纸(’–U-’=>‘C—’)的时候才会更新纸上信息.(FLAG:0x02),
itc: 2 --ITL槽的数量
纸上记录的信息多少值
flg: E flg: E --指用的是ASSM,如果是O表示用的是free list
纸的类型,(段的管理实际上是对空块的管理)
typ: 1 - DATA --事务型的数据块(并且:数据块头的type:0x06),存放表和索引数据。
纸的种类
Itl Xid Uba Flag Lck Scn/Fsc
0x01 0x0005.021.0000036b 0x00c00ddb.00d0.25 --U- 1 fsc 0x0000.000edf37
0x02 0x0000.000.00000000 0x00000000.0000.00 ---- 0 fsc 0x0000.00000000
Itl
0x01
纸上行的编号
Xid
0x0005.021.0000036b
维护酒唯一编号
Uba
0x00c00ddb.00d0.25
每次维护,酒庄的某个地方会记录在维护人员做了什么操作,之前酒是什么样子.此操作的唯一编号。
Flag
–U-
维护人员做事情记录在纸上的状态
Scn/Fsc
0x0000.000edf37
Fsc 如果没有做扔纸操作时候的,否则该字段保存空闲预支字节数(为维护酒操作,酒厂的空间先空间)
SCN 维护人员操作时间
数据头信息(表目录+行目录)
tsiz: 0x1f98
hsiz: 0x14
pbl: 0x7fe7b05c2a64
76543210
flag=--------
ntab=1
nrow=1
frre=-1
fsbo=0x14
fseo=0x1f8c
avsp=0x1f78
tosp=0x1f78
0xe:pti[0] nrow=1 offs=0
0x12:pri[0] offs=0x1f8c
block_row_dump:
tab 0, row 0, @0x1f8c
tsiz: 0x1f98
数据区的大小
酒仓存酒占地大小
hsiz: 0x14
数据块头大小
酒仓门口说明占地大小
pbl: 0x7fe7b05c2a64
运到方便看的地方的位置
每瓶定义酒位置
flag=--------
N=pcrfree hit(clusters);F=do not put on free list;K=flushable cluster keys
酒种类
ntab=1
是否存在另个酒厂(RAC)
nrow=1
有几瓶酒(即行数,这里表示这个表有3行数据)
frre=-1
通过酒中的信息(酒生产批号,生产日期等信息)查找酒是否有目录 (是否有索引)
fsbo=0x14
这些酒在酒仓存放位置 (放数据空间的起始位置)
fseo=0x1f8c
这些酒酒在酒仓存放位置 (存放数据空间的结束位置)
avsp=0x1f78
酒仓剩余面积大小 (空闲空间的字节数)
tosp=0x1f78
酒仓剩余面积大小 (维护后空闲空间的字节数)
0xe:pti[0]
0x12:pri[0] offs=0x1f8c
行目录,每瓶酒的位置
块中数据
tl: 12 fb: --H-FL-- lb: 0x1 cc: 2
col 0: [ 2] c1 02
col 1: [ 5] 41 41 41 41 41
end_of_block_dump
End dump data blocks tsn: 6 file#: 5 minblk 132 maxblk 132
lb: 0x1
0x1 表示lock byte。锁定该行的这个事务在ITL的入口,0x1说明事务在该数据行上的锁还没清除,并且该锁指向01号事务槽。
lb: 0x0说明事务在该数据行上的锁已经被清除
0x1 --Lock byte和上面的ITL的lck相对应,表示这行是否被lock了
多个管理员管理情况下,方便管理,如果有管理员管理此瓶酒的权限
tl: 12
酒大小(表示Row Size)
fb: --H-FL–
K- Cluster key
H- head of row piece
D- Deleted row
F- first data piece
L- last data piece
P- First column cintinues from previous row N- Last column cintinues in next piece
当DELETE一行数据的时候,数据并不是物理地被删除,而是把该行标记为删除,这个时候fb应该是–HDFL–而不是原来的–H-FL–
酒的状态,可能被移走了,可能修改了配料。
cc: 2
酒中的信息(酒生产批号,生产日期等信息)(number of columns in this Row piece)
总结:

拓展阅读
wechat: 704012932
email: pkweibu@163.com
CSDN: https://blog.csdn.net/weixin_37423880)




