天天看點

Oracle ASM 翻譯系列第八彈:ASM Internal ASM file extent map

當asm建立一個檔案時(例如資料庫執行個體要求建立一個資料檔案),它會以extent為機關配置設定空間。一旦檔案被建立,asm會傳遞extent映射表給資料庫執行個體,後續資料庫執行個體能在不和asm執行個體互動的情況下通路這個檔案。如果一個檔案的extent需要被重新定位,比如磁盤組進行rebalance操作,asm會告知資料庫執行個體關于extent映射表的變更。

可以通過查詢asm執行個體的x$kffxp視圖來擷取asm檔案extent映射表的内容。x$kffxp視圖中的每一行對應着所有處于mount狀态磁盤組中每一個檔案的每一個實體extent的資訊。

譯者注:1)網絡上有不少關于x$kffxp視圖的解釋,有些資訊過于陳舊,需要指出,它記錄的每一條記錄都代表的是實體extent的資訊,而非au資訊,x$kffxp視圖的size_kffxp字段,代表了此extent是由幾個au組成的,在啟用11g可變extent特性後會出現size_kffxp大于1的情況,具體更多資訊參考本系列的第一篇文章。2)x$kffxp這裡翻譯成了x$kffxp視圖,隻是為了便于了解,它的本質是一個記憶體的資料結構(fixed table),其資料不在buffer_cache中。

x$kffxp視圖的重要字段包括:

group_kffxp 磁盤組編号。注意磁盤組編号不是恒久不變的,每次磁盤組被mount時都可能會不一樣。等同于v$asm_diskgroup.group_number字段。

number_kffxp 檔案序号。等同于 v$asm_file.file_number字段。 注意,asm的檔案序号不同于資料庫内的資料檔案序号,不要把兩個概念搞混了。小于256的asm檔案序号是保留給asm中繼資料檔案使用的。

incarn_kffxp 檔案版本号。當一個asm檔案序号被一個新檔案重用時,檔案版本号會發生改變。等同于v$asm_file.incarnation字段。注意,asm檔案是以檔案序号.版本号的方式結尾。

xnum_kffxp 虛拟extent序号。external備援磁盤組的虛拟extent序号與實體extent序号一緻。 normal備援磁盤組的虛拟extent序号通過将實體extent序号除于2得到.high備援磁盤組的虛拟extent序号通過将實體extent序号除于3得到.

pxn_kffxp 實體extent序号。一個檔案的實體extent序号都以數字0開始,順序遞增。

lxn_kffxp 虛拟extent中實體extent的序号。 0 為 primary extent, 1 為 secondary extent, 2 為 third copy of the extent。

disk_kffxp 實體磁盤序号。等同于v$asm_disk.disk_number。

au_kffxp au序号,磁盤次元的au編号,每個磁盤從0開始。

在asm執行個體中通過以下查詢,能夠看出磁盤組3内的asm中繼資料檔案的檔案序号,名字和au數量。

$ sqlplus / as sysasm

sql> select number_kffxp "asm file number", decode (number_kffxp,

1, 'file directory', 2, 'disk directory', 3, 'active change directory', 4, 'continuing operations directory',

5, 'template directory', 6, 'alias directory', 7, 'advm file directory', 8, 'disk free space directory',

9, 'attributes directory', 10, 'asm user directory', 11, 'asm user group directory', 12, 'staleness directory',

253, 'spfile for asm instance', 254, 'stale bit map space registry ', 255, 'oracle cluster repository registry') "asm metadata file name",

count(au_kffxp) "allocation units"

from x$kffxp

where group_kffxp=3 and number_kffxp<256

group by number_kffxp

order by 1;

asm file number asm metadata file name             allocation units

--------------- ---------------------------------- ----------------

1 file directory                                    3

2 disk directory                                    3

3 active change directory                          69

4 continuing operations directory                   6

5 template directory                                3

6 alias directory                                   3

8 disk free space directory                         3

9 attributes directory                              3

12 staleness directory                               3

253 spfile for asm instance                           2

254 stale bit map space registry                      3

255 oracle cluster repository registry              135

12 rows selected.

sql>

通過以上查詢結果可以發現,這個磁盤組并沒有包含所有類型的中繼資料檔案(例如第十号和第十一号檔案)。一個有意思的事情是,除了asm執行個體的spfile,每個檔案至少占用3個au,對于這一點更多詳細資訊我們會在其他章節介紹。

我們再來以一個資料庫控制檔案為例檢視下它的extent映射表

第1步,查找data磁盤組内所有的資料庫控制檔案(以grid所屬的os使用者身份運作asmcmd指令)

$ asmcmd find --type controlfile +data "*"

+data/dbm/controlfile/current.256.738247649

+data/br/controlfile/current.299.748434267

$

第2步,檢查data磁盤組的磁盤組序号(連接配接到asm執行個體)

sql> select group_number from v$asm_diskgroup where name='data';

group_number

------------

1

第3步,檢查磁盤組1中asm 256号檔案(+data/dbm/controlfile/current.256.738247649)的extent映射表

sql> select xnum_kffxp "virtual extent", pxn_kffxp "physical extent", lxn_kffxp "extent copy", disk_kffxp "disk", au_kffxp "allocation unit"

where group_kffxp=1 and number_kffxp=256 and xnum_kffxp<>2147483648

order by 1,2;

virtual extent physical extent extent copy       disk allocation unit

-------------- --------------- ----------- ---------- ---------------

0               0           0         20               5

0               1           1         29            1903

0               2           2          6              82

1               3           0         22               6

1               4           1         31               8

1               5           2          9               3

2               6           0         30               8

2               7           1         23            1907

2               8           2          7              63

3               9           0         26               2

3              10           1         16            1904

3              11           2          6               4

...

39             117           0         25            1913

39             118           1         15            1906

39             119           2          3              27

120 rows selected.

以上輸出可以看出這個控制檔案是三路鏡像,每個虛拟extent對應三個實體extent,還可以看出這個檔案每個au的實際位置。

<b>本文來自雲栖社群合作夥伴“dbgeek”</b>