Oracle ASM File Directory

eric0435發表於2016-12-28


Virtual Metadata
ASM虛擬後設資料被儲存在ASM檔案中。後設資料檔案目錄被ASM例項排他訪問。目錄的檔案號從1開始。註冊者會被保留給ASM檔案,它可以讓RDBMS例項來訪問與ASM例項一樣。註冊號小於255。檔案號被保留在將來使用。v$asm_file不會顯示後設資料目錄或註冊號。

像其它ASM檔案一樣,虛擬後設資料檔案概括磁碟組的冗餘型別進行映象。ASM不會對外部冗餘磁碟組提供映象。虛擬後設資料在正常冗餘與高階冗餘磁碟組中是三重映象。虛擬後設資料包含以下結構:

.File Directory
.Disk Directory
.Active Change Directory(ACD)
.Continuing Operations Directory(COD)
.Template Directory
.Alias Directory
.Attribute Directory
.Staleness Directory
.Staleness Registry

ASM的1號檔案--ASM檔案目錄,它用來跟蹤磁碟組中的所有檔案。當磁碟組是一個獨立的儲存單元時,每個磁碟組將會包含屬於它自己的ASM檔案目錄。

如果一個檔案被刪除,對於新建立的檔案ASM會使用它的檔案號,那麼檔案號將是唯一的,有不同的incarnation號。incarnation號是當檔案建立時由時間來推算出來的,它保證對於相同檔案號來說incarnation號是唯一的。

ASM檔案的塊大小是獨立於ASM後設資料塊大小。所有的ASM後設資料目錄的塊大小為4K。RDBMS資料檔案在建立表空間時指定的塊大小可以是2K,4K,8K,16K或32K。RDBMS的redo log檔案通常的塊大小是512 byte。ASM跟蹤邏輯檔案大小,透過資料庫,與磁碟組中所佔用的物理空間,考慮檔案的冗餘可以很顯然的看出。RDBMS在檔案建立時也提供了檔案型別。對於不是由RDBMS例項顯式建立的檔案(比如由XML DB ftp命令或ASMCMD cp命令所建立的檔案),ASM為了在建立時判斷檔案型別會檢查檔案頭。

檔案建立時間有一個明顯的語義。檔案修改時間,然後不是每次更新時間檔案都會寫入。而是當檔案被開啟執地寫操作時檔案修改時間會被更新。這意味著即使檔案沒有被寫入,檔案的修改時間也可能發生改變,並且儲存的修改時間可能比修改檔案內容所處的時間早。為了減小在叢集ASM例項中的buffer cache中的檔案目錄塊的競爭,修改時間以小時為精度。因此,在RAC中多個例項以較短時間開啟檔案,那麼只有第一個訪問檔案的例項需要更新檔案修改時間。

檔案的佈局資訊由一系列的區指標組成。區指標指定了磁碟號與區所在的AU號。檔案目錄條目包含了一個檔案的前60個區指標,有時也叫direct extens。檔案目錄剩餘的部分包含了指向indirect extents的指標。indirect extents是其它虛擬後設資料區,包含ASM檔案的區指標。每個indirect extent是一個AU。每個檔案目錄條目可以包含最多300個indirect exten。indirect指標的概念存在於大多數傳統檔案系統中,比如Unix的BSD檔案系統。檔案佈局的解釋也叫extent map,檔案佈局受條帶與冗餘的影響。

雖然這是一個內部(ASM後設資料)檔案,但是它像磁碟組中的任何其它ASM檔案一樣被管理。在ASM檔案目錄中有屬於它自己的條目(指向了它自己),在normal與high冗餘磁碟組中,它也會生成映象副本並且隨著新檔案的產生,ASM檔案目錄的大小也會增長。

每個ASM檔案目錄條目包含了以下內容:
.檔案大小
.檔案塊大小
.檔案型別
.檔案冗餘級別
.檔案帶條配置
.前60個區指標(也叫Direct區指標)
.當檔案超過60個區,就會有indirect區指標
.檔案建立時間戳
.檔案最後修改時間戳
.指向ASM Alias目錄的檔名

每個新增加的ASM檔案會分配到一個號碼,這個號碼是隨著新增檔案而順序遞增的。檔案的號碼與檔案目錄中的block號碼也是完全對應的,也就是說,檔案目錄的1號block描述了他自己也就是1號檔案的資訊。2號block是描述2號檔案的,300號block是描述300號檔案的,4000號block是關於4000號檔案的,以此類推。如下,是ASM的263號檔案,kfbh.block.blk指出了檔案目錄裡塊的編號,此編號也是檔案的編號。

[grid@jyrac1 ~]$ kfed read /dev/raw/raw3 aun=77 blkn=7 | more
kfbh.endian:                          1 ; 0x000: 0x01
kfbh.hard:                          130 ; 0x001: 0x82
kfbh.type:                            4 ; 0x002: KFBTYP_FILEDIR
kfbh.datfmt:                          1 ; 0x003: 0x01
kfbh.block.blk:                     263 ; 0x004: blk=263
kfbh.block.obj:                       1 ; 0x008: file=1
kfbh.check:                   857258416 ; 0x00c: 0x3318b9b0
kfbh.fcn.base:                     3715 ; 0x010: 0x00000e83
kfbh.fcn.wrap:                        0 ; 0x014: 0x00000000
kfbh.spare1:                          0 ; 0x018: 0x00000000
kfbh.spare2:                          0 ; 0x01c: 0x00000000
kfffdb.node.incarn:           930413057 ; 0x000: A=1 NUMM=0x1bba7d00
kfffdb.node.frlist.number:   4294967295 ; 0x004: 0xffffffff
kfffdb.node.frlist.incarn:            0 ; 0x008: A=0 NUMM=0x0
kfffdb.hibytes:                       0 ; 0x00c: 0x00000000
kfffdb.lobytes:                 5251072 ; 0x010: 0x00502000
kfffdb.xtntcnt:                      12 ; 0x014: 0x0000000c
kfffdb.xtnteof:                      12 ; 0x018: 0x0000000c
kfffdb.blkSize:                    8192 ; 0x01c: 0x00002000
kfffdb.flags:                        17 ; 0x020: O=1 S=0 S=0 D=0 C=1 I=0 R=0 A=0
kfffdb.fileType:                      2 ; 0x021: 0x02
kfffdb.dXrs:                         18 ; 0x022: SCHE=0x1 NUMB=0x2
kfffdb.iXrs:                         19 ; 0x023: SCHE=0x1 NUMB=0x3
kfffdb.dXsiz[0]:             4294967295 ; 0x024: 0xffffffff
kfffdb.dXsiz[1]:                      0 ; 0x028: 0x00000000
kfffdb.dXsiz[2]:                      0 ; 0x02c: 0x00000000
kfffdb.iXsiz[0]:             4294967295 ; 0x030: 0xffffffff
kfffdb.iXsiz[1]:                      0 ; 0x034: 0x00000000
kfffdb.iXsiz[2]:                      0 ; 0x038: 0x00000000
kfffdb.xtntblk:                      12 ; 0x03c: 0x000c
kfffdb.break:                        60 ; 0x03e: 0x003c
kfffdb.priZn:                         0 ; 0x040: KFDZN_COLD
kfffdb.secZn:                         0 ; 0x041: KFDZN_COLD
kfffdb.ub2spare:                      0 ; 0x042: 0x0000
kfffdb.alias[0]:                    111 ; 0x044: 0x0000006f
kfffdb.alias[1]:             4294967295 ; 0x048: 0xffffffff
kfffdb.strpwdth:                      1 ; 0x04c: 0x01
kfffdb.strpsz:                       20 ; 0x04d: 0x14
kfffdb.usmsz:                         0 ; 0x04e: 0x0000
kfffdb.crets.hi:               33042832 ; 0x050: HOUR=0x10 DAYS=0xc MNTH=0xc YEAR=0x7e0
kfffdb.crets.lo:              286709760 ; 0x054: USEC=0x0 MSEC=0x1b6 SECS=0x11 MINS=0x4
kfffdb.modts.hi:               33042897 ; 0x058: HOUR=0x11 DAYS=0xe MNTH=0xc YEAR=0x7e0
kfffdb.modts.lo:                      0 ; 0x05c: USEC=0x0 MSEC=0x0 SECS=0x0 MINS=0x0
kfffdb.dasz[0]:                       0 ; 0x060: 0x00

不存在編號為0的ASM檔案,所以檔案目錄的0號block不描述任何檔案的資訊。ASM檔案目錄與ASM的AT表是兩個相輔相成的資料結構。ALTER DISKGROUP CHECK命令可以檢查兩個資料結構是不是一致的。透過為ALTER DISKGROUP CHECK語句可以用來校驗磁碟組元資訊的內部一致性,可以指定在磁碟組、磁碟、檔案、failgroup級別進行元資訊一致性的校驗,能夠成功執行此命令的前提條件是磁碟組必須處於mount狀態。預設情況下,check disk group 子句會校驗所有的元資訊目錄,在校驗過程中如果有錯誤資訊,會記錄在ASM的alert檔案中,check語句一般會執行如下的操作:
1.檢查磁碟的一致性
2.檢查檔案extent map和AT表之間的一致性
3.檢查alias元資訊目錄和檔案目錄之間對應關係的正確性
4.檢查alias目錄樹的正確性
5.檢查ASM元資訊目錄是否有不可訪問的塊。
我們可以在語句中新增repair或norepair關鍵字來指定ASM是否嘗試修復檢查過程中發生的錯誤,預設為norepair。

V$ASM_FILE and V$ASM_ALIAS檢視
SM檔案目錄中描述的大部分資訊都可以透過V$ASM_FILE檢視查詢到。對於處於mount狀態的磁碟組中的每個檔案,該檢視中會以一行來展示。然而,該檢視中並不會顯示ASM元資訊檔案的資訊。V$ASM_FILE檢視中沒有描述檔名的列,所以為了得到一個有意義的輸出,同時我們還需要聯合V$ASM_ALIAS檢視。例如:

SQL> select f.group_number, f.file_number, a.name, f.type from v$asm_file f, v$asm_alias a where f.group_number=a.group_number  and f.group_number=3 and 

f.file_number=a.file_number order by 1, 2;

GROUP_NUMBER FILE_NUMBER NAME                                     TYPE
------------ ----------- ---------------------------------------- --------------------
           3         256 SPFILE.256.930411925                     PARAMETERFILE
           3         256 spfilejyrac.ora                          PARAMETERFILE
           3         257 current.257.930412709                    CONTROLFILE
           3         258 SYSAUX.258.930413055                     DATAFILE
           3         259 SYSTEM.259.930413057                     DATAFILE
           3         260 EXAMPLE.260.930413057                    DATAFILE
           3         261 UNDOTBS2.261.930413057                   DATAFILE
           3         262 UNDOTBS1.262.930413057                   DATAFILE
           3         263 USERS.263.930413057                      DATAFILE
           3         264 group_1.264.930413221                    ONLINELOG
           3         265 group_2.265.930413225                    ONLINELOG
           3         266 group_3.266.930413227                    ONLINELOG
           3         267 group_4.267.930413231                    ONLINELOG
           3         268 TEMP.268.930413239                       TEMPFILE
           3         269 FILE_TRANSFER_0_0.269.930515105          DUMPSET
           3         269 tts.dmp                                  DUMPSET
           3         270 test01.dbf                               DATAFILE
           3         270 FILE_TRANSFER.270.930515465              DATAFILE

18 rows selected.

不同磁碟組中的檔案可以有相同的檔案編號。例如,在1號磁碟組中的歸檔重做日誌的檔案號為(261-266),而上面3號磁碟組中的檔案號為(256-270),兩個磁碟組存在重複的檔案號。

SQL> select f.group_number, f.file_number, a.name, f.type from v$asm_file f, v$asm_alias a where f.group_number=a.group_number  and f.group_number=1 and 

f.file_number=a.file_number order by 1, 2;


GROUP_NUMBER FILE_NUMBER NAME                                     TYPE
------------ ----------- ---------------------------------------- --------------------
           1         261 thread_2_seq_117.261.930410687           ARCHIVELOG
           1         262 thread_2_seq_118.262.930410761           ARCHIVELOG
           1         262 2_118_928610797.dbf                      ARCHIVELOG
           1         263 1_56_928610797.dbf                       ARCHIVELOG
           1         263 thread_1_seq_56.263.930410761            ARCHIVELOG
           1         264 1_57_928610797.dbf                       ARCHIVELOG
           1         264 thread_1_seq_57.264.930411019            ARCHIVELOG
           1         265 thread_2_seq_1.265.930413237             ARCHIVELOG
           1         265 2_1_930413221.dbf                        ARCHIVELOG
           1         266 2_2_930413221.dbf                        ARCHIVELOG
           1         266 thread_2_seq_2.266.930434449             ARCHIVELOG

ASM檔案目錄儲存位置
我們可以在ASM例項中透過查詢X$KFFXP檢視來獲取磁碟組DATADG中編號為1的檔案所分配的AU。

SQL> select group_number,name from v$asm_diskgroup;

GROUP_NUMBER NAME
------------ ----------------------------------------
           1 ARCHDG
           2 CRSDG
           3 DATADG
           4 TESTDG


SQL> select group_number,disk_number,name,state,path from v$asm_disk where group_number=3;

GROUP_NUMBER DISK_NUMBER NAME                                     STATE      PATH
------------ ----------- ---------------------------------------- ---------- ------------------------------
           3           0 DATADG_0001                              NORMAL     /dev/raw/raw11
           3           3 DATADG_0000                              NORMAL     /dev/raw/raw10
           3           1 DATADG_0003                              NORMAL     /dev/raw/raw4
           3           2 DATADG_0002                              NORMAL     /dev/raw/raw3

SQL> select xnum_kffxp "virtual extent",pxn_kffxp "physical extent",au_kffxp "allocation unit",disk_kffxp "disk"
  2  from x$kffxp
  3  where group_kffxp=3 and number_kffxp=1 order by 1, 2;

virtual extent physical extent allocation unit       disk
-------------- --------------- --------------- ----------
             0               0               2          0
             0               1               2          2
             0               2               2          1
             1               3              76          3
             1               4              77          2
             1               5              76          1

6 rows selected.

從以上輸出結果可以看到:ASM檔案目錄有三份映象(每個virtual extent都有3個physical extent);當前ASM檔案目錄包含兩個virtual extent(0,1)。當AU大小為1MB且ASM元資訊block大小為4KB時,一個AU可以容納256個目錄條目。檔案編號1-255是為ASM元資訊檔案預留,所以0號extent只用來容納元資訊檔案的條目,1號extent則容納接下來的256個非元資訊檔案的資訊,以此類推。

透過kfed 讀取asm磁碟頭的kfdhdb.f1b1locn部分,可以獲得ASM一號檔案所在的AU,例如下面的例子裡顯示了磁碟組DATADG中的一號檔案在磁碟(/dev/raw/raw3)的2號AU處,磁碟(/dev/raw/ra10)中kfdhdb.f1b1locn=0代表這個磁碟並沒有一號檔案的複製。因為0號(虛擬)extent用來儲存ASM元資訊並且分別儲存在disk:0(/dev/raw/raw11),1(/dev/raw/raw4),2(/dev/raw/raw3中的AU 2中,下面的輸出資訊與上面所查詢的ASM檔案目錄分佈完全一致。

SQL> select group_number,disk_number,name,state,path from v$asm_disk where group_number=3 order by disk_number asc;

GROUP_NUMBER DISK_NUMBER NAME                           STATE                          PATH
------------ ----------- ------------------------------ ------------------------------ ------------------------------
           3           0 DATADG_0001                    NORMAL                         /dev/raw/raw11
           3           1 DATADG_0003                    NORMAL                         /dev/raw/raw4
           3           2 DATADG_0002                    NORMAL                         /dev/raw/raw3
           3           3 DATADG_0000                    NORMAL                         /dev/raw/raw10

[grid@jyrac1 ~]$ kfed read /dev/raw/raw11 | grep kfdhdb.f1b1locn
kfdhdb.f1b1locn:                      2 ; 0x0d4: 0x00000002
[grid@jyrac1 ~]$ kfed read /dev/raw/raw4 | grep kfdhdb.f1b1locn
kfdhdb.f1b1locn:                      2 ; 0x0d4: 0x00000002
[grid@jyrac1 ~]$ kfed read /dev/raw/raw3 | grep kfdhdb.f1b1locn
kfdhdb.f1b1locn:                      2 ; 0x0d4: 0x00000002
[grid@jyrac1 ~]$ kfed read /dev/raw/raw10 | grep kfdhdb.f1b1locn
kfdhdb.f1b1locn:                      0 ; 0x0d4: 0x00000000


1號檔案總是開始在0號磁碟2號AU,記住這個位置:0號盤2號AU。這是ASM中定位檔案的起點,它的作用,有點相當於磁碟上的引導區,在電腦開機後負責將OS啟動起來。1號檔案在最少情況下,至少有兩個AU。上面我們提到過了,在1號檔案中,每個檔案佔用一個後設資料塊,存放自身的空間分佈資訊。每個後設資料塊大小是4K,一個AU是1M,哪麼,每個AU中,可以儲存256個檔案的空間分佈資訊。這其中,0號盤2號AU中,全是元檔案的資訊。再具體一點,0號盤2號AU,第一個後設資料塊被系統佔用,從第二個塊開始,到255為止,共255個後設資料塊,對應索引號1至255的檔案。其實,也就是全部的元檔案了。也就是說0號盤2號AU,儲存了全部元檔案的空間分佈資訊。1號檔案的第二個AU,從第一個塊開始,儲存256號檔案。第二個塊對應257號檔案,等等。每次從ASM中讀資料時,Oracle都要先讀到1號檔案,從中找出要讀的目標檔案在磁碟上的分佈位置,然後再去讀取相應的檔案的資料。

[grid@jyrac1 ~]$ kfed read /dev/raw/raw11 aun=2 blkn=1 | more
kfbh.endian:                          1 ; 0x000: 0x01
kfbh.hard:                          130 ; 0x001: 0x82
kfbh.type:                            4 ; 0x002: KFBTYP_FILEDIR
kfbh.datfmt:                          1 ; 0x003: 0x01
kfbh.block.blk:                       1 ; 0x004: blk=1
kfbh.block.obj:                       1 ; 0x008: file=1
kfbh.check:                  2717147277 ; 0x00c: 0xa1f4608d
kfbh.fcn.base:                      569 ; 0x010: 0x00000239
kfbh.fcn.wrap:                        0 ; 0x014: 0x00000000
kfbh.spare1:                          0 ; 0x018: 0x00000000
kfbh.spare2:                          0 ; 0x01c: 0x00000000
kfffdb.node.incarn:                   1 ; 0x000: A=1 NUMM=0x0
kfffdb.node.frlist.number:   4294967295 ; 0x004: 0xffffffff
kfffdb.node.frlist.incarn:            0 ; 0x008: A=0 NUMM=0x0
kfffdb.hibytes:                       0 ; 0x00c: 0x00000000
kfffdb.lobytes:                 2097152 ; 0x010: 0x00200000
kfffdb.xtntcnt:                       6 ; 0x014: 0x00000006
kfffdb.xtnteof:                       6 ; 0x018: 0x00000006
kfffdb.blkSize:                    4096 ; 0x01c: 0x00001000
kfffdb.flags:                         1 ; 0x020: O=1 S=0 S=0 D=0 C=0 I=0 R=0 A=0
kfffdb.fileType:                     15 ; 0x021: 0x0f
kfffdb.dXrs:                         19 ; 0x022: SCHE=0x1 NUMB=0x3
kfffdb.iXrs:                         19 ; 0x023: SCHE=0x1 NUMB=0x3
kfffdb.dXsiz[0]:             4294967295 ; 0x024: 0xffffffff
kfffdb.dXsiz[1]:                      0 ; 0x028: 0x00000000
kfffdb.dXsiz[2]:                      0 ; 0x02c: 0x00000000
kfffdb.iXsiz[0]:             4294967295 ; 0x030: 0xffffffff
kfffdb.iXsiz[1]:                      0 ; 0x034: 0x00000000
kfffdb.iXsiz[2]:                      0 ; 0x038: 0x00000000
kfffdb.xtntblk:                       6 ; 0x03c: 0x0006
kfffdb.break:                        60 ; 0x03e: 0x003c
kfffdb.priZn:                         0 ; 0x040: KFDZN_COLD
kfffdb.secZn:                         0 ; 0x041: KFDZN_COLD
kfffdb.ub2spare:                      0 ; 0x042: 0x0000
kfffdb.alias[0]:             4294967295 ; 0x044: 0xffffffff
kfffdb.alias[1]:             4294967295 ; 0x048: 0xffffffff
kfffdb.strpwdth:                      0 ; 0x04c: 0x00
kfffdb.strpsz:                        0 ; 0x04d: 0x00
kfffdb.usmsz:                         0 ; 0x04e: 0x0000
kfffdb.crets.hi:               33042831 ; 0x050: HOUR=0xf DAYS=0xc MNTH=0xc YEAR=0x7e0
kfffdb.crets.lo:             2457402368 ; 0x054: USEC=0x0 MSEC=0x23f SECS=0x27 MINS=0x24
kfffdb.modts.hi:               33042831 ; 0x058: HOUR=0xf DAYS=0xc MNTH=0xc YEAR=0x7e0
kfffdb.modts.lo:             2457402368 ; 0x05c: USEC=0x0 MSEC=0x23f SECS=0x27 MINS=0x24
kfffdb.dasz[0]:                       0 ; 0x060: 0x00
kfffdb.dasz[1]:                       0 ; 0x061: 0x00
kfffdb.dasz[2]:                       0 ; 0x062: 0x00
kfffdb.dasz[3]:                       0 ; 0x063: 0x00
kfffdb.permissn:                      0 ; 0x064: 0x00
kfffdb.ub1spar1:                      0 ; 0x065: 0x00
kfffdb.ub2spar2:                      0 ; 0x066: 0x0000
kfffdb.user.entnum:                   0 ; 0x068: 0x0000
kfffdb.user.entinc:                   0 ; 0x06a: 0x0000
kfffdb.group.entnum:                  0 ; 0x06c: 0x0000
kfffdb.group.entinc:                  0 ; 0x06e: 0x0000
kfffdb.spare[0]:                      0 ; 0x070: 0x00000000
kfffdb.spare[1]:                      0 ; 0x074: 0x00000000
kfffdb.spare[2]:                      0 ; 0x078: 0x00000000
kfffdb.spare[3]:                      0 ; 0x07c: 0x00000000
kfffdb.spare[4]:                      0 ; 0x080: 0x00000000
kfffdb.spare[5]:                      0 ; 0x084: 0x00000000
kfffdb.spare[6]:                      0 ; 0x088: 0x00000000
kfffdb.spare[7]:                      0 ; 0x08c: 0x00000000
kfffdb.spare[8]:                      0 ; 0x090: 0x00000000
kfffdb.spare[9]:                      0 ; 0x094: 0x00000000
kfffdb.spare[10]:                     0 ; 0x098: 0x00000000
kfffdb.spare[11]:                     0 ; 0x09c: 0x00000000
kfffdb.usm:                             ; 0x0a0: length=0
kfffde[0].xptr.au:                    2 ; 0x4a0: 0x00000002
kfffde[0].xptr.disk:                  0 ; 0x4a4: 0x0000
kfffde[0].xptr.flags:                 0 ; 0x4a6: L=0 E=0 D=0 S=0
kfffde[0].xptr.chk:                  40 ; 0x4a7: 0x28
kfffde[1].xptr.au:                    2 ; 0x4a8: 0x00000002
kfffde[1].xptr.disk:                  2 ; 0x4ac: 0x0002
kfffde[1].xptr.flags:                 0 ; 0x4ae: L=0 E=0 D=0 S=0
kfffde[1].xptr.chk:                  42 ; 0x4af: 0x2a
kfffde[2].xptr.au:                    2 ; 0x4b0: 0x00000002
kfffde[2].xptr.disk:                  1 ; 0x4b4: 0x0001
kfffde[2].xptr.flags:                 0 ; 0x4b6: L=0 E=0 D=0 S=0
kfffde[2].xptr.chk:                  41 ; 0x4b7: 0x29
kfffde[3].xptr.au:                   76 ; 0x4b8: 0x0000004c
kfffde[3].xptr.disk:                  3 ; 0x4bc: 0x0003
kfffde[3].xptr.flags:                 0 ; 0x4be: L=0 E=0 D=0 S=0
kfffde[3].xptr.chk:                 101 ; 0x4bf: 0x65
kfffde[4].xptr.au:                   77 ; 0x4c0: 0x0000004d
kfffde[4].xptr.disk:                  2 ; 0x4c4: 0x0002
kfffde[4].xptr.flags:                 0 ; 0x4c6: L=0 E=0 D=0 S=0
kfffde[4].xptr.chk:                 101 ; 0x4c7: 0x65
kfffde[5].xptr.au:                   76 ; 0x4c8: 0x0000004c
kfffde[5].xptr.disk:                  1 ; 0x4cc: 0x0001
kfffde[5].xptr.flags:                 0 ; 0x4ce: L=0 E=0 D=0 S=0
kfffde[5].xptr.chk:                 103 ; 0x4cf: 0x67
kfffde[6].xptr.au:           4294967295 ; 0x4d0: 0xffffffff
kfffde[6].xptr.disk:              65535 ; 0x4d4: 0xffff
kfffde[6].xptr.flags:                 0 ; 0x4d6: L=0 E=0 D=0 S=0
kfffde[6].xptr.chk:                  42 ; 0x4d7: 0x2a

kfffde,是結構陣列。由於我這裡ASM檔案目錄有三份映象,kfffde[0]的資料元素,
存放了1號檔案第一個AU的位置。kfffde[1]存放了1號檔案第二個AU位置,kfffde[2]存放了1號檔案第三個AU位置等等,依次類推。我們來看一下上面的資訊:
kfffde[0].xptr.au=2 --2號AU
kfffde[0].xptr.disk=0 --0號磁碟
上兩個資訊合起來,0號盤2號AU,這就是1號檔案第一個AU的位置
kfffde[1].xptr.au=2 --2號AU
kfffde[1].xptr.disk=2 --2號磁碟
kfffde[2].xptr.au=2 --2號AU
kfffde[2].xptr.disk=1 --1號磁碟
上面的資訊顯示了1號檔案的映象副本儲存在2號盤2號AU與1號盤的2號AU中。這與用查詢x$kffxp檢視所得到的後設資料分佈情況一致。

kfffde[3]到kfffde[5]儲存的就是2號檔案(磁碟目錄)的分佈情況
kfffde[3].xptr.au=76 --76號AU
kfffde[3].xptr.disk=3 --3號磁碟
上兩個資訊合起來,3號盤76號AU,這就是2號檔案第一個AU的位置
kfffde[4].xptr.au=77 --77號AU
kfffde[4].xptr.disk=2 --2號磁碟
kfffde[5].xptr.au=76 --76號AU
kfffde[5].xptr.disk=1 --1號磁碟
上面的資訊顯示了2號檔案(磁碟目錄)的映象副本儲存在2號盤77號AU與1號盤的76號AU中。這與用查詢x$kffxp檢視所得到的非元資訊檔案的資訊分佈情況一致。

ASM file directory entries for database files
透過以下查詢可以知道哪些檔案是被我的ASM例項所管理的

SQL> select file_number "asm file number", name "file name" from v$asm_alias where group_number=3 order by 1;

asm file number file name
--------------- --------------------------------------------------------------------------------------------------------------------------------------------
            256 SPFILE.256.930411925
            256 spfilejyrac.ora
            257 current.257.930412709
            258 SYSAUX.258.930413055
            259 SYSTEM.259.930413057
            260 EXAMPLE.260.930413057
            261 UNDOTBS2.261.930413057
            262 UNDOTBS1.262.930413057
            263 USERS.263.930413057
            264 group_1.264.930413221
            265 group_2.265.930413225
            266 group_3.266.930413227
            267 group_4.267.930413231
            268 TEMP.268.930413239
            269 tts.dmp
            270 test01.dbf
            ...
27 rows selected.

接下來看一下263號檔案(USERS.263.930413057)對應的的檔案目錄條目。首先,透過查詢X$KFFXP獲得該檔案的extent和AU分佈:

SQL> select xnum_kffxp "virtual extent",
  2  pxn_kffxp "physical extent",
  3  au_kffxp "allocation unit",
  4  disk_kffxp "disk"
  5  from x$kffxp
  6  where group_kffxp=3 
  7  and number_kffxp=263 
  8  and xnum_kffxp <> 2147483648
  9  order by 1, 2;

virtual extent physical extent allocation unit       disk
-------------- --------------- --------------- ----------
             0               0            1309          3
             0               1            1309          2
             1               2            1310          2
             1               3            1310          3
             2               4            1310          1
             2               5            1314          0
             3               6            1315          0
             3               7            1311          2
             4               8            1311          3
             4               9            1311          1
             5              10            1312          2
             5              11            1316          0

12 rows selected.

我們看到例項為該檔案分配了6個virtual extent,並且該檔案是兩倍冗餘。接下來查詢DATA磁碟組包含的磁碟的編號和路徑。

SQL> select disk_number, path from v$asm_disk where group_number=3 order by 1;

DISK_NUMBER PATH
----------- ------------------------------
          0 /dev/raw/raw11
          1 /dev/raw/raw4
          2 /dev/raw/raw3
          3 /dev/raw/raw10

之前所查詢到的ASM檔案目錄分佈如下:

SQL> select xnum_kffxp "virtual extent",pxn_kffxp "physical extent",au_kffxp "allocation unit",disk_kffxp "disk"
  2  from x$kffxp
  3  where group_kffxp=3 and number_kffxp=1 order by 1, 2;

virtual extent physical extent allocation unit       disk
-------------- --------------- --------------- ----------
             0               0               2          0
             0               1               2          2
             0               2               2          1
             1               3              76          3
             1               4              77          2
             1               5              76          1

6 rows selected.

現在我們透過kfed工具來檢視該檔案的ASM檔案目錄條目,它會在檔案目錄的263號block,也就是檔案目錄中1號(虛擬)extent的7號block(263減去256得出7)。1號extent位於3號磁碟的第76個AU,並在1號磁碟的第76個AU和2號磁碟的第77個AU上分別存在一份冗餘。。下面我們來看看3號磁碟(/dev/raw/raw10)的第76個AU,1號磁碟(1 /dev/raw/raw4)的第76個AU與2號磁碟(/dev/raw/raw3)的第77個AU是否儲存相同資訊。

[grid@jyrac1 ~]$ kfed read /dev/raw/raw10 aun=76 blkn=7 | more
kfbh.endian:                          1 ; 0x000: 0x01
kfbh.hard:                          130 ; 0x001: 0x82
kfbh.type:                            4 ; 0x002: KFBTYP_FILEDIR
kfbh.datfmt:                          1 ; 0x003: 0x01
kfbh.block.blk:                     263 ; 0x004: blk=263
kfbh.block.obj:                       1 ; 0x008: file=1
kfbh.check:                   857258416 ; 0x00c: 0x3318b9b0
kfbh.fcn.base:                     3715 ; 0x010: 0x00000e83
kfbh.fcn.wrap:                        0 ; 0x014: 0x00000000
kfbh.spare1:                          0 ; 0x018: 0x00000000
kfbh.spare2:                          0 ; 0x01c: 0x00000000
kfffdb.node.incarn:           930413057 ; 0x000: A=1 NUMM=0x1bba7d00
kfffdb.node.frlist.number:   4294967295 ; 0x004: 0xffffffff
kfffdb.node.frlist.incarn:            0 ; 0x008: A=0 NUMM=0x0
kfffdb.hibytes:                       0 ; 0x00c: 0x00000000
kfffdb.lobytes:                 5251072 ; 0x010: 0x00502000
kfffdb.xtntcnt:                      12 ; 0x014: 0x0000000c
kfffdb.xtnteof:                      12 ; 0x018: 0x0000000c
kfffdb.blkSize:                    8192 ; 0x01c: 0x00002000
kfffdb.flags:                        17 ; 0x020: O=1 S=0 S=0 D=0 C=1 I=0 R=0 A=0
kfffdb.fileType:                      2 ; 0x021: 0x02
kfffdb.dXrs:                         18 ; 0x022: SCHE=0x1 NUMB=0x2
kfffdb.iXrs:                         19 ; 0x023: SCHE=0x1 NUMB=0x3
kfffdb.dXsiz[0]:             4294967295 ; 0x024: 0xffffffff
kfffdb.dXsiz[1]:                      0 ; 0x028: 0x00000000
kfffdb.dXsiz[2]:                      0 ; 0x02c: 0x00000000
kfffdb.iXsiz[0]:             4294967295 ; 0x030: 0xffffffff
kfffdb.iXsiz[1]:                      0 ; 0x034: 0x00000000
kfffdb.iXsiz[2]:                      0 ; 0x038: 0x00000000
kfffdb.xtntblk:                      12 ; 0x03c: 0x000c
kfffdb.break:                        60 ; 0x03e: 0x003c
kfffdb.priZn:                         0 ; 0x040: KFDZN_COLD
kfffdb.secZn:                         0 ; 0x041: KFDZN_COLD
kfffdb.ub2spare:                      0 ; 0x042: 0x0000
kfffdb.alias[0]:                    111 ; 0x044: 0x0000006f
kfffdb.alias[1]:             4294967295 ; 0x048: 0xffffffff
kfffdb.strpwdth:                      1 ; 0x04c: 0x01
kfffdb.strpsz:                       20 ; 0x04d: 0x14
kfffdb.usmsz:                         0 ; 0x04e: 0x0000
kfffdb.crets.hi:               33042832 ; 0x050: HOUR=0x10 DAYS=0xc MNTH=0xc YEAR=0x7e0
kfffdb.crets.lo:              286709760 ; 0x054: USEC=0x0 MSEC=0x1b6 SECS=0x11 MINS=0x4
kfffdb.modts.hi:               33042897 ; 0x058: HOUR=0x11 DAYS=0xe MNTH=0xc YEAR=0x7e0
kfffdb.modts.lo:                      0 ; 0x05c: USEC=0x0 MSEC=0x0 SECS=0x0 MINS=0x0
kfffdb.dasz[0]:                       0 ; 0x060: 0x00
kfffdb.dasz[1]:                       0 ; 0x061: 0x00
kfffdb.dasz[2]:                       0 ; 0x062: 0x00
kfffdb.dasz[3]:                       0 ; 0x063: 0x00
kfffdb.permissn:                      0 ; 0x064: 0x00
kfffdb.ub1spar1:                      0 ; 0x065: 0x00
kfffdb.ub2spar2:                      0 ; 0x066: 0x0000
kfffdb.user.entnum:                   0 ; 0x068: 0x0000
kfffdb.user.entinc:                   0 ; 0x06a: 0x0000
kfffdb.group.entnum:                  0 ; 0x06c: 0x0000
kfffdb.group.entinc:                  0 ; 0x06e: 0x0000
kfffdb.spare[0]:                      0 ; 0x070: 0x00000000
kfffdb.spare[1]:                      0 ; 0x074: 0x00000000
kfffdb.spare[2]:                      0 ; 0x078: 0x00000000
kfffdb.spare[3]:                      0 ; 0x07c: 0x00000000
kfffdb.spare[4]:                      0 ; 0x080: 0x00000000
kfffdb.spare[5]:                      0 ; 0x084: 0x00000000
kfffdb.spare[6]:                      0 ; 0x088: 0x00000000
kfffdb.spare[7]:                      0 ; 0x08c: 0x00000000
kfffdb.spare[8]:                      0 ; 0x090: 0x00000000
kfffdb.spare[9]:                      0 ; 0x094: 0x00000000
kfffdb.spare[10]:                     0 ; 0x098: 0x00000000
kfffdb.spare[11]:                     0 ; 0x09c: 0x00000000
kfffdb.usm:                             ; 0x0a0: length=0
kfffde[0].xptr.au:                 1309 ; 0x4a0: 0x0000051d
kfffde[0].xptr.disk:                  3 ; 0x4a4: 0x0003
kfffde[0].xptr.flags:                 0 ; 0x4a6: L=0 E=0 D=0 S=0
kfffde[0].xptr.chk:                  49 ; 0x4a7: 0x31
kfffde[1].xptr.au:                 1309 ; 0x4a8: 0x0000051d
kfffde[1].xptr.disk:                  2 ; 0x4ac: 0x0002
kfffde[1].xptr.flags:                 0 ; 0x4ae: L=0 E=0 D=0 S=0
kfffde[1].xptr.chk:                  48 ; 0x4af: 0x30
kfffde[2].xptr.au:                 1310 ; 0x4b0: 0x0000051e
kfffde[2].xptr.disk:                  2 ; 0x4b4: 0x0002
kfffde[2].xptr.flags:                 0 ; 0x4b6: L=0 E=0 D=0 S=0
kfffde[2].xptr.chk:                  51 ; 0x4b7: 0x33
kfffde[3].xptr.au:                 1310 ; 0x4b8: 0x0000051e
kfffde[3].xptr.disk:                  3 ; 0x4bc: 0x0003
kfffde[3].xptr.flags:                 0 ; 0x4be: L=0 E=0 D=0 S=0
kfffde[3].xptr.chk:                  50 ; 0x4bf: 0x32
kfffde[4].xptr.au:                 1310 ; 0x4c0: 0x0000051e
kfffde[4].xptr.disk:                  1 ; 0x4c4: 0x0001
kfffde[4].xptr.flags:                 0 ; 0x4c6: L=0 E=0 D=0 S=0
kfffde[4].xptr.chk:                  48 ; 0x4c7: 0x30
kfffde[5].xptr.au:                 1314 ; 0x4c8: 0x00000522
kfffde[5].xptr.disk:                  0 ; 0x4cc: 0x0000
kfffde[5].xptr.flags:                 0 ; 0x4ce: L=0 E=0 D=0 S=0
kfffde[5].xptr.chk:                  13 ; 0x4cf: 0x0d
kfffde[6].xptr.au:                 1315 ; 0x4d0: 0x00000523
kfffde[6].xptr.disk:                  0 ; 0x4d4: 0x0000
kfffde[6].xptr.flags:                 0 ; 0x4d6: L=0 E=0 D=0 S=0
kfffde[6].xptr.chk:                  12 ; 0x4d7: 0x0c
kfffde[7].xptr.au:                 1311 ; 0x4d8: 0x0000051f
kfffde[7].xptr.disk:                  2 ; 0x4dc: 0x0002
kfffde[7].xptr.flags:                 0 ; 0x4de: L=0 E=0 D=0 S=0
kfffde[7].xptr.chk:                  50 ; 0x4df: 0x32
kfffde[8].xptr.au:                 1311 ; 0x4e0: 0x0000051f
kfffde[8].xptr.disk:                  3 ; 0x4e4: 0x0003
kfffde[8].xptr.flags:                 0 ; 0x4e6: L=0 E=0 D=0 S=0
kfffde[8].xptr.chk:                  51 ; 0x4e7: 0x33
kfffde[9].xptr.au:                 1311 ; 0x4e8: 0x0000051f
kfffde[9].xptr.disk:                  1 ; 0x4ec: 0x0001
kfffde[9].xptr.flags:                 0 ; 0x4ee: L=0 E=0 D=0 S=0
kfffde[9].xptr.chk:                  49 ; 0x4ef: 0x31
kfffde[10].xptr.au:                1312 ; 0x4f0: 0x00000520
kfffde[10].xptr.disk:                 2 ; 0x4f4: 0x0002
kfffde[10].xptr.flags:                0 ; 0x4f6: L=0 E=0 D=0 S=0
kfffde[10].xptr.chk:                 13 ; 0x4f7: 0x0d
kfffde[11].xptr.au:                1316 ; 0x4f8: 0x00000524
kfffde[11].xptr.disk:                 0 ; 0x4fc: 0x0000
kfffde[11].xptr.flags:                0 ; 0x4fe: L=0 E=0 D=0 S=0
kfffde[11].xptr.chk:                 11 ; 0x4ff: 0x0b

[grid@jyrac1 ~]$ kfed read /dev/raw/raw4 aun=76 blkn=7 | more
kfbh.endian:                          1 ; 0x000: 0x01
kfbh.hard:                          130 ; 0x001: 0x82
kfbh.type:                            4 ; 0x002: KFBTYP_FILEDIR
kfbh.datfmt:                          1 ; 0x003: 0x01
kfbh.block.blk:                     263 ; 0x004: blk=263
kfbh.block.obj:                       1 ; 0x008: file=1
kfbh.check:                   857258416 ; 0x00c: 0x3318b9b0
kfbh.fcn.base:                     3715 ; 0x010: 0x00000e83
kfbh.fcn.wrap:                        0 ; 0x014: 0x00000000
kfbh.spare1:                          0 ; 0x018: 0x00000000
kfbh.spare2:                          0 ; 0x01c: 0x00000000
kfffdb.node.incarn:           930413057 ; 0x000: A=1 NUMM=0x1bba7d00
kfffdb.node.frlist.number:   4294967295 ; 0x004: 0xffffffff
kfffdb.node.frlist.incarn:            0 ; 0x008: A=0 NUMM=0x0
kfffdb.hibytes:                       0 ; 0x00c: 0x00000000
kfffdb.lobytes:                 5251072 ; 0x010: 0x00502000
kfffdb.xtntcnt:                      12 ; 0x014: 0x0000000c
kfffdb.xtnteof:                      12 ; 0x018: 0x0000000c
kfffdb.blkSize:                    8192 ; 0x01c: 0x00002000
kfffdb.flags:                        17 ; 0x020: O=1 S=0 S=0 D=0 C=1 I=0 R=0 A=0
kfffdb.fileType:                      2 ; 0x021: 0x02
kfffdb.dXrs:                         18 ; 0x022: SCHE=0x1 NUMB=0x2
kfffdb.iXrs:                         19 ; 0x023: SCHE=0x1 NUMB=0x3
kfffdb.dXsiz[0]:             4294967295 ; 0x024: 0xffffffff
kfffdb.dXsiz[1]:                      0 ; 0x028: 0x00000000
kfffdb.dXsiz[2]:                      0 ; 0x02c: 0x00000000
kfffdb.iXsiz[0]:             4294967295 ; 0x030: 0xffffffff
kfffdb.iXsiz[1]:                      0 ; 0x034: 0x00000000
kfffdb.iXsiz[2]:                      0 ; 0x038: 0x00000000
kfffdb.xtntblk:                      12 ; 0x03c: 0x000c
kfffdb.break:                        60 ; 0x03e: 0x003c
kfffdb.priZn:                         0 ; 0x040: KFDZN_COLD
kfffdb.secZn:                         0 ; 0x041: KFDZN_COLD
kfffdb.ub2spare:                      0 ; 0x042: 0x0000
kfffdb.alias[0]:                    111 ; 0x044: 0x0000006f
kfffdb.alias[1]:             4294967295 ; 0x048: 0xffffffff
kfffdb.strpwdth:                      1 ; 0x04c: 0x01
kfffdb.strpsz:                       20 ; 0x04d: 0x14
kfffdb.usmsz:                         0 ; 0x04e: 0x0000
kfffdb.crets.hi:               33042832 ; 0x050: HOUR=0x10 DAYS=0xc MNTH=0xc YEAR=0x7e0
kfffdb.crets.lo:              286709760 ; 0x054: USEC=0x0 MSEC=0x1b6 SECS=0x11 MINS=0x4
kfffdb.modts.hi:               33042897 ; 0x058: HOUR=0x11 DAYS=0xe MNTH=0xc YEAR=0x7e0
kfffdb.modts.lo:                      0 ; 0x05c: USEC=0x0 MSEC=0x0 SECS=0x0 MINS=0x0
kfffdb.dasz[0]:                       0 ; 0x060: 0x00
kfffdb.dasz[1]:                       0 ; 0x061: 0x00
kfffdb.dasz[2]:                       0 ; 0x062: 0x00
kfffdb.dasz[3]:                       0 ; 0x063: 0x00
kfffdb.permissn:                      0 ; 0x064: 0x00
kfffdb.ub1spar1:                      0 ; 0x065: 0x00
kfffdb.ub2spar2:                      0 ; 0x066: 0x0000
kfffdb.user.entnum:                   0 ; 0x068: 0x0000
kfffdb.user.entinc:                   0 ; 0x06a: 0x0000
kfffdb.group.entnum:                  0 ; 0x06c: 0x0000
kfffdb.group.entinc:                  0 ; 0x06e: 0x0000
kfffdb.spare[0]:                      0 ; 0x070: 0x00000000
kfffdb.spare[1]:                      0 ; 0x074: 0x00000000
kfffdb.spare[2]:                      0 ; 0x078: 0x00000000
kfffdb.spare[3]:                      0 ; 0x07c: 0x00000000
kfffdb.spare[4]:                      0 ; 0x080: 0x00000000
kfffdb.spare[5]:                      0 ; 0x084: 0x00000000
kfffdb.spare[6]:                      0 ; 0x088: 0x00000000
kfffdb.spare[7]:                      0 ; 0x08c: 0x00000000
kfffdb.spare[8]:                      0 ; 0x090: 0x00000000
kfffdb.spare[9]:                      0 ; 0x094: 0x00000000
kfffdb.spare[10]:                     0 ; 0x098: 0x00000000
kfffdb.spare[11]:                     0 ; 0x09c: 0x00000000
kfffdb.usm:                             ; 0x0a0: length=0
kfffde[0].xptr.au:                 1309 ; 0x4a0: 0x0000051d
kfffde[0].xptr.disk:                  3 ; 0x4a4: 0x0003
kfffde[0].xptr.flags:                 0 ; 0x4a6: L=0 E=0 D=0 S=0
kfffde[0].xptr.chk:                  49 ; 0x4a7: 0x31
kfffde[1].xptr.au:                 1309 ; 0x4a8: 0x0000051d
kfffde[1].xptr.disk:                  2 ; 0x4ac: 0x0002
kfffde[1].xptr.flags:                 0 ; 0x4ae: L=0 E=0 D=0 S=0
kfffde[1].xptr.chk:                  48 ; 0x4af: 0x30
kfffde[2].xptr.au:                 1310 ; 0x4b0: 0x0000051e
kfffde[2].xptr.disk:                  2 ; 0x4b4: 0x0002
kfffde[2].xptr.flags:                 0 ; 0x4b6: L=0 E=0 D=0 S=0
kfffde[2].xptr.chk:                  51 ; 0x4b7: 0x33
kfffde[3].xptr.au:                 1310 ; 0x4b8: 0x0000051e
kfffde[3].xptr.disk:                  3 ; 0x4bc: 0x0003
kfffde[3].xptr.flags:                 0 ; 0x4be: L=0 E=0 D=0 S=0
kfffde[3].xptr.chk:                  50 ; 0x4bf: 0x32
kfffde[4].xptr.au:                 1310 ; 0x4c0: 0x0000051e
kfffde[4].xptr.disk:                  1 ; 0x4c4: 0x0001
kfffde[4].xptr.flags:                 0 ; 0x4c6: L=0 E=0 D=0 S=0
kfffde[4].xptr.chk:                  48 ; 0x4c7: 0x30
kfffde[5].xptr.au:                 1314 ; 0x4c8: 0x00000522
kfffde[5].xptr.disk:                  0 ; 0x4cc: 0x0000
kfffde[5].xptr.flags:                 0 ; 0x4ce: L=0 E=0 D=0 S=0
kfffde[5].xptr.chk:                  13 ; 0x4cf: 0x0d
kfffde[6].xptr.au:                 1315 ; 0x4d0: 0x00000523
kfffde[6].xptr.disk:                  0 ; 0x4d4: 0x0000
kfffde[6].xptr.flags:                 0 ; 0x4d6: L=0 E=0 D=0 S=0
kfffde[6].xptr.chk:                  12 ; 0x4d7: 0x0c
kfffde[7].xptr.au:                 1311 ; 0x4d8: 0x0000051f
kfffde[7].xptr.disk:                  2 ; 0x4dc: 0x0002
kfffde[7].xptr.flags:                 0 ; 0x4de: L=0 E=0 D=0 S=0
kfffde[7].xptr.chk:                  50 ; 0x4df: 0x32
kfffde[8].xptr.au:                 1311 ; 0x4e0: 0x0000051f
kfffde[8].xptr.disk:                  3 ; 0x4e4: 0x0003
kfffde[8].xptr.flags:                 0 ; 0x4e6: L=0 E=0 D=0 S=0
kfffde[8].xptr.chk:                  51 ; 0x4e7: 0x33
kfffde[9].xptr.au:                 1311 ; 0x4e8: 0x0000051f
kfffde[9].xptr.disk:                  1 ; 0x4ec: 0x0001
kfffde[9].xptr.flags:                 0 ; 0x4ee: L=0 E=0 D=0 S=0
kfffde[9].xptr.chk:                  49 ; 0x4ef: 0x31
kfffde[10].xptr.au:                1312 ; 0x4f0: 0x00000520
kfffde[10].xptr.disk:                 2 ; 0x4f4: 0x0002
kfffde[10].xptr.flags:                0 ; 0x4f6: L=0 E=0 D=0 S=0
kfffde[10].xptr.chk:                 13 ; 0x4f7: 0x0d
kfffde[11].xptr.au:                1316 ; 0x4f8: 0x00000524
kfffde[11].xptr.disk:                 0 ; 0x4fc: 0x0000
kfffde[11].xptr.flags:                0 ; 0x4fe: L=0 E=0 D=0 S=0
kfffde[11].xptr.chk:                 11 ; 0x4ff: 0x0b
[grid@jyrac1 ~]$ kfed read /dev/raw/raw3 aun=77 blkn=7 | more
kfbh.endian:                          1 ; 0x000: 0x01
kfbh.hard:                          130 ; 0x001: 0x82
kfbh.type:                            4 ; 0x002: KFBTYP_FILEDIR
kfbh.datfmt:                          1 ; 0x003: 0x01
kfbh.block.blk:                     263 ; 0x004: blk=263
kfbh.block.obj:                       1 ; 0x008: file=1
kfbh.check:                   857258416 ; 0x00c: 0x3318b9b0
kfbh.fcn.base:                     3715 ; 0x010: 0x00000e83
kfbh.fcn.wrap:                        0 ; 0x014: 0x00000000
kfbh.spare1:                          0 ; 0x018: 0x00000000
kfbh.spare2:                          0 ; 0x01c: 0x00000000
kfffdb.node.incarn:           930413057 ; 0x000: A=1 NUMM=0x1bba7d00
kfffdb.node.frlist.number:   4294967295 ; 0x004: 0xffffffff
kfffdb.node.frlist.incarn:            0 ; 0x008: A=0 NUMM=0x0
kfffdb.hibytes:                       0 ; 0x00c: 0x00000000
kfffdb.lobytes:                 5251072 ; 0x010: 0x00502000
kfffdb.xtntcnt:                      12 ; 0x014: 0x0000000c
kfffdb.xtnteof:                      12 ; 0x018: 0x0000000c
kfffdb.blkSize:                    8192 ; 0x01c: 0x00002000
kfffdb.flags:                        17 ; 0x020: O=1 S=0 S=0 D=0 C=1 I=0 R=0 A=0
kfffdb.fileType:                      2 ; 0x021: 0x02
kfffdb.dXrs:                         18 ; 0x022: SCHE=0x1 NUMB=0x2
kfffdb.iXrs:                         19 ; 0x023: SCHE=0x1 NUMB=0x3
kfffdb.dXsiz[0]:             4294967295 ; 0x024: 0xffffffff
kfffdb.dXsiz[1]:                      0 ; 0x028: 0x00000000
kfffdb.dXsiz[2]:                      0 ; 0x02c: 0x00000000
kfffdb.iXsiz[0]:             4294967295 ; 0x030: 0xffffffff
kfffdb.iXsiz[1]:                      0 ; 0x034: 0x00000000
kfffdb.iXsiz[2]:                      0 ; 0x038: 0x00000000
kfffdb.xtntblk:                      12 ; 0x03c: 0x000c
kfffdb.break:                        60 ; 0x03e: 0x003c
kfffdb.priZn:                         0 ; 0x040: KFDZN_COLD
kfffdb.secZn:                         0 ; 0x041: KFDZN_COLD
kfffdb.ub2spare:                      0 ; 0x042: 0x0000
kfffdb.alias[0]:                    111 ; 0x044: 0x0000006f
kfffdb.alias[1]:             4294967295 ; 0x048: 0xffffffff
kfffdb.strpwdth:                      1 ; 0x04c: 0x01
kfffdb.strpsz:                       20 ; 0x04d: 0x14
kfffdb.usmsz:                         0 ; 0x04e: 0x0000
kfffdb.crets.hi:               33042832 ; 0x050: HOUR=0x10 DAYS=0xc MNTH=0xc YEAR=0x7e0
kfffdb.crets.lo:              286709760 ; 0x054: USEC=0x0 MSEC=0x1b6 SECS=0x11 MINS=0x4
kfffdb.modts.hi:               33042897 ; 0x058: HOUR=0x11 DAYS=0xe MNTH=0xc YEAR=0x7e0
kfffdb.modts.lo:                      0 ; 0x05c: USEC=0x0 MSEC=0x0 SECS=0x0 MINS=0x0
kfffdb.dasz[0]:                       0 ; 0x060: 0x00
kfffdb.dasz[1]:                       0 ; 0x061: 0x00
kfffdb.dasz[2]:                       0 ; 0x062: 0x00
kfffdb.dasz[3]:                       0 ; 0x063: 0x00
kfffdb.permissn:                      0 ; 0x064: 0x00
kfffdb.ub1spar1:                      0 ; 0x065: 0x00
kfffdb.ub2spar2:                      0 ; 0x066: 0x0000
kfffdb.user.entnum:                   0 ; 0x068: 0x0000
kfffdb.user.entinc:                   0 ; 0x06a: 0x0000
kfffdb.group.entnum:                  0 ; 0x06c: 0x0000
kfffdb.group.entinc:                  0 ; 0x06e: 0x0000
kfffdb.spare[0]:                      0 ; 0x070: 0x00000000
kfffdb.spare[1]:                      0 ; 0x074: 0x00000000
kfffdb.spare[2]:                      0 ; 0x078: 0x00000000
kfffdb.spare[3]:                      0 ; 0x07c: 0x00000000
kfffdb.spare[4]:                      0 ; 0x080: 0x00000000
kfffdb.spare[5]:                      0 ; 0x084: 0x00000000
kfffdb.spare[6]:                      0 ; 0x088: 0x00000000
kfffdb.spare[7]:                      0 ; 0x08c: 0x00000000
kfffdb.spare[8]:                      0 ; 0x090: 0x00000000
kfffdb.spare[9]:                      0 ; 0x094: 0x00000000
kfffdb.spare[10]:                     0 ; 0x098: 0x00000000
kfffdb.spare[11]:                     0 ; 0x09c: 0x00000000
kfffdb.usm:                             ; 0x0a0: length=0
kfffde[0].xptr.au:                 1309 ; 0x4a0: 0x0000051d
kfffde[0].xptr.disk:                  3 ; 0x4a4: 0x0003
kfffde[0].xptr.flags:                 0 ; 0x4a6: L=0 E=0 D=0 S=0
kfffde[0].xptr.chk:                  49 ; 0x4a7: 0x31
kfffde[1].xptr.au:                 1309 ; 0x4a8: 0x0000051d
kfffde[1].xptr.disk:                  2 ; 0x4ac: 0x0002
kfffde[1].xptr.flags:                 0 ; 0x4ae: L=0 E=0 D=0 S=0
kfffde[1].xptr.chk:                  48 ; 0x4af: 0x30
kfffde[2].xptr.au:                 1310 ; 0x4b0: 0x0000051e
kfffde[2].xptr.disk:                  2 ; 0x4b4: 0x0002
kfffde[2].xptr.flags:                 0 ; 0x4b6: L=0 E=0 D=0 S=0
kfffde[2].xptr.chk:                  51 ; 0x4b7: 0x33
kfffde[3].xptr.au:                 1310 ; 0x4b8: 0x0000051e
kfffde[3].xptr.disk:                  3 ; 0x4bc: 0x0003
kfffde[3].xptr.flags:                 0 ; 0x4be: L=0 E=0 D=0 S=0
kfffde[3].xptr.chk:                  50 ; 0x4bf: 0x32
kfffde[4].xptr.au:                 1310 ; 0x4c0: 0x0000051e
kfffde[4].xptr.disk:                  1 ; 0x4c4: 0x0001
kfffde[4].xptr.flags:                 0 ; 0x4c6: L=0 E=0 D=0 S=0
kfffde[4].xptr.chk:                  48 ; 0x4c7: 0x30
kfffde[5].xptr.au:                 1314 ; 0x4c8: 0x00000522
kfffde[5].xptr.disk:                  0 ; 0x4cc: 0x0000
kfffde[5].xptr.flags:                 0 ; 0x4ce: L=0 E=0 D=0 S=0
kfffde[5].xptr.chk:                  13 ; 0x4cf: 0x0d
kfffde[6].xptr.au:                 1315 ; 0x4d0: 0x00000523
kfffde[6].xptr.disk:                  0 ; 0x4d4: 0x0000
kfffde[6].xptr.flags:                 0 ; 0x4d6: L=0 E=0 D=0 S=0
kfffde[6].xptr.chk:                  12 ; 0x4d7: 0x0c
kfffde[7].xptr.au:                 1311 ; 0x4d8: 0x0000051f
kfffde[7].xptr.disk:                  2 ; 0x4dc: 0x0002
kfffde[7].xptr.flags:                 0 ; 0x4de: L=0 E=0 D=0 S=0
kfffde[7].xptr.chk:                  50 ; 0x4df: 0x32
kfffde[8].xptr.au:                 1311 ; 0x4e0: 0x0000051f
kfffde[8].xptr.disk:                  3 ; 0x4e4: 0x0003
kfffde[8].xptr.flags:                 0 ; 0x4e6: L=0 E=0 D=0 S=0
kfffde[8].xptr.chk:                  51 ; 0x4e7: 0x33
kfffde[9].xptr.au:                 1311 ; 0x4e8: 0x0000051f
kfffde[9].xptr.disk:                  1 ; 0x4ec: 0x0001
kfffde[9].xptr.flags:                 0 ; 0x4ee: L=0 E=0 D=0 S=0
kfffde[9].xptr.chk:                  49 ; 0x4ef: 0x31
kfffde[10].xptr.au:                1312 ; 0x4f0: 0x00000520
kfffde[10].xptr.disk:                 2 ; 0x4f4: 0x0002
kfffde[10].xptr.flags:                0 ; 0x4f6: L=0 E=0 D=0 S=0
kfffde[10].xptr.chk:                 13 ; 0x4f7: 0x0d
kfffde[11].xptr.au:                1316 ; 0x4f8: 0x00000524
kfffde[11].xptr.disk:                 0 ; 0x4fc: 0x0000
kfffde[11].xptr.flags:                0 ; 0x4fe: L=0 E=0 D=0 S=0
kfffde[11].xptr.chk:                 11 ; 0x4ff: 0x0b

從上面的資訊可以看到3號磁碟(/dev/raw/raw10)的第76個AU,1號磁碟(1 /dev/raw/raw4)的第76個AU與2號磁碟(/dev/raw/raw3)的第77個AU是否儲存相同資訊。從上面資料可以看出,file directory後設資料結構分為3個部分:
1.第一部分kfbh欄位
確認這是一個ASM檔案目錄的block(kfbh.type=KFBTYP_FILEDIR),而且是描述263號檔案的(kfbh.block.blk=263)。
2.第二部分kfffdb欄位則包含:
File incarnation number(kfffdb.node.incarn=930413057)檔案的incarnation號,屬於檔名的一部分(263號檔案(USERS.263.930413057))
File size in bytes (kfffdb.lobytes=5251072) 檔案的大小
Physical extent count (kfffdb.xtntcnt=12) 該檔案分配的物理extent的數量
File block size in bytes (kfffdb.blkSize=8192) 檔案的塊大小
File type (kfffdb.fileType=2), i.e. the database data file 檔案的型別,這裡為資料檔案
3.第三部分kfffde為物理extent分佈,這部分輸出與從X$KFFXP中查詢到的結果一致
例如,物理extent 0在磁碟3(kfffde[0].xptr.disk=3)的AU 1309上(kfffde[0].xptr.au:=1309),物理extent 1在磁碟2(kfffde[0].xptr.disk=2)的AU 1309上(kfffde[0].xptr.au:=1309),
物理extent 2在磁碟2(kfffde[0].xptr.disk=2)的AU 1309上(kfffde[0].xptr.au:=1310),以此類推。

File directory entries for control files
查詢資料庫的控制檔案

SQL>  select name "file",block_size "block size",block_size*(file_size_blks+1) "file size" from v$controlfile;

file                                               block size  file size
-------------------------------------------------- ---------- ----------
+DATADG/jyrac/controlfile/current.257.930412709         16384   18595840

接下來看一下257號檔案(current.257.930412709)對應的的檔案目錄條目。首先,透過查詢X$KFFXP獲得該檔案的extent和AU分佈:

SQL> select xnum_kffxp "virtual extent",
  2  pxn_kffxp "physical extent",
  3  au_kffxp "allocation unit",
  4  disk_kffxp "disk"
  5  from x$kffxp
  6  where group_kffxp=3 
  7  and number_kffxp=257 
  8  and xnum_kffxp <> 2147483648
  9  order by 1, 2;

virtual extent physical extent allocation unit       disk
-------------- --------------- --------------- ----------
             0               0              78          1
             0               1              78          2
             0               2              77          3
             1               3              78          3
             1               4              79          1
             1               5              77          0
             2               6              79          2
             2               7              79          3
             2               8              80          1
             3               9              78          0
             3              10              80          2
             3              11              81          1
             4              12              82          1
             4              13              79          0
             4              14              81          2
             5              15              80          3
             5              16              82          2
             5              17              83          1
             6              18              83          2
             6              19              80          0
             6              20              81          3
             7              21              81          0
             7              22              82          3
             7              23              84          2
             8              24              84          1
             8              25              83          3
             8              26              82          0
             9              27              84          3
             9              28              83          0
             9              29              85          2
            10              30              86          2
            10              31              85          1
            10              32              84          0
            11              33              85          0
            11              34              86          1
            11              35              85          3
            12              36              87          1
            12              37              87          2
            12              38              86          3
            13              39              87          3
            13              40              88          1
            13              41              86          0
            14              42              88          2
            14              43              88          3
            14              44              89          1
            15              45              87          0
            15              46              89          2
            15              47              90          1
            16              48              91          1
            16              49              88          0
            16              50              90          2
            17              51              89          3
            17              52              91          2
            17              53              92          1
            18              54              92          2
            18              55              89          0
            18              56              90          3
            19              57              90          0
            19              58              91          3
            19              59              93          2
            20              60              94          1
            20              61              92          3
            20              62              92          0
            21              63              93          3
            21              64              93          0
            21              65              95          2
            22              66              96          2
            22              67              95          1
            22              68              94          0
            23              69              95          0
            23              70              96          1
            23              71              94          3

72 rows selected.

我們看到例項為該檔案分配了24個virtual extent,並且該檔案是三倍冗餘。接下來查詢DATADG磁碟組包含的磁碟的編號和路徑。

SQL> select disk_number, path from v$asm_disk where group_number=3 order by 1;

DISK_NUMBER PATH
----------- ------------------------------
          0 /dev/raw/raw11
          1 /dev/raw/raw4
          2 /dev/raw/raw3
          3 /dev/raw/raw10

之前所查詢到的ASM檔案目錄分佈如下:

SQL> select xnum_kffxp "virtual extent",pxn_kffxp "physical extent",au_kffxp "allocation unit",disk_kffxp "disk"
  2  from x$kffxp
  3  where group_kffxp=3 and number_kffxp=1 order by 1, 2;

virtual extent physical extent allocation unit       disk
-------------- --------------- --------------- ----------
             0               0               2          0
             0               1               2          2
             0               2               2          1
             1               3              76          3
             1               4              77          2
             1               5              76          1

6 rows selected.

現在我們透過kfed工具來檢視該檔案的ASM檔案目錄條目,它會在檔案目錄的257號block,也就是檔案目錄中1號(虛擬)extent的1號block(257減去256得出1)。1號extent位於3號磁碟的第76個AU,並在1號磁碟的第76個AU和2號磁碟的第77個AU上分別存在一份冗餘。下面我們來看看3號磁碟(/dev/raw/raw10)的第76個AU

[grid@jyrac1 ~]$ kfed read /dev/raw/raw10 aun=76 blkn=1 | more
kfbh.endian:                          1 ; 0x000: 0x01
kfbh.hard:                          130 ; 0x001: 0x82
kfbh.type:                            4 ; 0x002: KFBTYP_FILEDIR
kfbh.datfmt:                          1 ; 0x003: 0x01
kfbh.block.blk:                     257 ; 0x004: blk=257
kfbh.block.obj:                       1 ; 0x008: file=1
kfbh.check:                  1835729298 ; 0x00c: 0x6d6b0192
kfbh.fcn.base:                     3723 ; 0x010: 0x00000e8b
kfbh.fcn.wrap:                        0 ; 0x014: 0x00000000
kfbh.spare1:                          0 ; 0x018: 0x00000000
kfbh.spare2:                          0 ; 0x01c: 0x00000000
kfffdb.node.incarn:           930412709 ; 0x000: A=1 NUMM=0x1bba7c52
kfffdb.node.frlist.number:   4294967295 ; 0x004: 0xffffffff
kfffdb.node.frlist.incarn:            0 ; 0x008: A=0 NUMM=0x0
kfffdb.hibytes:                       0 ; 0x00c: 0x00000000
kfffdb.lobytes:                18595840 ; 0x010: 0x011bc000
kfffdb.xtntcnt:                      72 ; 0x014: 0x00000048
kfffdb.xtnteof:                      72 ; 0x018: 0x00000048
kfffdb.blkSize:                   16384 ; 0x01c: 0x00004000
kfffdb.flags:                        19 ; 0x020: O=1 S=1 S=0 D=0 C=1 I=0 R=0 A=0
kfffdb.fileType:                      1 ; 0x021: 0x01
kfffdb.dXrs:                         19 ; 0x022: SCHE=0x1 NUMB=0x3
kfffdb.iXrs:                         19 ; 0x023: SCHE=0x1 NUMB=0x3
kfffdb.dXsiz[0]:             4294967295 ; 0x024: 0xffffffff
kfffdb.dXsiz[1]:                      0 ; 0x028: 0x00000000
kfffdb.dXsiz[2]:                      0 ; 0x02c: 0x00000000
kfffdb.iXsiz[0]:             4294967295 ; 0x030: 0xffffffff
kfffdb.iXsiz[1]:                      0 ; 0x034: 0x00000000
kfffdb.iXsiz[2]:                      0 ; 0x038: 0x00000000
kfffdb.xtntblk:                      63 ; 0x03c: 0x003f
kfffdb.break:                        60 ; 0x03e: 0x003c
kfffdb.priZn:                         0 ; 0x040: KFDZN_COLD
kfffdb.secZn:                         0 ; 0x041: KFDZN_COLD
kfffdb.ub2spare:                      0 ; 0x042: 0x0000
kfffdb.alias[0]:                    159 ; 0x044: 0x0000009f
kfffdb.alias[1]:             4294967295 ; 0x048: 0xffffffff
kfffdb.strpwdth:                      8 ; 0x04c: 0x08
kfffdb.strpsz:                       17 ; 0x04d: 0x11
kfffdb.usmsz:                         0 ; 0x04e: 0x0000
kfffdb.crets.hi:               33042831 ; 0x050: HOUR=0xf DAYS=0xc MNTH=0xc YEAR=0x7e0
kfffdb.crets.lo:             3922781184 ; 0x054: USEC=0x0 MSEC=0x39 SECS=0x1d MINS=0x3a
kfffdb.modts.hi:               33042902 ; 0x058: HOUR=0x16 DAYS=0xe MNTH=0xc YEAR=0x7e0
kfffdb.modts.lo:                      0 ; 0x05c: USEC=0x0 MSEC=0x0 SECS=0x0 MINS=0x0
kfffdb.dasz[0]:                       0 ; 0x060: 0x00
kfffdb.dasz[1]:                       0 ; 0x061: 0x00
kfffdb.dasz[2]:                       0 ; 0x062: 0x00
kfffdb.dasz[3]:                       0 ; 0x063: 0x00
kfffdb.permissn:                      0 ; 0x064: 0x00
kfffdb.ub1spar1:                      0 ; 0x065: 0x00
kfffdb.ub2spar2:                      0 ; 0x066: 0x0000
kfffdb.user.entnum:                   0 ; 0x068: 0x0000
kfffdb.user.entinc:                   0 ; 0x06a: 0x0000
kfffdb.group.entnum:                  0 ; 0x06c: 0x0000
kfffdb.group.entinc:                  0 ; 0x06e: 0x0000
kfffdb.spare[0]:                      0 ; 0x070: 0x00000000
kfffdb.spare[1]:                      0 ; 0x074: 0x00000000
kfffdb.spare[2]:                      0 ; 0x078: 0x00000000
kfffdb.spare[3]:                      0 ; 0x07c: 0x00000000
kfffdb.spare[4]:                      0 ; 0x080: 0x00000000
kfffdb.spare[5]:                      0 ; 0x084: 0x00000000
kfffdb.spare[6]:                      0 ; 0x088: 0x00000000
kfffdb.spare[7]:                      0 ; 0x08c: 0x00000000
kfffdb.spare[8]:                      0 ; 0x090: 0x00000000
kfffdb.spare[9]:                      0 ; 0x094: 0x00000000
kfffdb.spare[10]:                     0 ; 0x098: 0x00000000
kfffdb.spare[11]:                     0 ; 0x09c: 0x00000000
kfffdb.usm:                             ; 0x0a0: length=0
kfffde[0].xptr.au:                   78 ; 0x4a0: 0x0000004e
kfffde[0].xptr.disk:                  1 ; 0x4a4: 0x0001
kfffde[0].xptr.flags:                 0 ; 0x4a6: L=0 E=0 D=0 S=0
kfffde[0].xptr.chk:                 101 ; 0x4a7: 0x65
kfffde[1].xptr.au:                   78 ; 0x4a8: 0x0000004e
kfffde[1].xptr.disk:                  2 ; 0x4ac: 0x0002
kfffde[1].xptr.flags:                 0 ; 0x4ae: L=0 E=0 D=0 S=0
kfffde[1].xptr.chk:                 102 ; 0x4af: 0x66
kfffde[2].xptr.au:                   77 ; 0x4b0: 0x0000004d
kfffde[2].xptr.disk:                  3 ; 0x4b4: 0x0003
kfffde[2].xptr.flags:                 0 ; 0x4b6: L=0 E=0 D=0 S=0
kfffde[2].xptr.chk:                 100 ; 0x4b7: 0x64
kfffde[3].xptr.au:                   78 ; 0x4b8: 0x0000004e
kfffde[3].xptr.disk:                  3 ; 0x4bc: 0x0003
kfffde[3].xptr.flags:                 0 ; 0x4be: L=0 E=0 D=0 S=0
kfffde[3].xptr.chk:                 103 ; 0x4bf: 0x67
kfffde[4].xptr.au:                   79 ; 0x4c0: 0x0000004f
kfffde[4].xptr.disk:                  1 ; 0x4c4: 0x0001
kfffde[4].xptr.flags:                 0 ; 0x4c6: L=0 E=0 D=0 S=0
kfffde[4].xptr.chk:                 100 ; 0x4c7: 0x64
kfffde[5].xptr.au:                   77 ; 0x4c8: 0x0000004d
kfffde[5].xptr.disk:                  0 ; 0x4cc: 0x0000
kfffde[5].xptr.flags:                 0 ; 0x4ce: L=0 E=0 D=0 S=0
kfffde[5].xptr.chk:                 103 ; 0x4cf: 0x67
kfffde[6].xptr.au:                   79 ; 0x4d0: 0x0000004f
kfffde[6].xptr.disk:                  2 ; 0x4d4: 0x0002
kfffde[6].xptr.flags:                 0 ; 0x4d6: L=0 E=0 D=0 S=0
kfffde[6].xptr.chk:                 103 ; 0x4d7: 0x67
kfffde[7].xptr.au:                   79 ; 0x4d8: 0x0000004f
kfffde[7].xptr.disk:                  3 ; 0x4dc: 0x0003
kfffde[7].xptr.flags:                 0 ; 0x4de: L=0 E=0 D=0 S=0
kfffde[7].xptr.chk:                 102 ; 0x4df: 0x66
kfffde[8].xptr.au:                   80 ; 0x4e0: 0x00000050
kfffde[8].xptr.disk:                  1 ; 0x4e4: 0x0001
kfffde[8].xptr.flags:                 0 ; 0x4e6: L=0 E=0 D=0 S=0
kfffde[8].xptr.chk:                 123 ; 0x4e7: 0x7b
kfffde[9].xptr.au:                   78 ; 0x4e8: 0x0000004e
kfffde[9].xptr.disk:                  0 ; 0x4ec: 0x0000
kfffde[9].xptr.flags:                 0 ; 0x4ee: L=0 E=0 D=0 S=0
kfffde[9].xptr.chk:                 100 ; 0x4ef: 0x64
kfffde[10].xptr.au:                  80 ; 0x4f0: 0x00000050
kfffde[10].xptr.disk:                 2 ; 0x4f4: 0x0002
kfffde[10].xptr.flags:                0 ; 0x4f6: L=0 E=0 D=0 S=0
kfffde[10].xptr.chk:                120 ; 0x4f7: 0x78
kfffde[11].xptr.au:                  81 ; 0x4f8: 0x00000051
kfffde[11].xptr.disk:                 1 ; 0x4fc: 0x0001
kfffde[11].xptr.flags:                0 ; 0x4fe: L=0 E=0 D=0 S=0
kfffde[11].xptr.chk:                122 ; 0x4ff: 0x7a
kfffde[12].xptr.au:                  82 ; 0x500: 0x00000052
kfffde[12].xptr.disk:                 1 ; 0x504: 0x0001
kfffde[12].xptr.flags:                0 ; 0x506: L=0 E=0 D=0 S=0
kfffde[12].xptr.chk:                121 ; 0x507: 0x79
kfffde[13].xptr.au:                  79 ; 0x508: 0x0000004f
kfffde[13].xptr.disk:                 0 ; 0x50c: 0x0000
kfffde[13].xptr.flags:                0 ; 0x50e: L=0 E=0 D=0 S=0
kfffde[13].xptr.chk:                101 ; 0x50f: 0x65
kfffde[14].xptr.au:                  81 ; 0x510: 0x00000051
kfffde[14].xptr.disk:                 2 ; 0x514: 0x0002
kfffde[14].xptr.flags:                0 ; 0x516: L=0 E=0 D=0 S=0
kfffde[14].xptr.chk:                121 ; 0x517: 0x79
kfffde[15].xptr.au:                  80 ; 0x518: 0x00000050
kfffde[15].xptr.disk:                 3 ; 0x51c: 0x0003
kfffde[15].xptr.flags:                0 ; 0x51e: L=0 E=0 D=0 S=0
kfffde[15].xptr.chk:                121 ; 0x51f: 0x79
kfffde[16].xptr.au:                  82 ; 0x520: 0x00000052
kfffde[16].xptr.disk:                 2 ; 0x524: 0x0002
kfffde[16].xptr.flags:                0 ; 0x526: L=0 E=0 D=0 S=0
kfffde[16].xptr.chk:                122 ; 0x527: 0x7a
kfffde[17].xptr.au:                  83 ; 0x528: 0x00000053
kfffde[17].xptr.disk:                 1 ; 0x52c: 0x0001
kfffde[17].xptr.flags:                0 ; 0x52e: L=0 E=0 D=0 S=0
kfffde[17].xptr.chk:                120 ; 0x52f: 0x78
kfffde[18].xptr.au:                  83 ; 0x530: 0x00000053
kfffde[18].xptr.disk:                 2 ; 0x534: 0x0002
kfffde[18].xptr.flags:                0 ; 0x536: L=0 E=0 D=0 S=0
kfffde[18].xptr.chk:                123 ; 0x537: 0x7b
kfffde[19].xptr.au:                  80 ; 0x538: 0x00000050
kfffde[19].xptr.disk:                 0 ; 0x53c: 0x0000
kfffde[19].xptr.flags:                0 ; 0x53e: L=0 E=0 D=0 S=0
kfffde[19].xptr.chk:                122 ; 0x53f: 0x7a
kfffde[20].xptr.au:                  81 ; 0x540: 0x00000051
kfffde[20].xptr.disk:                 3 ; 0x544: 0x0003
kfffde[20].xptr.flags:                0 ; 0x546: L=0 E=0 D=0 S=0
kfffde[20].xptr.chk:                120 ; 0x547: 0x78
kfffde[21].xptr.au:                  81 ; 0x548: 0x00000051
kfffde[21].xptr.disk:                 0 ; 0x54c: 0x0000
kfffde[21].xptr.flags:                0 ; 0x54e: L=0 E=0 D=0 S=0
kfffde[21].xptr.chk:                123 ; 0x54f: 0x7b
kfffde[22].xptr.au:                  82 ; 0x550: 0x00000052
kfffde[22].xptr.disk:                 3 ; 0x554: 0x0003
kfffde[22].xptr.flags:                0 ; 0x556: L=0 E=0 D=0 S=0
kfffde[22].xptr.chk:                123 ; 0x557: 0x7b
kfffde[23].xptr.au:                  84 ; 0x558: 0x00000054
kfffde[23].xptr.disk:                 2 ; 0x55c: 0x0002
kfffde[23].xptr.flags:                0 ; 0x55e: L=0 E=0 D=0 S=0
kfffde[23].xptr.chk:                124 ; 0x55f: 0x7c
kfffde[24].xptr.au:                  84 ; 0x560: 0x00000054
kfffde[24].xptr.disk:                 1 ; 0x564: 0x0001
kfffde[24].xptr.flags:                0 ; 0x566: L=0 E=0 D=0 S=0
kfffde[24].xptr.chk:                127 ; 0x567: 0x7f
kfffde[25].xptr.au:                  83 ; 0x568: 0x00000053
kfffde[25].xptr.disk:                 3 ; 0x56c: 0x0003
kfffde[25].xptr.flags:                0 ; 0x56e: L=0 E=0 D=0 S=0
kfffde[25].xptr.chk:                122 ; 0x56f: 0x7a
kfffde[26].xptr.au:                  82 ; 0x570: 0x00000052
kfffde[26].xptr.disk:                 0 ; 0x574: 0x0000
kfffde[26].xptr.flags:                0 ; 0x576: L=0 E=0 D=0 S=0
kfffde[26].xptr.chk:                120 ; 0x577: 0x78
kfffde[27].xptr.au:                  84 ; 0x578: 0x00000054
kfffde[27].xptr.disk:                 3 ; 0x57c: 0x0003
kfffde[27].xptr.flags:                0 ; 0x57e: L=0 E=0 D=0 S=0
kfffde[27].xptr.chk:                125 ; 0x57f: 0x7d
kfffde[28].xptr.au:                  83 ; 0x580: 0x00000053
kfffde[28].xptr.disk:                 0 ; 0x584: 0x0000
kfffde[28].xptr.flags:                0 ; 0x586: L=0 E=0 D=0 S=0
kfffde[28].xptr.chk:                121 ; 0x587: 0x79
kfffde[29].xptr.au:                  85 ; 0x588: 0x00000055
kfffde[29].xptr.disk:                 2 ; 0x58c: 0x0002
kfffde[29].xptr.flags:                0 ; 0x58e: L=0 E=0 D=0 S=0
kfffde[29].xptr.chk:                125 ; 0x58f: 0x7d
kfffde[30].xptr.au:                  86 ; 0x590: 0x00000056
kfffde[30].xptr.disk:                 2 ; 0x594: 0x0002
kfffde[30].xptr.flags:                0 ; 0x596: L=0 E=0 D=0 S=0
kfffde[30].xptr.chk:                126 ; 0x597: 0x7e
kfffde[31].xptr.au:                  85 ; 0x598: 0x00000055
kfffde[31].xptr.disk:                 1 ; 0x59c: 0x0001
kfffde[31].xptr.flags:                0 ; 0x59e: L=0 E=0 D=0 S=0
kfffde[31].xptr.chk:                126 ; 0x59f: 0x7e
kfffde[32].xptr.au:                  84 ; 0x5a0: 0x00000054
kfffde[32].xptr.disk:                 0 ; 0x5a4: 0x0000
kfffde[32].xptr.flags:                0 ; 0x5a6: L=0 E=0 D=0 S=0
kfffde[32].xptr.chk:                126 ; 0x5a7: 0x7e
kfffde[33].xptr.au:                  85 ; 0x5a8: 0x00000055
kfffde[33].xptr.disk:                 0 ; 0x5ac: 0x0000
kfffde[33].xptr.flags:                0 ; 0x5ae: L=0 E=0 D=0 S=0
kfffde[33].xptr.chk:                127 ; 0x5af: 0x7f
kfffde[34].xptr.au:                  86 ; 0x5b0: 0x00000056
kfffde[34].xptr.disk:                 1 ; 0x5b4: 0x0001
kfffde[34].xptr.flags:                0 ; 0x5b6: L=0 E=0 D=0 S=0
kfffde[34].xptr.chk:                125 ; 0x5b7: 0x7d
kfffde[35].xptr.au:                  85 ; 0x5b8: 0x00000055
kfffde[35].xptr.disk:                 3 ; 0x5bc: 0x0003
kfffde[35].xptr.flags:                0 ; 0x5be: L=0 E=0 D=0 S=0
kfffde[35].xptr.chk:                124 ; 0x5bf: 0x7c
kfffde[36].xptr.au:                  87 ; 0x5c0: 0x00000057
kfffde[36].xptr.disk:                 1 ; 0x5c4: 0x0001
kfffde[36].xptr.flags:                0 ; 0x5c6: L=0 E=0 D=0 S=0
kfffde[36].xptr.chk:                124 ; 0x5c7: 0x7c
kfffde[37].xptr.au:                  87 ; 0x5c8: 0x00000057
kfffde[37].xptr.disk:                 2 ; 0x5cc: 0x0002
kfffde[37].xptr.flags:                0 ; 0x5ce: L=0 E=0 D=0 S=0
kfffde[37].xptr.chk:                127 ; 0x5cf: 0x7f
kfffde[38].xptr.au:                  86 ; 0x5d0: 0x00000056
kfffde[38].xptr.disk:                 3 ; 0x5d4: 0x0003
kfffde[38].xptr.flags:                0 ; 0x5d6: L=0 E=0 D=0 S=0
kfffde[38].xptr.chk:                127 ; 0x5d7: 0x7f
kfffde[39].xptr.au:                  87 ; 0x5d8: 0x00000057
kfffde[39].xptr.disk:                 3 ; 0x5dc: 0x0003
kfffde[39].xptr.flags:                0 ; 0x5de: L=0 E=0 D=0 S=0
kfffde[39].xptr.chk:                126 ; 0x5df: 0x7e
kfffde[40].xptr.au:                  88 ; 0x5e0: 0x00000058
kfffde[40].xptr.disk:                 1 ; 0x5e4: 0x0001
kfffde[40].xptr.flags:                0 ; 0x5e6: L=0 E=0 D=0 S=0
kfffde[40].xptr.chk:                115 ; 0x5e7: 0x73
kfffde[41].xptr.au:                  86 ; 0x5e8: 0x00000056
kfffde[41].xptr.disk:                 0 ; 0x5ec: 0x0000
kfffde[41].xptr.flags:                0 ; 0x5ee: L=0 E=0 D=0 S=0
kfffde[41].xptr.chk:                124 ; 0x5ef: 0x7c
kfffde[42].xptr.au:                  88 ; 0x5f0: 0x00000058
kfffde[42].xptr.disk:                 2 ; 0x5f4: 0x0002
kfffde[42].xptr.flags:                0 ; 0x5f6: L=0 E=0 D=0 S=0
kfffde[42].xptr.chk:                112 ; 0x5f7: 0x70
kfffde[43].xptr.au:                  88 ; 0x5f8: 0x00000058
kfffde[43].xptr.disk:                 3 ; 0x5fc: 0x0003
kfffde[43].xptr.flags:                0 ; 0x5fe: L=0 E=0 D=0 S=0
kfffde[43].xptr.chk:                113 ; 0x5ff: 0x71
kfffde[44].xptr.au:                  89 ; 0x600: 0x00000059
kfffde[44].xptr.disk:                 1 ; 0x604: 0x0001
kfffde[44].xptr.flags:                0 ; 0x606: L=0 E=0 D=0 S=0
kfffde[44].xptr.chk:                114 ; 0x607: 0x72
kfffde[45].xptr.au:                  87 ; 0x608: 0x00000057
kfffde[45].xptr.disk:                 0 ; 0x60c: 0x0000
kfffde[45].xptr.flags:                0 ; 0x60e: L=0 E=0 D=0 S=0
kfffde[45].xptr.chk:                125 ; 0x60f: 0x7d
kfffde[46].xptr.au:                  89 ; 0x610: 0x00000059
kfffde[46].xptr.disk:                 2 ; 0x614: 0x0002
kfffde[46].xptr.flags:                0 ; 0x616: L=0 E=0 D=0 S=0
kfffde[46].xptr.chk:                113 ; 0x617: 0x71
kfffde[47].xptr.au:                  90 ; 0x618: 0x0000005a
kfffde[47].xptr.disk:                 1 ; 0x61c: 0x0001
kfffde[47].xptr.flags:                0 ; 0x61e: L=0 E=0 D=0 S=0
kfffde[47].xptr.chk:                113 ; 0x61f: 0x71
kfffde[48].xptr.au:                  91 ; 0x620: 0x0000005b
kfffde[48].xptr.disk:                 1 ; 0x624: 0x0001
kfffde[48].xptr.flags:                0 ; 0x626: L=0 E=0 D=0 S=0
kfffde[48].xptr.chk:                112 ; 0x627: 0x70
kfffde[49].xptr.au:                  88 ; 0x628: 0x00000058
kfffde[49].xptr.disk:                 0 ; 0x62c: 0x0000
kfffde[49].xptr.flags:                0 ; 0x62e: L=0 E=0 D=0 S=0
kfffde[49].xptr.chk:                114 ; 0x62f: 0x72
kfffde[50].xptr.au:                  90 ; 0x630: 0x0000005a
kfffde[50].xptr.disk:                 2 ; 0x634: 0x0002
kfffde[50].xptr.flags:                0 ; 0x636: L=0 E=0 D=0 S=0
kfffde[50].xptr.chk:                114 ; 0x637: 0x72
kfffde[51].xptr.au:                  89 ; 0x638: 0x00000059
kfffde[51].xptr.disk:                 3 ; 0x63c: 0x0003
kfffde[51].xptr.flags:                0 ; 0x63e: L=0 E=0 D=0 S=0
kfffde[51].xptr.chk:                112 ; 0x63f: 0x70
kfffde[52].xptr.au:                  91 ; 0x640: 0x0000005b
kfffde[52].xptr.disk:                 2 ; 0x644: 0x0002
kfffde[52].xptr.flags:                0 ; 0x646: L=0 E=0 D=0 S=0
kfffde[52].xptr.chk:                115 ; 0x647: 0x73
kfffde[53].xptr.au:                  92 ; 0x648: 0x0000005c
kfffde[53].xptr.disk:                 1 ; 0x64c: 0x0001
kfffde[53].xptr.flags:                0 ; 0x64e: L=0 E=0 D=0 S=0
kfffde[53].xptr.chk:                119 ; 0x64f: 0x77
kfffde[54].xptr.au:                  92 ; 0x650: 0x0000005c
kfffde[54].xptr.disk:                 2 ; 0x654: 0x0002
kfffde[54].xptr.flags:                0 ; 0x656: L=0 E=0 D=0 S=0
kfffde[54].xptr.chk:                116 ; 0x657: 0x74
kfffde[55].xptr.au:                  89 ; 0x658: 0x00000059
kfffde[55].xptr.disk:                 0 ; 0x65c: 0x0000
kfffde[55].xptr.flags:                0 ; 0x65e: L=0 E=0 D=0 S=0
kfffde[55].xptr.chk:                115 ; 0x65f: 0x73
kfffde[56].xptr.au:                  90 ; 0x660: 0x0000005a
kfffde[56].xptr.disk:                 3 ; 0x664: 0x0003
kfffde[56].xptr.flags:                0 ; 0x666: L=0 E=0 D=0 S=0
kfffde[56].xptr.chk:                115 ; 0x667: 0x73
kfffde[57].xptr.au:                  90 ; 0x668: 0x0000005a
kfffde[57].xptr.disk:                 0 ; 0x66c: 0x0000
kfffde[57].xptr.flags:                0 ; 0x66e: L=0 E=0 D=0 S=0
kfffde[57].xptr.chk:                112 ; 0x66f: 0x70
kfffde[58].xptr.au:                  91 ; 0x670: 0x0000005b
kfffde[58].xptr.disk:                 3 ; 0x674: 0x0003
kfffde[58].xptr.flags:                0 ; 0x676: L=0 E=0 D=0 S=0
kfffde[58].xptr.chk:                114 ; 0x677: 0x72
kfffde[59].xptr.au:                  93 ; 0x678: 0x0000005d
kfffde[59].xptr.disk:                 2 ; 0x67c: 0x0002
kfffde[59].xptr.flags:                0 ; 0x67e: L=0 E=0 D=0 S=0
kfffde[59].xptr.chk:                117 ; 0x67f: 0x75
kfffde[60].xptr.au:                  93 ; 0x680: 0x0000005d
kfffde[60].xptr.disk:                 1 ; 0x684: 0x0001
kfffde[60].xptr.flags:                0 ; 0x686: L=0 E=0 D=0 S=0
kfffde[60].xptr.chk:                118 ; 0x687: 0x76
kfffde[61].xptr.au:                  91 ; 0x688: 0x0000005b
kfffde[61].xptr.disk:                 0 ; 0x68c: 0x0000
kfffde[61].xptr.flags:                0 ; 0x68e: L=0 E=0 D=0 S=0
kfffde[61].xptr.chk:                113 ; 0x68f: 0x71
kfffde[62].xptr.au:                  94 ; 0x690: 0x0000005e
kfffde[62].xptr.disk:                 2 ; 0x694: 0x0002
kfffde[62].xptr.flags:                0 ; 0x696: L=0 E=0 D=0 S=0
kfffde[62].xptr.chk:                118 ; 0x697: 0x76

上面資料可以看出,file directory後設資料結構分為3個部分:
1.第一部分kfbh欄位
確認這是一個ASM檔案目錄的block(kfbh.type=KFBTYP_FILEDIR),而且是描述263號檔案的(kfbh.block.blk=257)。
2.第二部分kfffdb欄位則包含:
File incarnation number(kfffdb.node.incarn=930412709)檔案的incarnation號,屬於檔名的一部分(257號檔案(current.257.930412709))
File size in bytes (kfffdb.lobytes=18595840) 檔案的大小
Physical extent count (kfffdb.xtntcnt=72) 該檔案分配的物理extent的數量
File block size in bytes (kfffdb.blkSize=16384) 檔案的塊大小
File type (kfffdb.fileType=1), i.e. the database control file 檔案的型別,這裡為控制檔案
3.第三部分kfffde為物理extent分佈,這部分輸出與從X$KFFXP中查詢到的結果一致
例如,物理extent 0在磁碟1(kfffde[0].xptr.disk=1)的AU 78上(kfffde[0].xptr.au:=1309),物理extent 1在磁碟2(kfffde[0].xptr.disk=2)的AU 78上(kfffde[0].xptr.au:=1309),
物理extent 2在磁碟3(kfffde[0].xptr.disk=3)的AU 77上(kfffde[0].xptr.au:=1310),以此類推。

File directory entries for large files
本文中所指的大檔案指的是超過60個extent的檔案。先到資料庫中找出幾個大的檔案:

SQL> SELECT name, bytes/1024/1024 "Size (MB)"
  2  FROM v$datafile;

NAME                                                Size (MB)
-------------------------------------------------- ----------
+DATADG/jyrac/datafile/system.259.930413057               760
+DATADG/jyrac/datafile/sysaux.258.930413055              1370
+DATADG/jyrac/datafile/undotbs1.262.930413057             100
+DATADG/jyrac/datafile/users.263.930413057                  5
+DATADG/jyrac/datafile/example.260.930413057           346.25
+DATADG/jyrac/datafile/undotbs2.261.930413057             150
+DATADG/jyrac/datafile/test01.dbf                         100

7 rows selected.

Directly addressed extents
以system表空間的資料檔案為例,我們看一下該檔案對應的檔案目錄條目。該檔案編號為259,大小為760MB。

SQL> select xnum_kffxp "extent", au_kffxp "au", disk_kffxp "disk"
  2  from x$kffxp
  3  where group_kffxp=3 and number_kffxp=259 and xnum_kffxp <> 2147483648
  4  order by 1,2;

    extent         au       disk
---------- ---------- ----------
         0        628          0
         0        629          1
         1        626          3
         1        629          0
         2        627          3
         2        627          2
         3        628          3
         3        630          0
         4        628          2
         4        630          1
         5        629          3
......
---------- ---------- ----------
       759       1006          3
       759       1009          0
       760       1007          2
       760       1009          1

1522 rows selected.

我們看到ASM例項為該檔案分配了1552個物理extent。現在我們透過kfed工具來檢視該檔案的ASM檔案目錄條目,它會在檔案目錄的259號block,也就是檔案目錄中1號(虛擬)extent的3號block(259減去256得出3)。1號extent位於3號磁碟的第76個AU,並在1號磁碟的第76個AU和2號磁碟的第77個AU上分別存在一份冗餘。。下面我們來看看3號磁碟(/dev/raw/raw10)的第76個AU的3號塊

[grid@jyrac1 ~]$ kfed read /dev/raw/raw10 aun=76 blkn=3 | more
kfbh.endian:                          1 ; 0x000: 0x01
kfbh.hard:                          130 ; 0x001: 0x82
kfbh.type:                            4 ; 0x002: KFBTYP_FILEDIR
kfbh.datfmt:                          1 ; 0x003: 0x01
kfbh.block.blk:                     259 ; 0x004: blk=259
kfbh.block.obj:                       1 ; 0x008: file=1
kfbh.check:                  1713481479 ; 0x00c: 0x6621a707
kfbh.fcn.base:                     3712 ; 0x010: 0x00000e80
kfbh.fcn.wrap:                        0 ; 0x014: 0x00000000
kfbh.spare1:                          0 ; 0x018: 0x00000000
kfbh.spare2:                          0 ; 0x01c: 0x00000000
kfffdb.node.incarn:           930413057 ; 0x000: A=1 NUMM=0x1bba7d00
kfffdb.node.frlist.number:   4294967295 ; 0x004: 0xffffffff
kfffdb.node.frlist.incarn:            0 ; 0x008: A=0 NUMM=0x0
kfffdb.hibytes:                       0 ; 0x00c: 0x00000000
kfffdb.lobytes:               796925952 ; 0x010: 0x2f802000
kfffdb.xtntcnt:                    1522 ; 0x014: 0x000005f2
kfffdb.xtnteof:                    1522 ; 0x018: 0x000005f2
kfffdb.blkSize:                    8192 ; 0x01c: 0x00002000
kfffdb.flags:                        17 ; 0x020: O=1 S=0 S=0 D=0 C=1 I=0 R=0 A=0
kfffdb.fileType:                      2 ; 0x021: 0x02
kfffdb.dXrs:                         18 ; 0x022: SCHE=0x1 NUMB=0x2
kfffdb.iXrs:                         19 ; 0x023: SCHE=0x1 NUMB=0x3
kfffdb.dXsiz[0]:             4294967295 ; 0x024: 0xffffffff
kfffdb.dXsiz[1]:                      0 ; 0x028: 0x00000000
kfffdb.dXsiz[2]:                      0 ; 0x02c: 0x00000000
kfffdb.iXsiz[0]:             4294967295 ; 0x030: 0xffffffff
kfffdb.iXsiz[1]:                      0 ; 0x034: 0x00000000
kfffdb.iXsiz[2]:                      0 ; 0x038: 0x00000000
kfffdb.xtntblk:                      63 ; 0x03c: 0x003f
kfffdb.break:                        60 ; 0x03e: 0x003c
kfffdb.priZn:                         0 ; 0x040: KFDZN_COLD
kfffdb.secZn:                         0 ; 0x041: KFDZN_COLD
kfffdb.ub2spare:                      0 ; 0x042: 0x0000
kfffdb.alias[0]:                    107 ; 0x044: 0x0000006b
kfffdb.alias[1]:             4294967295 ; 0x048: 0xffffffff
kfffdb.strpwdth:                      1 ; 0x04c: 0x01
kfffdb.strpsz:                       20 ; 0x04d: 0x14
kfffdb.usmsz:                         0 ; 0x04e: 0x0000
kfffdb.crets.hi:               33042832 ; 0x050: HOUR=0x10 DAYS=0xc MNTH=0xc YEAR=0x7e0
kfffdb.crets.lo:              285262848 ; 0x054: USEC=0x0 MSEC=0x31 SECS=0x10 MINS=0x4
kfffdb.modts.hi:               33042897 ; 0x058: HOUR=0x11 DAYS=0xe MNTH=0xc YEAR=0x7e0
kfffdb.modts.lo:                      0 ; 0x05c: USEC=0x0 MSEC=0x0 SECS=0x0 MINS=0x0
kfffdb.dasz[0]:                       0 ; 0x060: 0x00
kfffdb.dasz[1]:                       0 ; 0x061: 0x00
kfffdb.dasz[2]:                       0 ; 0x062: 0x00
kfffdb.dasz[3]:                       0 ; 0x063: 0x00
kfffdb.permissn:                      0 ; 0x064: 0x00
kfffdb.ub1spar1:                      0 ; 0x065: 0x00
kfffdb.ub2spar2:                      0 ; 0x066: 0x0000
kfffdb.user.entnum:                   0 ; 0x068: 0x0000
kfffdb.user.entinc:                   0 ; 0x06a: 0x0000
kfffdb.group.entnum:                  0 ; 0x06c: 0x0000
kfffdb.group.entinc:                  0 ; 0x06e: 0x0000
kfffdb.spare[0]:                      0 ; 0x070: 0x00000000
kfffdb.spare[1]:                      0 ; 0x074: 0x00000000
kfffdb.spare[2]:                      0 ; 0x078: 0x00000000
kfffdb.spare[3]:                      0 ; 0x07c: 0x00000000
kfffdb.spare[4]:                      0 ; 0x080: 0x00000000
kfffdb.spare[5]:                      0 ; 0x084: 0x00000000
kfffdb.spare[6]:                      0 ; 0x088: 0x00000000
kfffdb.spare[7]:                      0 ; 0x08c: 0x00000000
kfffdb.spare[8]:                      0 ; 0x090: 0x00000000
kfffdb.spare[9]:                      0 ; 0x094: 0x00000000
kfffdb.spare[10]:                     0 ; 0x098: 0x00000000
kfffdb.spare[11]:                     0 ; 0x09c: 0x00000000
kfffdb.usm:                             ; 0x0a0: length=0
kfffde[0].xptr.au:                  629 ; 0x4a0: 0x00000275
kfffde[0].xptr.disk:                  1 ; 0x4a4: 0x0001
kfffde[0].xptr.flags:                 0 ; 0x4a6: L=0 E=0 D=0 S=0
kfffde[0].xptr.chk:                  92 ; 0x4a7: 0x5c
kfffde[1].xptr.au:                  628 ; 0x4a8: 0x00000274
kfffde[1].xptr.disk:                  0 ; 0x4ac: 0x0000
kfffde[1].xptr.flags:                 0 ; 0x4ae: L=0 E=0 D=0 S=0
kfffde[1].xptr.chk:                  92 ; 0x4af: 0x5c
kfffde[2].xptr.au:                  626 ; 0x4b0: 0x00000272
kfffde[2].xptr.disk:                  3 ; 0x4b4: 0x0003
kfffde[2].xptr.flags:                 0 ; 0x4b6: L=0 E=0 D=0 S=0
kfffde[2].xptr.chk:                  89 ; 0x4b7: 0x59
......
kfffde[58].xptr.au:                 641 ; 0x670: 0x00000281
kfffde[58].xptr.disk:                 3 ; 0x674: 0x0003
kfffde[58].xptr.flags:                0 ; 0x676: L=0 E=0 D=0 S=0
kfffde[58].xptr.chk:                170 ; 0x677: 0xaa
kfffde[59].xptr.au:                 643 ; 0x678: 0x00000283
kfffde[59].xptr.disk:                 1 ; 0x67c: 0x0001
kfffde[59].xptr.flags:                0 ; 0x67e: L=0 E=0 D=0 S=0
kfffde[59].xptr.chk:                170 ; 0x67f: 0xaa
kfffde[60].xptr.au:                 641 ; 0x680: 0x00000281
kfffde[60].xptr.disk:                 2 ; 0x684: 0x0002
kfffde[60].xptr.flags:                0 ; 0x686: L=0 E=0 D=0 S=0
kfffde[60].xptr.chk:                171 ; 0x687: 0xab
kfffde[61].xptr.au:                 643 ; 0x688: 0x00000283
kfffde[61].xptr.disk:                 0 ; 0x68c: 0x0000
kfffde[61].xptr.flags:                0 ; 0x68e: L=0 E=0 D=0 S=0
kfffde[61].xptr.chk:                171 ; 0x68f: 0xab
.....

0-59號extent(kfffde[0]-kfffde[59])被稱作directly addressed extent,因為它們直接指向資料extent。而編號59以上的extent,被稱為indirectly addressed extent,因為它們指向的extent持有的是剩餘extent的資訊。

Indirectly addressed extents
下面檢視2號磁碟(/dev/raw/raw3)(kfffde[60].xptr.disk=2)的641號AU(kfffde[60].xptr.au=641)的內容

[grid@jyrac1 ~]$ kfed read /dev/raw/raw3 aun=641 | more
kfbh.endian:                          1 ; 0x000: 0x01
kfbh.hard:                          130 ; 0x001: 0x82
kfbh.type:                           12 ; 0x002: KFBTYP_INDIRECT
kfbh.datfmt:                          1 ; 0x003: 0x01
kfbh.block.blk:              2147483648 ; 0x004: blk=0 (indirect)
kfbh.block.obj:                     259 ; 0x008: file=259
kfbh.check:                  4179528366 ; 0x00c: 0xf91e8aae
kfbh.fcn.base:                     2090 ; 0x010: 0x0000082a
kfbh.fcn.wrap:                        0 ; 0x014: 0x00000000
kfbh.spare1:                          0 ; 0x018: 0x00000000
kfbh.spare2:                          0 ; 0x01c: 0x00000000
kffixb.dxsn:                         30 ; 0x000: 0x0000001e
kffixb.xtntblk:                     480 ; 0x004: 0x01e0
kffixb.dXrs:                         18 ; 0x006: SCHE=0x1 NUMB=0x2
kffixb.ub1spare:                      0 ; 0x007: 0x00
kffixb.ub4spare:                      0 ; 0x008: 0x00000000
kffixe[0].xptr.au:                  642 ; 0x00c: 0x00000282
kffixe[0].xptr.disk:                  2 ; 0x010: 0x0002
kffixe[0].xptr.flags:                 0 ; 0x012: L=0 E=0 D=0 S=0
kffixe[0].xptr.chk:                 168 ; 0x013: 0xa8
kffixe[1].xptr.au:                  644 ; 0x014: 0x00000284
kffixe[1].xptr.disk:                  0 ; 0x018: 0x0000
kffixe[1].xptr.flags:                 0 ; 0x01a: L=0 E=0 D=0 S=0
kffixe[1].xptr.chk:                 172 ; 0x01b: 0xac
kffixe[2].xptr.au:                  645 ; 0x01c: 0x00000285
kffixe[2].xptr.disk:                  0 ; 0x020: 0x0000
kffixe[2].xptr.flags:                 0 ; 0x022: L=0 E=0 D=0 S=0
kffixe[2].xptr.chk:                 173 ; 0x023: 0xad
kffixe[3].xptr.au:                  645 ; 0x024: 0x00000285
kffixe[3].xptr.disk:                  1 ; 0x028: 0x0001
kffixe[3].xptr.flags:                 0 ; 0x02a: L=0 E=0 D=0 S=0
kffixe[3].xptr.chk:                 172 ; 0x02b: 0xac
kffixe[4].xptr.au:                  646 ; 0x02c: 0x00000286
kffixe[4].xptr.disk:                  1 ; 0x030: 0x0001
kffixe[4].xptr.flags:                 0 ; 0x032: L=0 E=0 D=0 S=0
kffixe[4].xptr.chk:                 175 ; 0x033: 0xaf
kffixe[5].xptr.au:                  642 ; 0x034: 0x00000282
kffixe[5].xptr.disk:                  3 ; 0x038: 0x0003
kffixe[5].xptr.flags:                 0 ; 0x03a: L=0 E=0 D=0 S=0
kffixe[5].xptr.chk:                 169 ; 0x03b: 0xa9
kffixe[6].xptr.au:                  643 ; 0x03c: 0x00000283
kffixe[6].xptr.disk:                  3 ; 0x040: 0x0003
kffixe[6].xptr.flags:                 0 ; 0x042: L=0 E=0 D=0 S=0
kffixe[6].xptr.chk:                 168 ; 0x043: 0xa8
kffixe[7].xptr.au:                  643 ; 0x044: 0x00000283
kffixe[7].xptr.disk:                  2 ; 0x048: 0x0002
kffixe[7].xptr.flags:                 0 ; 0x04a: L=0 E=0 D=0 S=0
kffixe[7].xptr.chk:                 169 ; 0x04b: 0xa9
kffixe[8].xptr.au:                  644 ; 0x04c: 0x00000284
kffixe[8].xptr.disk:                  2 ; 0x050: 0x0002
kffixe[8].xptr.flags:                 0 ; 0x052: L=0 E=0 D=0 S=0
kffixe[8].xptr.chk:                 174 ; 0x053: 0xae
kffixe[9].xptr.au:                  647 ; 0x054: 0x00000287
kffixe[9].xptr.disk:                  1 ; 0x058: 0x0001
kffixe[9].xptr.flags:                 0 ; 0x05a: L=0 E=0 D=0 S=0
kffixe[9].xptr.chk:                 174 ; 0x05b: 0xae
kffixe[10].xptr.au:                 646 ; 0x05c: 0x00000286
kffixe[10].xptr.disk:                 0 ; 0x060: 0x0000
kffixe[10].xptr.flags:                0 ; 0x062: L=0 E=0 D=0 S=0
kffixe[10].xptr.chk:                174 ; 0x063: 0xae

透過上面的資訊可以確定這確實是一個indirect extent block(kfbh.type=KFBTYP_INDIRECT),它持有該資料檔案剩餘的extent的分佈資訊。

ASM 10G版本,ASM例項在初始化時,會向資料庫例項傳送所有資料檔案的Extent map,由於這種方式非常影響效能,資料庫檔案如果很大,需要消耗很多的時間,因此在ASM 11G版本以後,初始化時僅傳送Extent map中的前60個Extent(也就是元檔案1中記錄的60個Extent),其餘的在資料庫例項有需要時再傳送。

小結:
ASM檔案目錄維護了磁碟組中所有檔案的相關資訊,包括元資訊檔案、使用者建立的檔案、資料庫檔案。我們可以透過查詢v$asm_file檢視來獲取資料庫檔案的資訊,透過v$asm_alias檢視來獲取相關檔案的檔案號。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26015009/viewspace-2131504/,如需轉載,請註明出處,否則將追究法律責任。

相關文章