收藏 分销(赏)

数据块内容浅析.doc

上传人:pc****0 文档编号:7459095 上传时间:2025-01-05 格式:DOC 页数:22 大小:222KB 下载积分:10 金币
下载 相关 举报
数据块内容浅析.doc_第1页
第1页 / 共22页
数据块内容浅析.doc_第2页
第2页 / 共22页


点击查看更多>>
资源描述
数据块内容浅析 北京神州泰岳软件股份有限公司 2024年12月28日 数据块内容浅析 文档属性 属性 内容 客户名称 项目名称 文档主题 数据块内容浅析 文档副标题 文档版本 文档日期 2010年3月 文档状态 作者 田可风 文档变更 版本 修订日期 修订人 描述 文档送呈 姓名 目的 目 录 1 如何Dump数据块 5 1.1 查看当前会话跟踪文件名 5 1.2 确定Dump对象的数据块位置 5 1.3 Dump数据块 6 2 数据块内容介绍 7 2.1 普通数据块内容 7 2.1.1 The Cache Header and Tail部分 7 2.1.2 The Transaction Header部分 8 2.1.3 Data Area部分 9 2.2 索引块内容 11 2.2.1 treedump 11 2.2.2 叶块内容 12 2.3 控制文件内容 13 2.3.1 控制文件头 13 2.3.2 数据库条目 13 2.3.3 Checkpoint记录 14 2.3.4 扩展数据库信息 15 2.3.5 Redo THREAD RECORDS 15 2.3.6 在线日志信息 16 2.3.7 数据文件记录 17 2.3.8 临时文件记录 17 2.3.9 表空间记录 18 2.3.10 Rman配置记录 18 2.3.11 FLASHBACK LOGFILE RECORDS 18 2.3.12 THREAD INSTANCE MAPPING RECORDS 19 2.3.13 MTTR RECORDS 19 2.3.14 STANDBY DATABASE MAP RECORDS 19 2.3.15 RESTORE POINT RECORDS 20 2.3.16 LOG FILE HISTORY RECORDS 20 2.3.17 OFFLINE RANGE RECORDS 20 2.3.18 ARCHIVED LOG RECORDS 21 2.3.19 各种关于备份的信息 21 1 如何Dump数据块 1.1 查看当前会话跟踪文件名 执行如下脚本: select d.value||'/'||lower(rtrim(i.instance, chr(0)))||'_ora_'||p.spid||'.trc' trace_file_name from ( select p.spid from v$mystat m,v$session s,v$process p where m.statistic# = 1 and s.sid = m.sid and p.addr = s.paddr) p, ( select t.instance from v$thread t,v$parameter v where v.name = 'thread' and (v.value = 0 or t.thread# = to_number(v.value))) i, ( select value from v$parameter where name = 'user_dump_dest') d; 执行结果如下图 1.2 确定Dump对象的数据块位置 执行如下命令: select file_id,block_id,bytes,blocks from dba_extents where owner='TEST' and segment_name='TEST'; 结果如下: 可见,该表存在于4号数据文件中,起始于313块,占用8个块的空间 1.3 Dump数据块 执行如下命令: alter system dump datafile 4 block 320; 该命令会将数据块内容转储到本会话的跟踪文件(见1.1)中,查看跟踪文件可得到数据块信息。 若想dump一定范围的数据块,可使用如下命令: alter system dump datafile 4 block min 314 block max 316; 2 数据块内容介绍 2.1 普通数据块内容 2.1.1 The Cache Header and Tail部分 数据块是在data block buffer cache中完成读和写操作的,所以它提供了20bytes的Cache Header和4bytes的 Tail给Cache,用来读取和管理。 查看跟踪文件,得到数据块起始内容 Start dump data blocks tsn: 4 file#: 4 minblk 320 maxblk 320 buffer tsn: 4 rdba: 0x01000140 (4/320) scn: 0x0000.0008269f seq: 0x01 flg: 0x04 tail: 0x269f0601 frmt: 0x02 chkval: 0x9c6c type: 0x06=trans data Hex dump of block: st=0, typ_found=1 Dump of memory from 0x0CC2B600 to 0x0CC2D600 第一行的tsn代表块所在表空间号,file#代表块所在数据文件号,minblk和maxblk代表dump的最小和最大数据块号。 第二行的rdba代表relative data block address,即块相对地址,该数值由file#+block#组成。本例中rdba值为0x01000140,转换成十进制为16777536,可通过如下语句计算其file#与block#: select dbms_utility.data_block_address_file(16777536) "file",dbms_utility.data_block_address_block(16777536) "block" from dual; SQL> select dbms_utility.data_block_address_file(16777536) "file",dbms_utility.data_block_address_block(16777536) "block" from dual; file block ---------- ---------- 4 320 于rdba后面括号内的内容相符。 第三行记载了数据块的scn号,0x0000.0008269f。tail(0x269f0601)代表了数据块尾部的信息,由三部分组成,其中269f为scn号的最后两个字节,06为块类型,01代表sequence。当分解尾部号码所得三个值与原值不符合,则系统就会知道数据块产生了不一致现象,需要做恢复。虽然tail的信息在跟踪文件的前面出现,但其物理存在于数据块的尾部。 第四行的frmt代表format,用以区分版本,8i以前是1,之后是2。Type代表块的类型,典型的块类型有如下几种: 类型号码 代表含义 0x02 Undo块 0x06 表或索引块 0x0e Undo段头 0x10 数据段头 0x17 位图数据段头 2.1.2 The Transaction Header部分 数据块的第2部分是为Transaction层提供的Header信息。它一共占据了48bytes,包括24bytes的控制信息,和一系列的Interested Transaction Slot (ITS)。初始的ITL slot 数量由 INITRANS 决定(index branch block 只有1个slot)。如果有足够的剩余空间,oracle会根据需要动态的分配这些slot,直到受到空间限制或者达到了MAXTRANS。 查看该部分的在跟踪文件里的内容: Block header dump: 0x01000140 Object id on Block? Y seg/obj: 0xc8c2 csc: 0x00.82697 itc: 3 flg: E typ: 1 - DATA brn: 0 bdba: 0x1000139 ver: 0x01 opc: 0 inc: 0 exflg: 0 Itl Xid Uba Flag Lck Scn/Fsc 0x01 0xffff.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.00082697 0x02 0x0000.000.00000000 0x00000000.0000.00 ---- 0 fsc 0x0000.00000000 0x03 0x0000.000.00000000 0x00000000.0000.00 ---- 0 fsc 0x0000.00000000 “Object id on Block?”显示了该对象是否存在于sys.obj$中,从Oracle6之后一般都是“Y”。 “seg/obj”代表段的object id(十六进制)。“csc”代表Cleanout System Change number,即最后一次full cleanout的scn号。Itc为Interested Transaction List Count,是itl的slot数量,本例中有三个事务与该块有关,从transaction id(Xid)可以看到出,transaction id 由回滚段号,回滚段中slot号和事务表被缠绕的次数组成。Flg(flag的缩写)代表本块是否在freelist 上,在的话为“O”,不在为“-”,使用ASSM时该值为E。type的含义:1代表数据,2代表索引。 Itl条目中,Uba代表使用undo的地址,Flag有几种含义如下: ---- transaction is active, or committed pending cleanout C--- transaction has been committed and locks cleaned out -B-- this undo record contains the undo for this ITL entry --U- transaction committed (maybe long ago); SCN is an upper bound ---T transaction was still active at block cleanout SCN Lck(lock)代表行级锁。“Scn/Fsc”代表如果这个事务已经clean out,这个值就是SCN;否则,前两个字节表示由这个事务释放的此block中的空间数。 2.1.3 Data Area部分 本部分用来存储用户数据。Data Area也包括data header,和row data及剩余空间。但是Cluster blocks, table blocks, index block的data header,row data结构是不相同的,这里主要介绍table blocks。 跟踪文件内容如下: data_block_dump,data header at 0xcc2b67c =============== tsiz: 0x1f80 hsiz: 0xda pbl: 0x0cc2b67c bdba: 0x01000140 76543210 flag=-------- ntab=1 nrow=100 frre=-1 fsbo=0xda fseo=0x42b avsp=0x351 tosp=0x351 0xe:pti[0] nrow=100 offs=0 0x12:pri[0] offs=0x1f30 0x14:pri[1] offs=0x1f0a 0x16:pri[2] offs=0x1ee6 0x18:pri[3] offs=0x1ec4 0x1a:pri[4] offs=0x1e95 0x1c:pri[5] offs=0x1e57 Tsize代表整个数据区可用空间的大小,本例中为1f08,十进制为8064,数据块的大小为8192,剩下的空间用作管理。 Hsize代表块头大小,计算公式为14+ntabs×4 + nrows×2。 Pbl代表pointer to buffer holding the block。 Bdba代表block dba / rdba。 Flag代表n=pctfree hit (clusters),f=don’t put on freelist, k=flushable cluster keys。 Ntab代表该块里含有几个表的数据。除非该块属于簇表,一般这个值为1。 Nrows代表块里有多少行数据。 Frre代表First free row index entry. -1=you have to add one Fsbo代表空闲空间起始偏址。 Fseo代表空闲空间终止偏址。 Avsp代表块内可用空间。 Tosp代表所有事务提交之后可用空间。 从0xe开始保存了每行的目录。该块的第一行存放于offs=0x1f30,第二行存放于offs=0x1f0a,以此类推。通过这种方式,可以快速定位行。Rowid中的row number指向的就是这个目录中的其中一个slot。 下面看看实际的行数据在跟踪文件中的存在方式 block_row_dump: tab 0, row 0, @0x1f30 tl: 80 fb: --H-FL-- lb: 0x0 cc: 2 col 0: [12] 44 42 41 5f 52 55 4c 45 53 45 54 53 col 1: [63] 52 75 6c 65 73 65 74 73 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 3a 20 6d 61 69 6e 74 61 69 6e 65 64 20 66 6f 72 20 62 61 63 6b 77 61 72 64 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 tab 0, row 1, @0x1f0a tl: 38 fb: --H-FL-- lb: 0x0 cc: 2 col 0: [10] 55 53 45 52 5f 52 55 4c 45 53 col 1: [23] 52 75 6c 65 73 20 6f 77 6e 65 64 20 62 79 20 74 68 65 20 75 73 65 72 tab 0, row 2, @0x1ee6 tl: 36 fb: --H-FL-- lb: 0x0 cc: 2 col 0: [ 9] 41 4c 4c 5f 52 55 4c 45 53 col 1: [22] 52 75 6c 65 73 20 73 65 65 6e 20 62 79 20 74 68 65 20 75 73 65 72 从“block_row_dump:”以下都是实际的行数据。由于簇表很少,所以tab一般都为0。第一行用row 0表示,可以看到地址与目录中的地址相同。 “tl”代表该行的字节数。“fb”是行的标记,其中“H”代表有行头,“F”代表拥有行的第一片,“L”代表拥有行的最后一片,如果同时拥有第一与最后一片,说明该行未发生迁移。“lb”代表该行是否有锁。“cc”代表列的数量。 其余为每列的信息,以ASCII编码存放。 2.2 索引块内容 2.2.1 treedump 本文档以最常见索引B-tree索引为例。索引块与表数据块不同,B-tree索引分枝块与叶块,先做一个全索引的dump。首先要确定索引的object id: SQL> select object_id from user_objects where object_name='IND_TEST_EVENT'; 2 OBJECT_ID ---------- 51478 使用该object_id来dump索引 SQL> alter session set events 'immediate trace name treedump level 51478'; Session altered. 检查跟踪文件,内容如下: ----- begin tree dump branch: 0x10000bc 16777404 (0: nrow: 18, level: 1) leaf: 0x10000bd 16777405 (-1: nrow: 248 rrow: 248) leaf: 0x10000d0 16777424 (0: nrow: 200 rrow: 200) leaf: 0x10000cc 16777420 (1: nrow: 264 rrow: 264) leaf: 0x10000dc 16777436 (2: nrow: 184 rrow: 184) leaf: 0x10000c0 16777408 (3: nrow: 204 rrow: 204) leaf: 0x10000ce 16777422 (4: nrow: 84 rrow: 84) 第一行的branch是整个索引的根部,在本例中的十六进制地址是0x10000bc,后面紧跟十进制地址16777404。Level代表索引的高度,从0开始数的话,高度是2。 第二行leaf是叶块,在本例中的十六进制地址是0x10000bd,后面紧跟十进制地址16777405。编号从-1开始。由于叶块level始终为0,所以dump文件里不记载。nrow 代表数据块中的总行数,包括被删除的;rrow代表实际行数。 2.2.2 叶块内容 根据treedump里提供的叶块十进制地址,通过以下命令查看数据块位置信息: SQL> select dbms_utility.data_block_address_file(16777405) as file#,dbms_utility.data_block_address_block(16777405) as block from dual; FILE# BLOCK ---------- ---------- 4 189 使用如下命令dump叶块 alter system dump datafile 4 block 189; 索引块与普通数据块内容差别主要如下所示: Leaf block dump =============== header address 214087268=0xcc2b664 kdxcolev 0 KDXCOLEV Flags = - - - kdxcolok 1 kdxcoopc 0x80: opcode=0: iot flags=--- is converted=Y kdxconco 2 kdxcosdc 6 kdxconro 121 kdxcofbo 278=0x116 kdxcofeo 4039=0xfc7 kdxcoavs 3761 kdxlespl 0 kdxlende 0 kdxlenxt 16777527=0x1000137 kdxleprv 0=0x0 kdxledsz 0 kdxlebksz 8032 主要信息如下: kdxcolev代表索引块level,0表示leaf kdxconco代表列的数量 kdxcosdc代表结构改变次数 kdxconro代表记录数 kdxcofbo代表空闲空间开始偏移量 kdxcofeo代表空闲空间终止偏移量 kdxcoavs代表所提供的空闲空间 kdxlespl代表数据块cleanout的时候,未提交的数量 kdxlende代表被删除索引记录的数量 kdxlenxt代表下一个索引块的链接地址 kdxleprv代表上一个索引块的链接地址 kdxledsz代表被删除的空间大小 kdxlebksz代表使用数据块空间 注意本例中kdxleprv 0=0x0,表明本块是树状结构从左到右的第一个块,如果是最后一个块,则kdxlenxt 应该为0。 2.3 控制文件内容 使用以下命令转储控制文件内容 SQL> alter session set events 'immediate trace name controlf level 5'; Session altered. 观察跟踪文件有以下几部分: 2.3.1 控制文件头 DUMP OF CONTROL FILES, Seq # 932 = 0x3a4 V10 STYLE FILE HEADER: Compatibility Vsn = 169869568=0xa200100 Db ID=659778361=0x27536b39, Db Name='ORA10' Activation ID=0=0x0 Control Seq=932=0x3a4, File size=450=0x1c2 File Number=0, Blksiz=16384, File Type=1 CONTROL 这里我们可以看到DB ID(659778361),DB NAME('ORA10') 2.3.2 数据库条目 *************************************************************************** DATABASE ENTRY *************************************************************************** (size = 316, compat size = 316, section max = 1, section in-use = 1, last-recid= 0, old-recno = 0, last-recno = 0) (extent = 1, blkno = 1, numrecs = 1) 03/17/2010 05:23:00 DB Name "ORA10" Database flags = 0x00404001 0x00001000 Controlfile Creation Timestamp 03/17/2010 05:23:00 Incmplt recovery scn: 0x0000.00000000 Resetlogs scn: 0x0000.000826c6 Resetlogs Timestamp 03/17/2010 05:25:24 Prior resetlogs scn: 0x0000.0006ce7b Prior resetlogs Timestamp 01/26/2009 15:18:20 Redo Version: compatible=0xa200100 #Data files = 4, #Online files = 4 Database checkpoint: Thread=1 scn: 0x0000.00098c49 Threads: #Enabled=1, #Open=1, Head=1, Tail=1 enabled threads: 01000000 00000000 00000000 00000000 00000000 00000000 。 。 Max log members = 3, Max data members = 1 Arch list: Head=5, Tail=5, Force scn: 0x0000.00093299scn: 0x0000.00098c49 Activation ID: 696454708 Controlfile Checkpointed at scn: 0x0000.00098cea 03/18/2010 06:31:58 thread:0 rba:(0x0.0.0) enabled threads: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 这里可以看到DB和control fiel 建立的时间,同时可以看出上一次数据库是以resetlog方式打开。数据库有4个数据文件,且都在线。另外得知最多3个日志成员,控制文件上一次checkpoint的scn号及时间。 2.3.3 Checkpoint记录 *************************************************************************** CHECKPOINT PROGRESS RECORDS *************************************************************************** (size = 8180, compat size = 8180, section max = 11, section in-use = 0, last-recid= 0, old-recno = 0, last-recno = 0) (extent = 1, blkno = 2, numrecs = 11) THREAD #1 - status:0x2 flags:0x0 dirty:32 low cache rba:(0x14.9d5.0) on disk rba:(0x14.a18.0) on disk scn: 0x0000.00098fb5 03/18/2010 10:09:03 resetlogs scn: 0x0000.000826c6 03/17/2010 05:25:24 heartbeat: 714581086 mount id: 697196804 THREAD #2 - status:0x0 flags:0x0 dirty:0 low cache rba:(0x0.0.0) on disk rba:(0x0.0.0) on disk scn: 0x0000.00000000 01/01/1988 00:00:00 resetlogs scn: 0x0000.00000000 01/01/1988 00:00:00 heartbeat: 0 mount id: 0 2.3.4 扩展数据库信息 *************************************************************************** EXTENDED DATABASE ENTRY *************************************************************************** (size = 276, compat size = 276, section max = 1, section in-use = 1, last-recid= 0, old-recno = 0, last-recno = 0) (extent = 1, blkno = 147, numrecs = 1) Control AutoBackup date(dd/mm/yyyy)=17/ 3/2010 Next AutoBackup sequence= 0 Database recovery target inc#:2, Last open inc#:2 flg:0x0, flag:0x0 Change tracking state=0, file index=0, checkpoint count=0 Flashback log count=0, block count=0 Oldest guarantee restore point=0 2.3.5 Redo THREAD RECORDS *************************************************************************** REDO THREAD RECORDS *************************************************************************** (size = 256, compat size = 256, section max = 8, section in-use = 1, last-recid= 0, old-recno = 0, last-recno = 0) (extent = 1, blkno = 9, numrecs = 8) THREAD #1 - status:0xf thread links forward:0 back:0 #logs:4 first:3 last:6 current:5 last used seq#:0x14 enabled at scn: 0x0000.000826c6 03/17/2010 05:25:24 disabled at scn: 0x0000.00000000 01/01/1988 00:00:00 opened at 03/18/2010 06:04:59 by instance ora10 Checkpointed at scn: 0x0000.00098c49 03/18/2010 06:26:54 thread:1 rba:(0x14.2.10) enabled threads: 01000000 00000000 00000000 00000000 00000000 00000000 2.3.6 在线日志信息 *************************************************************************** LOG FILE RECORDS *************************************************************************** (size = 72, compat size = 72, section max = 16, section in-use = 6, last-recid= 4, old-recno = 0, last-recno = 0) (extent = 1, blkno = 10, numrecs = 16) LOG FILE #1: <deleted> Thread 0 redo log links: forward: 0 backward: 0 siz: 0x0 seq: 0x00000000 hws: 0x0 bsz: 0 nab: 0x0 flg: 0x0 dup: 0 Archive links: fwrd: 0 back: 0 Prev scn: 0x0000.00000000 Low scn: 0x0000.00000000 01/01/1988 00:00:00 Next scn: 0x0000.00000000 01/01/1988 00:00:00 LOG FILE #2: <deleted> Thread 0 redo log links: forward: 0 backward: 0 siz: 0x0 seq: 0x00000000 hws: 0x0 bsz: 0 nab: 0x0 flg: 0x0 dup: 0 Archive links: fwrd: 0 back: 0 Prev scn: 0x0000.00000000 Low scn: 0x0000.00000000 01/01/1988 00:00:00 Next scn: 0x0000.00000000 01/01/1988 00:00:00 LOG FILE #3: (name #4) /ora10/ora10/redo03.log Thread 1 redo log links: forward: 4 backward: 0 siz: 0x19000 seq: 0x00000012 hws: 0x12 bsz: 512 nab: 0x1816b flg: 0x1 dup: 1 Archive links: fwrd: 0 back: 0 Prev scn: 0x0000.00093125 Low scn: 0x0000.00093299 03/17/2010 05:58:45 Next scn: 0x0000.00097cbb 03/18/2010 05:01:18 LOG FILE #4: (name #3) /ora10/ora10/redo04.log Thread 1 redo log links: forward: 5 backward: 3 siz: 0x2800 seq: 0x00000013 hws: 0x5 bsz: 512 nab: 0x1abc flg: 0x1 dup: 1 Archive links: fwrd: 0 back: 0 Prev scn: 0x0000.00093299 Low scn: 0x0000.00097cbb 03/18/2010 05:01:18 Next scn: 0x0000.00098c49 03/18/2010 06:26:54 LOG FILE #5: (name #2) /ora10/ora10/redo05.log Thread 1 redo log links: forward: 6 backward: 4 siz: 0x2800 seq: 0x00000014 hws: 0x1 bsz: 512 nab: 0xffffffff flg: 0x8 dup: 1 Archive links: fwrd: 0 back: 0 Prev scn: 0x0000.00097cbb Low scn: 0x0000.00098c49 03/18/2010 06:26:54 Next scn: 0xffff.ffffffff 01/01/1988 00:00:00 LOG FILE #6: (name #1) /ora10/ora10/redo06.log Thread 1
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服