眾所周知
我們知道數據庫儲存的最小單位是數據塊
典型的數據塊由
―――――――――――――――――――――――――――
***
buffer tsn:
scn:
frmt:
Block header dump:
Object id on Block? Y
seg/obj:
fsl:
――――――――――――――――――――――――――――
事務列表去包括了在這個數據塊內的事務
Itl Xid Uba Flag Lck Scn/Fsc
數據區顧名思義是真正存儲數據的地方
(以下是其大概的構造
―――――――――――――――――――――――――――
data_block_dump
===============
tsiz:
hsiz:
pbl:
bdba:
flag=
ntab=
nrow=
frre=
fsbo=
fseo=
avsp=
tosp=
block_row_dump:
tab
tl:
col
end_of_block_dump
End dump data blocks tsn:
―――――――――――――――――――――――――――
下面我們來做一個完整的實驗
SQL> create tablespace testblock datafile
size
表空間已創建
創建一個新用戶並指定默認表空間為testblock
SQL> create user testblock identified by testblock default tablespace testblock
temporary tablespace temp;
用戶已創建
SQL> grant create session to testblock;
授權成功
SQL> grant resource to testblock;
授權成功
SQL> connect testblock/testblock@test
已連接
SQL> create table testblock (a number);
表已創建
SQL> insert into testblock values(
已創建
SQL> insert into testblock values(
已創建
SQL> commit;
提交完成
SQL> connect internal/oracle@test
已連接
SQL> select header_file
HEADER_FILE HEADER_BLOCK
從這裡我們知道testblock表所在的數據文件號是
――――――――――――――――――――――――――――――――――
***
*** SESSION ID:(
buffer tsn:
scn:
frmt:
Extent Control Header
Extent Header:: spare
last map
Highwater::
#blocks in seg
#blocks below:
mapblk
Unlocked
Map Header:: next
Extent Map
nfl =
SEG LST:: flg: USED lhd:
End dump data blocks tsn:
――――――――――――――――――――――――――――――――――
這裡我們看到表空間號是tsn:
真正的數據是儲存在下一個塊也就是
――――――――――――――――――――――――――――――――――
***
buffer tsn:
scn:
frmt:
Block header dump:
Object id on Block? Y
seg/obj:
fsl:
Itl Xid Uba Flag Lck Scn/Fsc
data_block_dump
===============
tsiz:
hsiz:
pbl:
bdba:
flag=
ntab=
nrow=
frre=
fsbo=
fseo=
avsp=
tosp=
block_row_dump:
tab
tl:
col
tab
tl:
col
end_of_block_dump
End dump data blocks tsn:
――――――――――――――――――――――――――――――――――
謎團解開了
Block header dump:
Object id on Block? Y
seg/obj:
fsl:
數據塊地址正是
segment/object id為
SQL> select obj# from sys
OBJ#
csc(SCN at last Block CleanOut):
itc:
flg: O 表示此塊被放置在自由列表(freelist)中
typ:
fsl:
fnx:
――――――――――――――――――――――――――――――――――
Itl Xid Uba Flag Lck Scn/Fsc
這個事務列表中當前有一個事務
Itl slot =
事務id= xid:
由於xid由
回滾塊地址=uba:
由於uba由
flag標志我引用
C
Lck(number of rows affected by this transaction)表示這個事務所影響的行數
Scn/Fsc 標志我引用
If the transaction has been cleaned out
―――――――――――――――――――――――――――――――――――――――
data_block_dump
===============
tsiz:
hsiz:
pbl:
bdba:
flag=
ntab=
nrow=
frre=
fsbo=
fseo=
avsp=
tosp=
―――――――――――――――――――――――――――――――――――――――――
這一部分記載著一些儲存參數
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)
ntab: number of tables (>
nrow: number of rows
frre: first free row index entry
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
―――――――――――――――――――――――――――――――――――――――――
終於見到到數據了
block_row_dump:
tab
tl:
ol
tab
tl:
col
end_of_block_dump
End dump data blocks tsn:
―――――――――――――――――――――――――――――――――――――――
tl表示Row Size(number of bytes plus data)
fb:Flag Byte
H
F
L
Lb表示lock byte
Cc表示number of columns in this Row piece
col
到此為止
From:http://tw.wingwit.com/Article/program/Oracle/201311/18775.html