ORACLE空间管理实验8:数据块格式分析
使用DUMP 数据块式结合BBED进行查看。 #################### 实验准备步骤 : BYS@ bys3create table test6(aa int,bb varchar2(10)); Table created. BYS@ bys3insert into test6 values(89,'bys'); 1 row created. BYS@ bys3insert into test6 values(69,'h
使用DUMP 数据块格式结合BBED进行查看。####################实验准备步骤:
BYS@ bys3>create table test6(aa int,bb varchar2(10));
Table created.
BYS@ bys3>insert into test6 values(89,'bys');
1 row created.
BYS@ bys3>insert into test6 values(69,'hello');
1 row created.
BYS@ bys3>commit;
Commit complete.
BYS@ bys3>alter system checkpoint;
System altered.
BYS@ bys3>select dbms_rowid.rowid_relative_fno(rowid) file#,dbms_rowid.rowid_block_number(rowid) block#,aa,bb from test6;
FILE# BLOCK# AA BB
---------- ---------- ---------- ----------
4 477 89 bys
4 477 69 hello
BYS@ bys3>alter system dump datafile 4 block 477;
System altered.
BYS@ bys3>select value from v$diag_info where name like 'De%';
VALUE
----------------------------------------------------------------------------------------------------
/u01/diag/rdbms/bys3/bys3/trace/bys3_ora_8109.trc
DUMP数据块的信息解读
Start dump data blocks tsn: 4 file#:4 minblk 477 maxblk 477
Block dump from cache: --这段信息来自buffer cache,详见: 详解Buffer Header--DUMP buffer结合X$BH视图各字段
Dump of buffer cache at level 4 for tsn=4 rdba=16777693
BH (0x22be4e74) file#: 4 rdba: 0x010001dd (4/477) class: 1 ba: 0x2286e000
set: 3 pool: 3 bsz: 8192 bsi: 0 sflg: 1 pwc: 0,0
dbwrid: 0 obj: 23326 objn: 23326 tsn: 4 afn: 4 hint: f
hash: [0x227e6b54,0x2a7f74ac] lru: [0x217ee3d4,0x20ff4e64]
ckptq: [NULL] fileq: [NULL] objq: [0x217ee3ec,0x20ff4e7c] objaq: [0x217ee3f4,0x20ff4e84]
st: XCURRENT md: NULL fpin: 'ktspbwh2: ktspfmdb' tch: 3
flags: block_written_once redo_since_read
LRBA: [0x0.0.0] LSCN: [0x0.0] HSCN: [0xffff.ffffffff] HSUB: [1]
###########################################数据块头部分
Block dump from disk: --下面的信息才是来自数据文件中的块。
buffer tsn: 4 rdba: 0x010001dd (4/477) --数据块中4-8字节是RDBA--下面BBED部分可以看到
scn: 0x0000.00874dbb seq: 0x01 flg: 0x06 tail: 0x4dbb0601
frmt: 0x02 chkval: 0xeb56 type: 0x06=trans data --第四个字节对应
---flg:0x01 (新建块)0x2(数据块延迟清洗推进scn和seq) 0X04(设置校验和) 0x08(临时块) type:0x06(表/索引块)
--frmt: 0x01(v7) 0x02(v8) --与第三字节A2对应,表示8I以上版本
Hex dump of block: st=0, typ_found=1
Dump of memory from 0xB68A9200 to 0xB68AB200
B68A9200 0000A206 010001DD 00874DBB 06010000 [.........M......] ---这一行的信息可以与块头中的SCN TYPE之类对应的。
B68A9210 0000EB56 00130001 00005B1E 00874DB6 [V........[...M..]
B68A9220 1FE80000 00321F02 010001D8 001A0002 [......2.........]
B68A9230 00001382 00C00B70 00070569 00002002 [....p...i.... ..]
………………………………
B68AB1D0 54415453 4D5F5355 454B5241 71780752 [STATUS_MARKER.xq]
B68AB1E0 2618100B 012C021E 46C10202 6C656805 [...&..,....F.hel]
B68AB1F0 012C6F6C 5AC10202 73796203 4DBB0601 [lo,....Z.bys...M]
##########################################下面是ITL
Block header dump: 0x010001dd
Object id on Block? Y
seg/obj: 0x5b1e csc: 0x00.874db6 itc: 2 flg: E typ: 1 - DATA --数据类型是DATA。
-- seg/obj: 0x5b1e--对应的是dba_objects.data_object_id,未TRUNCATE操作过的表data_object_id与object_id相等。格式化也就是在块上写入这个seg/obj:
--csc: 0x00.874db6 延迟块清除时的SCN--查询时、第三次提交时--三个ITL会做延迟块清除
--flg: E --指用的是ASSM,如果是O表示用的是free list
--typ: 1 - DATA 事务型的数据块(并且:数据块头的type:0x06),存放表和索引数据。
brn: 0 bdba: 0x10001d8 ver: 0x01 opc: 0
inc: 0 exflg: 0
Itl Xid Uba Flag Lck Scn/Fsc
0x01 0x0002.01a.00001382 0x00c00b70.0569.07 --U- 2 fsc 0x0000.00874dbb
0x02 0x0000.000.00000000 0x00000000.0000.00 ---- 0 fsc 0x0000.00000000
--11G默认用快速提交,Flag是U,正常提交是C。
--Itl: ITL事务槽号的流水编号
--Xid:transac[X]tion identified(事务ID),由und的段号+undo的槽号+undo槽号的覆盖次数三部分组成
--Uba:undo block address记录了最近一次的该记录的前镜像(修改前的值)
--Flag:C是提交,U是快速提交,---是未提交(Flg C=Committed U=Commit Upper Bound T=Active at CSC)
--Lck:锁住了几行数据,对应有几个行锁
--Scn/Fsc:Scn=SCN of commited TX; Fsc=Free space credit(bytes)
--这里fsc 0x0000.00874dbb是指提交的scn,这个值大于上次清除块时的scn=csc: 0x00.874db6(此scn是这个块中最小的SCN of commited)
--SCN WRAP:如果事务已提交并完成清洗,该字段保存事务提交SCN的SCN WRAP部分,否则该字段保存空闲预支字节数(FSC).比如删除了一行数据10个字节,在事务提前前,这10个字节就属于fsc(即会写到SCN WRAP),只有事务提交后,才能正式返回到空闲空间。
#################################################用户数据头
bdba: 0x010001dd --当前数据块的DBA
data_block_dump,data header at 0xb68a9264
===============
tsiz: 0x1f98 块的total总可用空间 1f98--8088字节
hsiz: 0x16 --数据头部占的字节数-不固定
pbl: 0xb68a9264
76543210
flag=--------
ntab=1 --数据块属于一个表, cluster表时不是1
nrow=2 --行数
frre=-1 --The first free row entry in the row directory 要加1
fsbo=0x16 --Free space begin offset 叫起始空间:可以存放数据空间的起始位置(即定义了数据层中空闲空间的起始offset)
fseo=0x1f82 -- Free space end offset 叫结束空间:可以存放数据空间的结束位置(即定义了数据层中空闲空间的结束offset)插入数据从此处开始--从后往前用
avsp=0x1f6c -- --Available space for new entries 叫空闲空间:定义了数据层中空闲空间的字节数
tosp=0x1f6c -- --Total space 叫最终空闲空间:定义了ITL中事务提交后,数据层中空闲空间的字节数
0xe:pti[0] nrow=2 offs=0 --Table directory,整个表的开始,共2行数据 ,定义了该表在行索引中使用的插槽数
0x12:pri[0] offs=0x1f8e -Row index,叫行索引,定义了该块中包含的所有行数据的位置
0x14:pri[1] offs=0x1f82
#######################################用户数据
block_row_dump:
tab 0, row 0, @0x1f8e --1个表,第1行,@0x1f8e该表在行索引中的起始插槽号 8078
tl: 10 fb: --H-FL-- lb: 0x1 cc: 2
--fb: (Flag byte)--H-FL指H(Head piece of row)F(First data piece) L(Last data piece)
--lb: 0x1 --Lock byte和上面的ITL的lck相对应,表示这行是否被lock了
col 0: [ 2] c1 5a --第一行的第一列,有两个字符
col 1: [ 3] 62 79 73 --第一行的第二列,有三个字符
tab 0, row 1, @0x1f82 ----------使用这个转换为十进制在BBED以此为偏移量来查看,需要加100(ORACEL预留100字节)
tl: 12 fb: --H-FL-- lb: 0x1 cc: 2
col 0: [ 2] c1 46
col 1: [ 5] 68 65 6c 6c 6f
end_of_block_dump
End dump data blocks tsn: 4 file#: 4 minblk 477 maxblk 477
最后四字节tail: 0xa3eb0601=scnBASE+flg+seq,如果不相等会报块损坏
###################
使用BBED查看数据块,与上一步DUMP信息进行对应
要节约篇幅哈哈,BBED中只讲与DUMP中的对应及一些重要字段的意义,不太重要的就要在上一步的DUMP中看了。
##########################
BBED> set file 4 block 477
FILE# 4
BLOCK# 477
BBED> dump
File: /u01/oradata/bys3/user01.dbf (4)
Block: 477 Offsets: 0 to 511 Dba:0x010001dd
------------------------------------------------------------------------
06a20000 dd010001 bb4d8700 00000106 56eb0000 01001300 1e5b0000 b64d8700
从BBED的第一行信息,因为大小端的问题,这里要两位两位倒着看。
16进制中两个字符表示1bytes,所以要以2个16进制字符为单位(1byte)来进行转换:
前面的个字节是:0000 a206 0100 01dd,可以看到和DUMP数据块中第一行前8个字节是一样的,
#####
BBED> map
File: /u01/oradata/bys3/user01.dbf (4)
Block: 477 Dba:0x010001dd
------------------------------------------------------------
KTB Data Block (Table/Cluster)
struct kcbh, 20 bytes @0
struct ktbbh, 72 bytes @20
struct kdbh, 14 bytes @100
struct kdbt[1], 4 bytes @114
sb2 kdbr[2] @118
ub1 freespace[8044] @122
ub1 rowdata[22] @8166
ub4 tailchk @8188
##############################3
BBED> print kcbh ---这里面信息全部可以与DUMP中的对应上。对应图中 cache layer层
struct kcbh, 20 bytes @0
ub1 type_kcbh @0 0x06 --块类型。。。。ub4--代表:unsign bytes 4--是字节数
ub1 frmt_kcbh @1 0xa2 --版本8I以上
ub1 spare1_kcbh @2 0x00
ub1 spare2_kcbh @3 0x00
ub4 rdba_kcbh @4 0x010001dd -DBA
ub4 bas_kcbh @8 0x00874dbb -SCN低位
ub2 wrp_kcbh @12 0x0000 -SCN高位
ub1 seq_kcbh @14 0x01 --序号
ub1 flg_kcbh @15 0x06 (KCBHFDLC, KCBHFCKV)
ub2 chkval_kcbh @16 0xeb56 --DUMP中chkval
ub2 spare3_kcbh @18 0x0000
BBED> print ktbbh ---与ITL 事务信息对应
struct ktbbh, 72 bytes @20
ub1 ktbbhtyp @20 0x01 (KDDBTDATA) --块类型
union ktbbhsid, 4 bytes @24 ---seg/obj:0x5b1e
ub4 ktbbhsg1 @24 0x00005b1e
ub4 ktbbhod1 @24 0x00005b1e
struct ktbbhcsc, 8 bytes @28 --csc: 0x00.874db6
ub4 kscnbas @28 0x00874db6
ub2 kscnwrp @32 0x0000
sb2 ktbbhict @36 7938 --itc: 2我这里没对上
ub1 ktbbhflg @38 0x32 (NONE) --flg: E
ub1 ktbbhfsl @39 0x00
ub4 ktbbhfnx @40 0x010001d8 --bdba:
struct ktbbhitl[0], 24 bytes @44 --对应事务编号Xid:0x0002.01a.00001382
struct ktbitxid, 8 bytes @44
ub2 kxidusn @44 0x0002 -usn undo segment number
ub2 kxidslt @46 0x001a --事务表第几行
ub4 kxidsqn @48 0x00001382 --行被重用次数
struct ktbituba, 8 bytes @52 --对应事务UBA 0x00c00b70.0569.07
ub4 kubadba @52 0x00c00b70 --UNDO DBA
ub2 kubaseq @56 0x0569 --
ub1 kubarec @58 0x07
ub2 ktbitflg @60 0x2002 (KTBFUPB)
union _ktbitun, 2 bytes @62
sb2 _ktbitfsc @62 0
ub2 _ktbitwrp @62 0x0000
ub4 ktbitbas @64 0x00874dbb
struct ktbbhitl[1], 24 bytes @68
struct ktbitxid, 8 bytes @68
ub2 kxidusn @68 0x0000
ub2 kxidslt @70 0x0000
ub4 kxidsqn @72 0x00000000
struct ktbituba, 8 bytes @76
ub4 kubadba @76 0x00000000
ub2 kubaseq @80 0x0000
ub1 kubarec @82 0x00
ub2 ktbitflg @84 0x0000 (NONE)
union _ktbitun, 2 bytes @86
sb2 _ktbitfsc @86 0
ub2 _ktbitwrp @86 0x0000
ub4 ktbitbas @88 0x00000000
BBED> print kdbh --对应的用户数据头
struct kdbh, 14 bytes @100
ub1 kdbhflag @100 0x00 (NONE)
sb1 kdbhntab @101 1 --对应DUMP中:ntab=1
sb2 kdbhnrow @102 2 --对应DUMP中:nrow=2
sb2 kdbhfrre @104 -1 --对应DUMP中:frre=-1
sb2 kdbhfsbo @106 22 --对应DUMP中:fsbo=0x16
sb2 kdbhfseo @108 8066 --对应DUMP中:fseo=0x1f82 插数据从此处开始
sb2 kdbhavsp @110 8044 --对应DUMP中avsp=0x1f6c
sb2 kdbhtosp @112 8044 --对应DUMP中tosp=0x1f6c
BBED> print kdbr --对应的行索引信息
sb2 kdbr[0] @118 8078 --对应DUMP中0x12:pri[0] offs=0x1f8e
sb2 kdbr[1] @120 8066 --对应DUMP中0x14:pri[1] offs=0x1f82
##########
BBED> dump offset 8166 --这里DUMP出来的是行中的具体信息 第一行8078 第二行 8066 加100,从8166开始DUMP
File: /u01/oradata/bys3/user01.dbf (4)
Block: 477 Offsets: 8166 to 8191 Dba:0x010001dd
------------------------------------------------------------------------
2c010202 c1460568 656c6c6f 2c010202 c15a0362 79730106 bb4d
02 c15a 03 62 7973 对应的第一行的值: 03是三个字节,
col 0: [ 2] c1 5a
col 1: [ 3] 62 79 73
02 c14605 68 656c6c6f对应第二行的值:05是五个字节
col 0: [ 2] c1 46
col 1: [ 5] 68 65 6c 6c 6f
BBED> print tailchk --与DUMP中数据块最后四个字节对应4DBB0601,是数据块的校验值。
ub4 tailchk @8188 0x4dbb0601

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

Oracle 数据库日志的保留期限取决于日志类型和配置,包括:重做日志:由 "LOG_ARCHIVE_DEST" 参数配置的最大大小决定。归档重做日志:由 "DB_RECOVERY_FILE_DEST_SIZE" 参数配置的最大大小决定。在线重做日志:不归档,在数据库重启时丢失,保留期限与实例运行时间一致。审计日志:由 "AUDIT_TRAIL" 参数配置,默认保留 30 天。

Oracle 所需内存量取决于数据库大小、活动水平和所需性能水平:用于存储数据缓冲区、索引缓冲区、执行 SQL 语句和管理数据字典缓存。具体数量受数据库大小、活动水平和所需性能水平影响。最佳实践包括设置适当的 SGA 大小、调整 SGA 组件大小、使用 AMM 和监控内存使用情况。

Oracle 数据库服务器硬件配置要求:处理器:多核,主频至少 2.5 GHz,大型数据库建议 32 核以上。内存:小型数据库至少 8GB,中等规模 16-64GB,大型数据库或高负载工作负载高达 512GB 或更多。存储:SSD 或 NVMe 磁盘,RAID 阵列提高冗余和性能。网络:高速网络(10GbE 或更高),专用网卡,低延迟网络。其他:稳定电源、冗余组件、兼容操作系统和软件、散热和冷却系统。

上周,在内部的离职潮和外部的口诛笔伐之下,OpenAI可谓是内忧外患:-侵权寡姐引发全球热议-员工签署「霸王条款」被接连曝出-网友细数奥特曼「七宗罪」辟谣:根据Vox获取的泄露信息和文件,OpenAI的高级领导层,包括Altman在内,非常了解这些股权回收条款,并且签署了它们。除此之外,还有一个严峻而紧迫的问题摆在OpenAI面前——AI安全。最近,五名与安全相关的员工离职,其中包括两名最著名的员工,“超级对齐”团队的解散让OpenAI的安全问题再次被置于聚光灯下。《财富》杂志报道称,OpenA

Oracle 数据库所需内存量取决于数据库大小、工作负载类型和并发用户数量。通常建议:小型数据库:16-32 GB,中型数据库:32-64 GB,大型数据库:64 GB 或更多。其他需考虑因素包括数据库版本、内存优化选项、虚拟化和最佳实践(监视内存使用情况、调整分配)。

要在 Oracle 中创建每天执行一次的定时任务,需要执行以下三个步骤:创建一个作业。为作业添加一个子作业,并设置其计划表达式为“INTERVAL 1 DAY”。启用作业。

70B模型,秒出1000token,换算成字符接近4000!研究人员将Llama3进行了微调并引入加速算法,和原生版本相比,速度足足快出了快了13倍!不仅是快,在代码重写任务上的表现甚至超越了GPT-4o。这项成果,来自爆火的AI编程神器Cursor背后团队anysphere,OpenAI也参与过投资。要知道在以快着称的推理加速框架Groq上,70BLlama3的推理速度也不过每秒300多token。 Cursor这样的速度,可以说是实现了近乎即时的完整代码文件编辑。有人直呼好家伙,如果把Curs

BitgetLaunchpool是一个为所有加密货币爱好者而设计的动态平台。BitgetLaunchpool以其独特的产品脱颖而出。在这里,您可以质押您的代币来解锁更多奖励,包括空投、高额回报,以及专属早期参与者的丰厚奖池。什么是BitgetLaunchpool?BitgetLaunchpool是一个加密货币平台,可以透过用户友善的条款和条件来质押和赚取代币。透过在Launchpool中投入BGB或其他代币,用户有机会获得免费空投、收益和参与丰厚的奖金池。质押资产的收益在T+1小时内计算,奖励按
