Oracle ASM Disk Directory
ASM的2號檔案就是ASM磁碟目錄,它用來跟蹤磁碟組中的所有磁碟。當磁碟組是一個獨立的儲存單元時,每個磁碟組有屬於它自己的ASM磁碟目錄。ASM中每一個磁碟組都是自解釋的,磁碟組之間沒有任何的資訊上依賴。
對ASM來說,磁碟目錄只是一個普通的ASM檔案。在ASM的檔案目錄中也會有它的條目,當磁碟組應用冗餘策略時,磁碟目錄也會生成映象副本,並且也會像其他檔案一樣根據實際需要而增長。
每個磁碟目錄條目維護以下內容:
.磁碟號
.磁碟的狀態
.磁碟的名稱(可能與作業系統所顯示的磁碟名不一樣)
.所在的Failgroup名稱
.建立的時間戳
.故障的時間戳
.故障時間(自失敗時間戳截止目前的時間)
.resize目標值
.磁碟修復時間
.Zone的資訊
V$ASM_DISK檢視
磁碟目錄中所維護的大部分資訊都可以透過查詢v$asm_disk檢視來獲得。對於被發現的每個磁碟在檢視中都有一條記錄來表示,包括那些不屬於任何磁碟組的磁碟。當每次查詢v$asm_disk檢視時,ASM就會執行磁碟發現操作,因此對這個檢視執行查詢的是有代價的。
下面的例子顯示了在ASM例項中查詢V$ASM_DISK檢視的輸出
SQL> select group_number, disk_number, state, name, mount_status from v$asm_disk order by 1,2; GROUP_NUMBER DISK_NUMBER STATE NAME MOUNT_STATUS ------------ ----------- ------------------------------ ------------------------------ -------------- 0 0 NORMAL CLOSED 0 1 NORMAL CLOSED 0 2 NORMAL CLOSED 0 3 NORMAL CLOSED 0 4 NORMAL CLOSED 0 5 NORMAL CLOSED 1 0 NORMAL ARCHDG_0000 CACHED 1 1 NORMAL ARCHDG_0001 CACHED 2 0 NORMAL CRSDG_0000 CACHED 2 1 NORMAL CRSDG_0001 CACHED 3 0 NORMAL DATADG_0001 CACHED 3 1 NORMAL DATADG_0003 CACHED 3 2 NORMAL DATADG_0002 CACHED 3 3 NORMAL DATADG_0000 CACHED 14 rows selected.
獲得了所有ASM識別到的磁碟,包括了哪些不是當前正mount磁碟組(GROUP_NUMBER=0)的磁碟。
V$ASM_DISK_STAT檢視
檢視V$ASM_DISK_STAT展示了跟V$ASM_DISK相同的資訊,不過查詢V$ASM_DISK_STAT並不會執行發現所有磁碟的操作。它的資訊來自於ASM例項的SGA區,查詢V$ASM_DISK_STAT的代價不大,因為並不進行發現磁碟的操作,但是這個查詢的結果可能並不能實時反應系統磁碟的現狀。並且V$ASM_DISK_STAT中的資訊只能反映出當前掛載磁碟組的磁碟資訊,而不僅僅是不能反映出系統新加入的盤的資訊。
下面的查詢顯示了在ASM例項中查詢V$ASM_DISK_STAT檢視的輸出
SQL> select group_number, disk_number, state, name, mount_status from v$asm_disk_stat order by 1,2; GROUP_NUMBER DISK_NUMBER STATE NAME MOUNT_STATUS ------------ ----------- ------------------------------ ------------------------------ -------------- 1 0 NORMAL ARCHDG_0000 CACHED 1 1 NORMAL ARCHDG_0001 CACHED 2 0 NORMAL CRSDG_0000 CACHED 2 1 NORMAL CRSDG_0001 CACHED 3 0 NORMAL DATADG_0001 CACHED 3 1 NORMAL DATADG_0003 CACHED 3 2 NORMAL DATADG_0002 CACHED 3 3 NORMAL DATADG_0000 CACHED 8 rows selected.
只看到了mount的磁碟組上的磁碟
磁碟目錄儲存位置
可透過在ASM例項中查詢固定表X$KFFXP來找到屬於ASM 2號檔案磁碟目錄的AU分佈情況。並且透過關聯v$asm_disk_stat檢視可以獲得磁碟名,下面來查詢磁碟組3(datadg)的磁碟目錄AU分佈情況。
SQL> select group_number,disk_number,name,path,state from v$asm_disk where group_number=3 order by 1,2; GROUP_NUMBER DISK_NUMBER NAME PATH STATE ------------ ----------- ------------------------------ ------------------------------ ------------------------------ 3 0 DATADG_0001 /dev/raw/raw11 NORMAL 3 1 DATADG_0003 /dev/raw/raw4 NORMAL 3 2 DATADG_0002 /dev/raw/raw3 NORMAL 3 3 DATADG_0000 /dev/raw/raw10 NORMAL SQL> select x.xnum_kffxp "virtual extent",pxn_kffxp "physical extent",x.au_kffxp "au",x.disk_kffxp "disk #",d.name "disk name" 2 from x$kffxp x, v$asm_disk_stat d 3 where x.group_kffxp=d.group_number 4 and x.disk_kffxp=d.disk_number 5 and x.group_kffxp=3 6 and x.number_kffxp=2 7 order by 1, 2; virtual extent physical extent au disk # disk name -------------- --------------- ---------- ---------- ------------------------------------------------------------ 0 0 3 2 DATADG_0002 0 1 3 0 DATADG_0001 0 2 3 1 DATADG_0003
上面的結果可以看出ASM的磁碟目錄有三份映象,當前磁碟目錄的大小是3個物理extent(本例中也就是3個AU),再次強調,即使在一個normal冗餘的磁碟組中,ASM的磁碟目錄也有三份映象。讓我們使用kfed工具檢視下磁碟目錄的具體內容,由於資料在3個AU中是一樣的,我們只需要檢視第一個AU的內容就可以了,這裡是DATADG_0001(/dev/raw/raw11)的AU 3:
[grid@jyrac1 ~]$ kfed read /dev/raw/raw11 aun=3 | more kfbh.endian: 1 ; 0x000: 0x01 kfbh.hard: 130 ; 0x001: 0x82 kfbh.type: 6 ; 0x002: KFBTYP_DISKDIR kfbh.datfmt: 1 ; 0x003: 0x01 kfbh.block.blk: 0 ; 0x004: blk=0 kfbh.block.obj: 2 ; 0x008: file=2 kfbh.check: 17204021 ; 0x00c: 0x01068335 kfbh.fcn.base: 311 ; 0x010: 0x00000137 kfbh.fcn.wrap: 0 ; 0x014: 0x00000000 kfbh.spare1: 0 ; 0x018: 0x00000000 kfbh.spare2: 0 ; 0x01c: 0x00000000 kffdnd.bnode.incarn: 1 ; 0x000: A=1 NUMM=0x0 kffdnd.bnode.frlist.number: 4294967295 ; 0x004: 0xffffffff kffdnd.bnode.frlist.incarn: 0 ; 0x008: A=0 NUMM=0x0 kffdnd.overfl.number: 4294967295 ; 0x00c: 0xffffffff kffdnd.overfl.incarn: 0 ; 0x010: A=0 NUMM=0x0 kffdnd.parent.number: 0 ; 0x014: 0x00000000 kffdnd.parent.incarn: 1 ; 0x018: A=1 NUMM=0x0 kffdnd.fstblk.number: 0 ; 0x01c: 0x00000000 kffdnd.fstblk.incarn: 1 ; 0x020: A=1 NUMM=0x0 kfddde[0].entry.incarn: 1 ; 0x024: A=1 NUMM=0x0 kfddde[0].entry.hash: 0 ; 0x028: 0x00000000 kfddde[0].entry.refer.number:4294967295 ; 0x02c: 0xffffffff kfddde[0].entry.refer.incarn: 0 ; 0x030: A=0 NUMM=0x0 kfddde[0].dsknum: 0 ; 0x034: 0x0000 --diskgroup中,該disk的disk編號,從0開始排序,該值為0,說明該disk是這個磁碟組中的第一個disk kfddde[0].state: 2 ; 0x036: KFDSTA_NORMAL--disk狀態。其中2表示normal。在asm中,該值對應v$asm_disk.state,主要有如下幾種值: UNKNOWN ---disk不被diskgroup所識別,通常是diskgroup沒有mount。 NORMAL ---disk目前處於online狀態,操作正常。 ADDING ---表示disk正在被加入到diskgroup當中,其中add disk過程涉及到一系列的操作,包括更新pst,fst,disk dir以及reblance等各項操作。 DROPPING ---表示disk正在被從某個diskgroup中刪除,該操作可以認為是adding的相反過程 HUNG ---該狀態表示在drop disk的過程中,由於diskgroup 空間不足而不能完成reblance操作而導致disk處於hung狀態。 FORCING ---該狀態表示disk已經從diskgroup中移除,但是其disk上的資料尚未被解除安裝,很可能是強制drop。 DROPPED ---表示disk已經從diskgroup中刪除且完成了一系列的相關操作。 #define KFDSTA_INVALID ((kfdsta)0) /* Illegal value */ #define KFDSTA_UNKNOWN ((kfdsta)1) /* ASM disk state not known */ #define KFDSTA_NORMAL ((kfdsta)2) /* Happy disk */ #define KFDSTA_UNUSED ((kfdsta)3) /* Unused State - Open */ #define KFDSTA_DROPPING ((kfdsta)4) /* Disk being dropped from group */ #define KFDSTA_HUNG ((kfdsta)5) /* Disk drop operation hung */ #define KFDSTA_FORCING ((kfdsta)6) /* Disk beinng drop forced */ #define KFDSTA_DROPPED ((kfdsta)7) /* Disk no longer part of group */ #define KFDSTA_ADDING ((kfdsta)8) /* Disk being globally validated */ kfddde[0].ddchgfl: 132 ; 0x037: 0x84 kfddde[0].dskname: DATADG_0001 ; 0x038: length=11 --磁碟名稱,這是asm中定義的diskname. kfddde[0].fgname: DATADG_0001 ; 0x058: length=11 --這表示failgroup diskname kfddde[0].crestmp.hi: 33042831 ; 0x078: HOUR=0xf DAYS=0xc MNTH=0xc YEAR=0x7e0 kfddde[0].crestmp.lo: 2456905728 ; 0x07c: USEC=0x0 MSEC=0x5a SECS=0x27 MINS=0x24 kfddde[0].failstmp.hi: 0 ; 0x080: HOUR=0x0 DAYS=0x0 MNTH=0x0 YEAR=0x0 kfddde[0].failstmp.lo: 0 ; 0x084: USEC=0x0 MSEC=0x0 SECS=0x0 MINS=0x0 kfddde[0].timer: 0 ; 0x088: 0x00000000 kfddde[0].size: 5120 ; 0x08c: 0x00001400 --disk大小,由於au預設是1m,所以這裡是5120m kfddde[0].srRloc.super.hiStart: 0 ; 0x090: 0x00000000 kfddde[0].srRloc.super.loStart: 0 ; 0x094: 0x00000000 kfddde[0].srRloc.super.length: 0 ; 0x098: 0x00000000 kfddde[0].srRloc.incarn: 0 ; 0x09c: 0x00000000 kfddde[0].dskrprtm: 0 ; 0x0a0: 0x00000000 kfddde[0].start0: 0 ; 0x0a4: 0x00000000 kfddde[0].size0: 5120 ; 0x0a8: 0x00001400 kfddde[0].used0: 76 ; 0x0ac: 0x0000004c kfddde[0].slot: 0 ; 0x0b0: 0x00000000 ..... kfddde[1].entry.incarn: 1 ; 0x1e4: A=1 NUMM=0x0 kfddde[1].entry.hash: 1 ; 0x1e8: 0x00000001 kfddde[1].entry.refer.number:4294967295 ; 0x1ec: 0xffffffff kfddde[1].entry.refer.incarn: 0 ; 0x1f0: A=0 NUMM=0x0 kfddde[1].dsknum: 1 ; 0x1f4: 0x0001 kfddde[1].state: 2 ; 0x1f6: KFDSTA_NORMAL kfddde[1].ddchgfl: 132 ; 0x1f7: 0x84 kfddde[1].dskname: DATADG_0003 ; 0x1f8: length=11 kfddde[1].fgname: DATADG_0003 ; 0x218: length=11 kfddde[1].crestmp.hi: 33042831 ; 0x238: HOUR=0xf DAYS=0xc MNTH=0xc YEAR=0x7e0 kfddde[1].crestmp.lo: 2456905728 ; 0x23c: USEC=0x0 MSEC=0x5a SECS=0x27 MINS=0x24 kfddde[1].failstmp.hi: 0 ; 0x240: HOUR=0x0 DAYS=0x0 MNTH=0x0 YEAR=0x0 kfddde[1].failstmp.lo: 0 ; 0x244: USEC=0x0 MSEC=0x0 SECS=0x0 MINS=0x0 kfddde[1].timer: 0 ; 0x248: 0x00000000 kfddde[1].size: 5120 ; 0x24c: 0x00001400 kfddde[1].srRloc.super.hiStart: 0 ; 0x250: 0x00000000 kfddde[1].srRloc.super.loStart: 0 ; 0x254: 0x00000000 kfddde[1].srRloc.super.length: 0 ; 0x258: 0x00000000 kfddde[1].srRloc.incarn: 0 ; 0x25c: 0x00000000 kfddde[1].dskrprtm: 0 ; 0x260: 0x00000000 kfddde[1].start0: 0 ; 0x264: 0x00000000 kfddde[1].size0: 5120 ; 0x268: 0x00001400 kfddde[1].used0: 76 ; 0x26c: 0x0000004c kfddde[1].slot: 0 ; 0x270: 0x00000000 .... kfddde[2].entry.incarn: 1 ; 0x3a4: A=1 NUMM=0x0 kfddde[2].entry.hash: 2 ; 0x3a8: 0x00000002 kfddde[2].entry.refer.number:4294967295 ; 0x3ac: 0xffffffff kfddde[2].entry.refer.incarn: 0 ; 0x3b0: A=0 NUMM=0x0 kfddde[2].dsknum: 2 ; 0x3b4: 0x0002 kfddde[2].state: 2 ; 0x3b6: KFDSTA_NORMAL kfddde[2].ddchgfl: 132 ; 0x3b7: 0x84 kfddde[2].dskname: DATADG_0002 ; 0x3b8: length=11 kfddde[2].fgname: DATADG_0002 ; 0x3d8: length=11 kfddde[2].crestmp.hi: 33042831 ; 0x3f8: HOUR=0xf DAYS=0xc MNTH=0xc YEAR=0x7e0 kfddde[2].crestmp.lo: 2456905728 ; 0x3fc: USEC=0x0 MSEC=0x5a SECS=0x27 MINS=0x24 kfddde[2].failstmp.hi: 0 ; 0x400: HOUR=0x0 DAYS=0x0 MNTH=0x0 YEAR=0x0 kfddde[2].failstmp.lo: 0 ; 0x404: USEC=0x0 MSEC=0x0 SECS=0x0 MINS=0x0 kfddde[2].timer: 0 ; 0x408: 0x00000000 kfddde[2].size: 5120 ; 0x40c: 0x00001400 kfddde[2].srRloc.super.hiStart: 0 ; 0x410: 0x00000000 kfddde[2].srRloc.super.loStart: 0 ; 0x414: 0x00000000 kfddde[2].srRloc.super.length: 0 ; 0x418: 0x00000000 kfddde[2].srRloc.incarn: 0 ; 0x41c: 0x00000000 kfddde[2].dskrprtm: 0 ; 0x420: 0x00000000 kfddde[2].start0: 0 ; 0x424: 0x00000000 kfddde[2].size0: 5120 ; 0x428: 0x00001400 kfddde[2].used0: 77 ; 0x42c: 0x0000004d kfddde[2].slot: 0 ; 0x430: 0x00000000 ... kfddde[3].entry.incarn: 1 ; 0x564: A=1 NUMM=0x0 kfddde[3].entry.hash: 3 ; 0x568: 0x00000003 kfddde[3].entry.refer.number:4294967295 ; 0x56c: 0xffffffff kfddde[3].entry.refer.incarn: 0 ; 0x570: A=0 NUMM=0x0 kfddde[3].dsknum: 3 ; 0x574: 0x0003 kfddde[3].state: 2 ; 0x576: KFDSTA_NORMAL kfddde[3].ddchgfl: 132 ; 0x577: 0x84 kfddde[3].dskname: DATADG_0000 ; 0x578: length=11 kfddde[3].fgname: DATADG_0000 ; 0x598: length=11 kfddde[3].crestmp.hi: 33042831 ; 0x5b8: HOUR=0xf DAYS=0xc MNTH=0xc YEAR=0x7e0 kfddde[3].crestmp.lo: 2456905728 ; 0x5bc: USEC=0x0 MSEC=0x5a SECS=0x27 MINS=0x24 kfddde[3].failstmp.hi: 0 ; 0x5c0: HOUR=0x0 DAYS=0x0 MNTH=0x0 YEAR=0x0 kfddde[3].failstmp.lo: 0 ; 0x5c4: USEC=0x0 MSEC=0x0 SECS=0x0 MINS=0x0 kfddde[3].timer: 0 ; 0x5c8: 0x00000000 kfddde[3].size: 5120 ; 0x5cc: 0x00001400 kfddde[3].srRloc.super.hiStart: 0 ; 0x5d0: 0x00000000 kfddde[3].srRloc.super.loStart: 0 ; 0x5d4: 0x00000000 kfddde[3].srRloc.super.length: 0 ; 0x5d8: 0x00000000 kfddde[3].srRloc.incarn: 0 ; 0x5dc: 0x00000000 kfddde[3].dskrprtm: 0 ; 0x5e0: 0x00000000 kfddde[3].start0: 0 ; 0x5e4: 0x00000000 kfddde[3].size0: 5120 ; 0x5e8: 0x00001400 kfddde[3].used0: 76 ; 0x5ec: 0x0000004c kfddde[3].slot: 0 ; 0x5f0: 0x00000000 ....
輸出資訊中的kfbh.type為KFBTYP_DISKDIR代表了這是一個磁碟目錄。ASM中的磁碟的資訊儲存在上面輸出內容的kfddde的區域,kfddde[0] 是關於磁碟0,kfddde[1]是關於磁碟1,以此類推。
以這種方式我們可以知道磁碟組中所有磁碟的資訊,就像你看到的,大部分的資訊都可以透過檢視V$ASM_DISK去獲取,而不需要透過kfed這種工具去檢視。
使用kfed工具來判斷磁碟目錄位置
使用查詢得到的磁碟目錄AU分佈如下:
SQL> select group_number,disk_number,name,path,state from v$asm_disk where group_number=3 order by 1,2; GROUP_NUMBER DISK_NUMBER NAME PATH STATE ------------ ----------- ------------------------------ ------------------------------ ------------------------------ 3 0 DATADG_0001 /dev/raw/raw11 NORMAL 3 1 DATADG_0003 /dev/raw/raw4 NORMAL 3 2 DATADG_0002 /dev/raw/raw3 NORMAL 3 3 DATADG_0000 /dev/raw/raw10 NORMAL SQL> select x.xnum_kffxp "virtual extent",pxn_kffxp "physical extent",x.au_kffxp "au",x.disk_kffxp "disk #",d.name "disk name" 2 from x$kffxp x, v$asm_disk_stat d 3 where x.group_kffxp=d.group_number 4 and x.disk_kffxp=d.disk_number 5 and x.group_kffxp=3 6 and x.number_kffxp=2 7 order by 1, 2; virtual extent physical extent au disk # disk name -------------- --------------- ---------- ---------- ------------------------------------------------------------ 0 0 3 2 DATADG_0002 0 1 3 0 DATADG_0001 0 2 3 1 DATADG_0003
上面的結果可以看出ASM的磁碟目錄有三份映象,當前磁碟目錄的大小是3個物理extent(本例中也就是3個AU),再次強調,即使在一個normal冗餘的磁碟組中,ASM的磁碟目錄也有三份映象。
讀取磁碟頭
[grid@jyrac1 ~]$ kfed read /dev/raw/raw3 | more kfbh.endian: 1 ; 0x000: 0x01 kfbh.hard: 130 ; 0x001: 0x82 kfbh.type: 1 ; 0x002: KFBTYP_DISKHEAD kfbh.datfmt: 1 ; 0x003: 0x01 kfbh.block.blk: 0 ; 0x004: blk=0 kfbh.block.obj: 2147483650 ; 0x008: disk=2 kfbh.check: 3693686872 ; 0x00c: 0xdc293058 kfbh.fcn.base: 0 ; 0x010: 0x00000000 kfbh.fcn.wrap: 0 ; 0x014: 0x00000000 kfbh.spare1: 0 ; 0x018: 0x00000000 kfbh.spare2: 0 ; 0x01c: 0x00000000 kfdhdb.driver.provstr: ORCLDISK ; 0x000: length=8 kfdhdb.driver.reserved[0]: 0 ; 0x008: 0x00000000 kfdhdb.driver.reserved[1]: 0 ; 0x00c: 0x00000000 kfdhdb.driver.reserved[2]: 0 ; 0x010: 0x00000000 kfdhdb.driver.reserved[3]: 0 ; 0x014: 0x00000000 kfdhdb.driver.reserved[4]: 0 ; 0x018: 0x00000000 kfdhdb.driver.reserved[5]: 0 ; 0x01c: 0x00000000 kfdhdb.compat: 186646528 ; 0x020: 0x0b200000 kfdhdb.dsknum: 2 ; 0x024: 0x0002 kfdhdb.grptyp: 2 ; 0x026: KFDGTP_NORMAL kfdhdb.hdrsts: 3 ; 0x027: KFDHDR_MEMBER kfdhdb.dskname: DATADG_0002 ; 0x028: length=11 kfdhdb.grpname: DATADG ; 0x048: length=6 kfdhdb.fgname: DATADG_0002 ; 0x068: length=11 kfdhdb.capname: ; 0x088: length=0 kfdhdb.crestmp.hi: 33042831 ; 0x0a8: HOUR=0xf DAYS=0xc MNTH=0xc YEAR=0x7e0 kfdhdb.crestmp.lo: 2456905728 ; 0x0ac: USEC=0x0 MSEC=0x5a SECS=0x27 MINS=0x24 kfdhdb.mntstmp.hi: 33042897 ; 0x0b0: HOUR=0x11 DAYS=0xe MNTH=0xc YEAR=0x7e0 kfdhdb.mntstmp.lo: 144833536 ; 0x0b4: USEC=0x0 MSEC=0x7f SECS=0xa MINS=0x2 kfdhdb.secsize: 512 ; 0x0b8: 0x0200 kfdhdb.blksize: 4096 ; 0x0ba: 0x1000 kfdhdb.ausize: 1048576 ; 0x0bc: 0x00100000 kfdhdb.mfact: 113792 ; 0x0c0: 0x0001bc80 kfdhdb.dsksize: 5120 ; 0x0c4: 0x00001400 kfdhdb.pmcnt: 2 ; 0x0c8: 0x00000002 kfdhdb.fstlocn: 1 ; 0x0cc: 0x00000001 kfdhdb.altlocn: 2 ; 0x0d0: 0x00000002 --allocate table kfdhdb.f1b1locn: 2 ; 0x0d4: 0x00000002 --file directory kfdhdb.redomirrors[0]: 0 ; 0x0d8: 0x0000 kfdhdb.redomirrors[1]: 0 ; 0x0da: 0x0000 kfdhdb.redomirrors[2]: 0 ; 0x0dc: 0x0000 kfdhdb.redomirrors[3]: 0 ; 0x0de: 0x0000 kfdhdb.dbcompat: 168820736 ; 0x0e0: 0x0a100000
allocate table後設資料在第2個AU裡面,而那麼必然disk directory資訊也在該AU裡面,因為進行在讀取alocate table資訊時,必然要先讀取disk directory。file directoryb也在第2個AU中
[grid@jyrac1 ~]$ kfed read /dev/raw/raw11 | grep kfdhdb.f1b1locn kfdhdb.f1b1locn: 2 ; 0x0d4: 0x00000002
由於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號檔案,從中找出要讀的目標檔案在磁碟上的分佈位置,然後再去讀取相應的檔案的資料。
由於磁碟目錄的檔案號為2,所以讀取2號AU的2號塊
[grid@jyrac1 ~]$ kfed read /dev/raw/raw11 aun=2 blkn=2 | 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: 2 ; 0x004: blk=2 kfbh.block.obj: 1 ; 0x008: file=1 kfbh.check: 305881854 ; 0x00c: 0x123b62fe kfbh.fcn.base: 0 ; 0x010: 0x00000000 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: 1048576 ; 0x010: 0x00100000 kfffdb.xtntcnt: 3 ; 0x014: 0x00000003 kfffdb.xtnteof: 3 ; 0x018: 0x00000003 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: 3 ; 0x03c: 0x0003 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: 2457465856 ; 0x054: USEC=0x0 MSEC=0x27d SECS=0x27 MINS=0x24 kfffdb.modts.hi: 33042831 ; 0x058: HOUR=0xf DAYS=0xc MNTH=0xc YEAR=0x7e0 kfffdb.modts.lo: 2457465856 ; 0x05c: USEC=0x0 MSEC=0x27d 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: 3 ; 0x4a0: 0x00000003 kfffde[0].xptr.disk: 2 ; 0x4a4: 0x0002 kfffde[0].xptr.flags: 0 ; 0x4a6: L=0 E=0 D=0 S=0 kfffde[0].xptr.chk: 43 ; 0x4a7: 0x2b kfffde[1].xptr.au: 3 ; 0x4a8: 0x00000003 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: 41 ; 0x4af: 0x29 kfffde[2].xptr.au: 3 ; 0x4b0: 0x00000003 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: 40 ; 0x4b7: 0x28 kfffde[3].xptr.au: 4294967295 ; 0x4b8: 0xffffffff kfffde[3].xptr.disk: 65535 ; 0x4bc: 0xffff kfffde[3].xptr.flags: 0 ; 0x4be: L=0 E=0 D=0 S=0 kfffde[3].xptr.chk: 42 ; 0x4bf: 0x2a kfffde[4].xptr.au: 4294967295 ; 0x4c0: 0xffffffff kfffde[4].xptr.disk: 65535 ; 0x4c4: 0xffff kfffde[4].xptr.flags: 0 ; 0x4c6: L=0 E=0 D=0 S=0 kfffde[4].xptr.chk: 42 ; 0x4c7: 0x2a kfffde[5].xptr.au: 4294967295 ; 0x4c8: 0xffffffff
kfffde,是結構陣列。由於我這裡磁碟目錄有三份映象,kfffde[0]的資料元素,
存放了2號檔案第一個AU的位置。kfffde[1]存放了2號檔案第二個AU位置,kfffde[2]存放了2號檔案第三個AU位置等等,依次類推。我們來看一下上面的資訊:
kfffde[0].xptr.au=3 --3號AU
kfffde[0].xptr.disk=2 --2號磁碟
上兩個資訊合起來,2號盤3號AU,這就是2號檔案(磁碟目錄)第一個AU的位置
kfffde[1].xptr.au=3 --3號AU
kfffde[1].xptr.disk=0 --0號磁碟
kfffde[2].xptr.au=3 --3號AU
kfffde[2].xptr.disk=1 --1號磁碟
上面的資訊顯示了2號檔案的映象副本儲存在0號盤3號AU與1號盤的3號AU中。這與用查詢x$kffxp檢視所得到的後設資料分佈情況一致。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26015009/viewspace-2131532/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle ASM Disk Used Space DirectoryOracleASM
- Oracle ASM User Directory and Group DirectoryOracleASM
- Oracle ASM File DirectoryOracleASM
- Oracle ASM Alias DirectoryOracleASM
- Oracle ASM Template DirectoryOracleASM
- Oracle ASM Disk PartnerOracleASM
- Oracle ASM Attributes DirectoryOracleASM
- Oracle ASM Volume DirectoryOracleASM
- Oracle ASM Active Change DirectoryOracleASM
- Oracle ASM Disk HeaderOracleASMHeader
- Oracle ASM spfile in a disk groupOracleASM
- Oracle ASM Staleness Directory and Staleness RegistryOracleASM
- Oracle ASM ACFS disk group rebalanceOracleASM
- Oracle ASM Disk Group AttributesOracleASM
- Oracle ASM Continuing Operations DirectoryOracleASMUI
- drop asm disk、撤銷drop asm diskASM
- [Oracle Script] ASM Disk Groups UsedOracleASM
- 手工建立ASM Disk Groups、為 ASM Disk Groups 新增 diskASM
- Oracle ASM disk誤被格式化OracleASM
- Asm disk managerASM
- ASM Disk Group TemplateASM
- oracle10g_asm_v$asm_disk之header_statusOracleASMHeader
- ASM: Device is already labeled for ASM diskASMdev
- Oracle 使用BBED 檢視 ASM Disk Header 內容OracleASMHeader
- ASM DISK HEADER CORRUPTION & REPAIRASMHeaderAI
- ASM Normal需要3個disk ?ASMORM
- asm disk 的結構(1)ASM
- oracleasm createdisk ASM: Device is already labeled for ASM diskOracleASMdev
- ASM 翻譯系列第十彈:ASM Internal ASM DISK headerASMHeader
- oracle crs voting disk損壞一例(asm+rac)OracleASM
- Using ASMLIB Management ASM DiskASM
- ASM磁碟組刪除DISK操作ASM
- Identify If A Disk/Part Is Still Used By ASM,Used by ASM Or Used by ASM_603210.1IDEASM
- RAC關鍵資訊(OCR/VOTE DISK/ASM DISK HEADER)備份ASMHeader
- Oracle OCP IZ0-053 Q240(ASM DISK_REPAIR_TIME)OracleASMAI
- ASM 11g New Features - How ASM Disk Resync WorksASM
- V$ASM_DISK 檢視含義ASM
- create directory in OracleOracle