Oracle ASM File Directory
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle ASM User Directory and Group DirectoryOracleASM
- Oracle ASM Disk DirectoryOracleASM
- Oracle ASM Alias DirectoryOracleASM
- Oracle ASM Template DirectoryOracleASM
- Oracle ASM Attributes DirectoryOracleASM
- Oracle ASM Volume DirectoryOracleASM
- Oracle ASM Active Change DirectoryOracleASM
- Oracle ASM Disk Used Space DirectoryOracleASM
- Oracle ASM Staleness Directory and Staleness RegistryOracleASM
- Oracle ASM Continuing Operations DirectoryOracleASMUI
- Using Create directory & UTL_FILE in OracleOracle
- Oracle ASM Cluster File Systems (ACOracleASM
- Oracle ACFS ( ASM Cluster File System )OracleASM
- python unix :No such file or directoryPython
- Oracle ASM How many allocation units per fileOracleASM
- docker容器掛載 No such file or directoryDocker
- Oracle Expdp報 ORA-19505, ORA-27037 No such file or directoryOracle
- gitbook no such file or directory 怎麼解決Git
- Oracle 12C Database File Mapping for Oracle ASM FilesOracleDatabaseAPPASM
- fatal error: openssl/sha.h: No such file or directoryError
- fatal error: sys/cdefs.h: No such file or directoryError
- yum-GPG key retrieval failed: No such file or directoryAI
- 【jenkins】/usr/bin/env: php: No such file or directoryJenkinsPHP
- create directory in OracleOracle
- libmysqlclient.so.16: cannot open shared object file: No such file or directoryIBMMySqlclientObject
- libcap.so.1:cannot open shared object file: No such file or directoryObject
- libXext.so.6: cannot open shared object file: No such file or directoryObject
- libz.so.1: cannot open shared object file: No such file or directoryObject
- ASM file metadata operationASM
- psql: error: could not connect to server: No such file or directorySQLErrorServer
- fatal error: libmemcached/memcached.h: No such file or directoryErrorIBM
- ImportError: libffi.so.7: cannot open shared object file: No such file or directoryImportErrorObject
- move oracle 10 directoryOracle
- ORACLE directory 目錄Oracle
- ASM 翻譯系列第八彈:ASM Internal ASM file extent mapASM
- 高德地圖使用cocoapods No such file or directory錯誤地圖
- Move datafile:From File System to ASMASM
- Move datafile:From ASM to File SystemASM