暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

大话 Oracle Block(二) - 类比

1170

image.png

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

一个tablespace对应一个酒厂,酒厂有很多酒仓,酒仓就代表了一个Oracle block

image.png

数据块头:

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)

总结:

数据.png

拓展阅读

大话 Oracle Block(一) - 概念,实验

                      wechat: 704012932
                      email:  pkweibu@163.com
                      CSDN:   https://blog.csdn.net/weixin_37423880)
最后修改时间:2021-05-14 17:20:03
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论