ORACLE空間管理實驗8:資料塊格式分析--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
相關文章
- Oracle資料塊格式Oracle
- oracle 普通表空間資料檔案壞塊Oracle
- 【Oracle 恢復表空間】 實驗Oracle
- ORACLE 資料塊格式深入解析Oracle
- Oracle redo解析之-2、BBED & DUMP工具使用Oracle Redo
- 清理oracle資料庫空間Oracle資料庫
- 8. Oracle日常管理——8.2.DB日常管理——8.2.2. DB空間Oracle
- Oracle OCP(49):表空間管理Oracle
- [20210906]bbed讀取資料塊(bbed-wrap.sh).txt
- Oracle OCP(46):表空間、段、區、塊Oracle
- [20210318]bbed讀取資料塊.txt
- 資料結構實驗三:線性表綜合實驗資料結構
- 8. Oracle日常管理——8.1. OS日常管理——8.1.2. OS儲存空間Oracle
- 使用mysqldump以SQL格式來dump資料MySql
- oracle dg庫資料檔案空間不足Oracle
- Oracle資料庫閃回區空間不足Oracle資料庫
- oracle建立臨時表空間和資料表空間以及刪除Oracle
- Oracle資料庫壞塊典型案例分析Oracle資料庫
- Oracle 之利用BBED修改資料塊SCN----沒有備份資料檔案的資料恢復Oracle資料恢復
- oracle表空間增長趨勢分析Oracle
- ORACLE ASM的SSD磁碟空間回收分析OracleASM
- 使用mysqldump以文字分隔格式來dump資料MySql
- 空間劃分的資料結構資料結構
- Oracle案例11——Oracle表空間資料庫檔案收縮Oracle資料庫
- oracle的interval時間格式的總結Oracle
- 資料視覺化--實驗五:高維非空間資料視覺化視覺化
- [20210831]bbed讀取資料塊6.txt
- [20210323]bbed讀取資料塊5.txt
- [20210318]bbed讀取資料塊2.txt
- [20210319]bbed讀取資料塊3.txt
- 【TABLESPACE】Oracle 表空間結構說明Oracle
- 表空間和資料檔案的管理
- 【TUNE_ORACLE】檢視Oracle的壞塊在空閒空間中還是在已用空間中的SQL參考OracleSQL
- 【TABLESPACE】Oracle表空間最佳實踐Oracle
- 達夢資料庫表空間管理方法及實戰演示資料庫
- Oracle表空間Oracle
- oracle 表空間Oracle
- 達夢資料庫表空間等空間大小查詢方法總結資料庫
- GeoRapter工具將shapefile資料匯入到Oracle空間資料庫中APTOracle資料庫