資料檔案internal分析
――――――――――――――――――――――――――――――――――
*** 2003-06-12 11:36:22.437
*** SESSION ID:(12.96) 2003-06-12 11:36:22.343
Start dump data blocks tsn: 8 file#: 11 minblk 2 maxblk 2
buffer tsn: 8 rdba: 0x02c00002 (11/2)
scn: 0x0000.001148eb seq: 0x01 flg: 0x00 tail: 0x48eb1001
frmt: 0x02 chkval: 0x0000 type: 0x10=DATA SEGMENT HEADER - UNLIMITED
Extent Control Header
-----------------------------------------------------------------
Extent Header:: spare1: 0 space2: 0 #extents: 1 #blocks: 4
last map 0x00000000 #maps: 0 offset: 4128
Highwater:: 0x02c00004 ext#: 0 blk#: 1 ext size: 4
#blocks in seg. hdr's freelists: 1
#blocks below: 1
mapblk 0x00000000 offset: 0
Unlocked
Map Header:: next 0x00000000 #extents: 1 obj#: 25755 flag: 0x40000000
Extent Map
-----------------------------------------------------------------
0x02c00003 length: 4
nfl = 1, nfb = 1 typ = 1 nxf = 0
SEG LST:: flg: USED lhd: 0x02c00003 ltl: 0x02c00003
End dump data blocks tsn: 8 file#: 11 minblk 2 maxblk 2
――――――――――――――――――――――――――――――――――
這裡我們看到表空間號是tsn: 8,資料檔案號是file#: 11,相對資料塊地址是rdba: 0x02c00002 (11/2),SCN為scn: 0x0000.001148eb(SCN Base=0011,SCN Wrap=48eb),尾區版本號為tail: 0x48eb1001(tail=SCN Wrap: 48eb + type: 0x10+ seq: 0x01),由於這個塊是整個Segment的頭,所以它還包含整個Segment的一些儲存資訊,比如extent數,block數,高水位地址Highwater:: 0x02c00004,自由列表資訊hdr's freelists: 1等等。如果才用本地管理表空間,則此塊的儲存資訊透過點陣圖方式管理。
真正的資料是儲存在下一個塊也就是0x02c00002+1=0x02c00003,我們來看看究竟。
――――――――――――――――――――――――――――――――――
*** 2003-06-12 12:00:41.781
Start dump data blocks tsn: 8 file#: 11 minblk 3 maxblk 3
buffer tsn: 8 rdba: 0x02c00003 (11/3)
scn: 0x0000.001148ee seq: 0x01 flg: 0x02 tail: 0x48ee0601
frmt: 0x02 chkval: 0x0000 type: 0x06=trans data
Block header dump: 0x02c00003
Object id on Block? Y
seg/obj: 0x649b csc: 0x00.1148eb itc: 1 flg: O typ: 1 - DATA
fsl: 0 fnx: 0x0 ver: 0x01
Itl Xid Uba Flag Lck Scn/Fsc
0x01 xid: 0x0006.03f.000000da uba: 0x00800ad2.00ae.04 --U- 2 fsc 0x0000.001148ee
data_block_dump
===============
tsiz: 0x1fb8
hsiz: 0x16
pbl: 0x0ec77444
bdba: 0x02c00003
flag=-----------
ntab=1
nrow=2
frre=-1
fsbo=0x16
fseo=0x1fac
avsp=0x1f90
tosp=0x1f90
0xe:pti[0] nrow=2 offs=0
0x12:pri[0] offs=0x1fb2
0x14:pri[1] offs=0x1fac
block_row_dump:
tab 0, row 0, @0x1fb2
tl: 6 fb: --H-FL-- lb: 0x1 cc: 1
col 0: [ 2] c1 02
tab 0, row 1, @0x1fac
tl: 6 fb: --H-FL-- lb: 0x1 cc: 1
col 0: [ 2] c1 03
end_of_block_dump
End dump data blocks tsn: 8 file#: 11 minblk 3 maxblk 3
――――――――――――――――――――――――――――――――――
謎團解開了,ITL,資料都呈現出來了,開始分析!
Block header dump: 0x02c00003
Object id on Block? Y
seg/obj: 0x649b csc: 0x00.1148eb itc: 1 flg: O typ: 1 - DATA
fsl: 0 fnx: 0x0 ver: 0x01
資料塊地址正是0x02c00002+1=0x02c00003
segment/object id為0x649b,轉成10進製為25755,可以由obj#表中得知
SQL> select obj# from sys.obj$ where name='TESTBLOCK';
OBJ#
----------
25755
csc(SCN at last Block CleanOut): 0x00.1148eb表示最後一次塊清除(Block CleanOut)時候的SCN,關於塊清除的概念可以查閱Thomas Kyte 著的”expert one by one Oracle”。
itc: 1 表示Number of itl slots
flg: O 表示此塊被放置在自由列表(freelist)中
typ: 1 – DATA,型別1表示資料,型別2表示索引
fsl: 0 ITL TX FREELIST SLOT
fnx: 0x0 自由列表中下一塊的地址
――――――――――――――――――――――――――――――――――
Itl Xid Uba Flag Lck Scn/Fsc
0x01 xid: 0x0006.03f.000000da uba: 0x00800ad2.00ae.04 --U- 2 fsc 0x0000.001148ee
這個事務列表中當前有一個事務,裡面記載著slot號,事務id,undo block address,受影響的行數,事務遞交時的scn等
Itl slot =0x01
事務id= xid: 0x0006.03f.000000da
由於xid由3部分組成,xid= Undo Segment Number +Transaction Table Slot Number+ Wrap ,得到
0x0006 – Undo Segment Number 03f – Transaction Table Slot Number 000000da– Wrap
回滾塊地址=uba: 0x00800ad2.00ae.04
由於uba由3部分組成,uba= Address of the last undo block used+ Sequence+ Last Entry in UNDO record map得到
0x00800ad2– Address of the last undo block used 00ae– Sequence 04– Last Entry in UNDO record map
flag標誌我引用的一段解釋,這裡的--U-表示已經遞交
---- = 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(number of rows affected by this transaction)表示這個事務所影響的行數,這裡是2行,正好對應2次insert
Scn/Fsc 標誌我引用的一段解釋
If the transaction has been cleaned out, this is the commit SCN or an upper bound thereof. Otherwise the leading two bytes contain the free space credit for the transaction - that is, the number of bytes freed in the block by the transaction
―――――――――――――――――――――――――――――――――――――――
data_block_dump
===============
tsiz: 0x1fb8
hsiz: 0x16
pbl: 0x0ec77444
bdba: 0x02c00003
flag=-----------
ntab=1
nrow=2
frre=-1
fsbo=0x16
fseo=0x1fac
avsp=0x1f90
tosp=0x1f90
0xe:pti[0] nrow=2 offs=0
0x12:pri[0] offs=0x1fb2
0x14:pri[1] offs=0x1fac
―――――――――――――――――――――――――――――――――――――――――
這一部分記載著一些儲存引數,簡單得分析一些,給出各個標誌的解釋
tsiz:Total Data Area Size(資料塊的大小)
hsiz:Data Header Size(資料塊頭大小)
pbl: ptr to buffer holding the block(指向這個資料塊在記憶體中映象的指標)
bdba: block dba / rdba(資料塊地址)
flag: n=pctfree hit (clusters),f=dont put on freelist k=flushable cluster keys
ntab: number of tables (>1 is a cluster)
nrow: number of rows
frre: first free row index entry, -1=you have to add one(沒有建立索引)
fsbo: free space begin offset(從hsiz開始)
fseo: free space end offset()
avsp: available space in the block(可用空間)
tosp: total available space when all txs commit
0xe:pti[0] nrow=2 offs=0本塊儲存2條記錄
0x12:pri[0] offs=0x1fb2---- 記錄的起始物理位置
―――――――――――――――――――――――――――――――――――――――――
終於見到到資料了,這個部分就儲存著對應的記錄,繼續分析
block_row_dump:
tab 0, row 0, @0x1fb2
tl: 6 fb: --H-FL-- lb: 0x1 cc: 1
col 0: [ 2] c1 02
tab 0, row 1, @0x1fac
tl: 6 fb: --H-FL-- lb: 0x1 cc: 1
col 0: [ 2] c1 03
end_of_block_dump
End dump data blocks tsn: 8 file#: 11 minblk 3 maxblk 3
―――――――――――――――――――――――――――――――――――――――
tl表示Row Size(number of bytes plus data)
fb:Flag Byte
H-head of row piece
F-first data piece
L-last data piece
Lb表示lock byte,表示這個事務在itl的入口
Cc表示number of columns in this Row piece,表示這一行只有1列
col 0: [ 2] c1 02 第一列,[2]表示長度,c1 02是資料(經過一套複雜的過程可以轉換成10進位制資料)
到此為止,資料塊的結構我們已經都把它展開並進行了分析,期待大家的繼續!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/76065/viewspace-795290/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- tempdb資料檔案暴增分析
- HDFS讀檔案過程分析:讀取檔案的Block資料BloC
- 分析Oracle資料庫日誌檔案(1)Oracle資料庫
- 分析Oracle資料庫日誌檔案(2)Oracle資料庫
- 分析Oracle資料庫日誌檔案(3)Oracle資料庫
- 建立資料庫檔案-日誌檔案-次要資料庫檔案資料庫
- Mysql資料庫配置檔案(my.ini)分析MySql資料庫
- 分析Oracle資料庫日誌檔案(三)EPOracle資料庫
- 分析Oracle資料庫日誌檔案(二)DOOracle資料庫
- 分析Oracle資料庫日誌檔案(一)HBOracle資料庫
- 分析Oracle資料庫日誌檔案(1)(轉)Oracle資料庫
- 分析Oracle資料庫日誌檔案(1) [轉]Oracle資料庫
- 資料檔案
- 常規管理法(檔案資料分析)(轉載)
- oracle資料庫移動資料檔案、日誌檔案和控制檔案Oracle資料庫
- 資料庫檔案和檔案組資料庫
- 資料庫引數檔案控制檔案日誌檔案資料檔案跟蹤檔案等8大檔案的字典資料庫
- 檔案與資料
- 資料泵檔案
- 從SQLFile檔案分析Oracle Data Pump資料匯入行為SQLOracle
- 資料檔案誤刪--但有資料檔案的copy恢復
- 資料檔案是否是smallfile型別檔案,其儲存是否達到資料檔案儲存上限,是否是多個資料檔案型別
- Oracle 資料檔案回收Oracle
- 畸形檔案 資料夾
- MySql資料庫——檔案MySql資料庫
- 資料檔案遷移
- mysql的資料檔案MySql
- 資料檔案收縮
- 臨時資料檔案
- 修改資料檔案地址
- Linux下誤刪資料檔案從檔案控制程式碼恢復資料檔案Linux
- oracle中移動控制檔案、資料檔案、日誌檔案Oracle
- RMAN備份資料檔案+控制檔案+歸檔日誌
- Oracle資料檔案和臨時檔案的管理Oracle
- 表空間&資料檔案和控制檔案(zt)
- 修改Oracle資料檔名及資料檔案存放路徑Oracle
- 資料檔案重建,從歸檔日誌中回退資料
- RMAN備份檔案遠大於資料庫大小的原因分析資料庫