本篇文章講述asm元資訊的2号檔案,asm的2号檔案是asm的磁盤目錄,它跟蹤磁盤組中的所有磁盤。由于在asm中磁盤組是一個獨立的存儲機關,是以每一個磁盤組都會有自己的磁盤目錄。
譯者注:asm中每一個磁盤組都是自解釋的,磁盤組之間沒有任何的資訊上依賴
對asm來說,磁盤目錄隻是一個普通的asm檔案,在asm的檔案目錄中也會有它的條目,如果磁盤組做了備援政策,它也會相應做鏡像,也會像其他檔案一樣根據實際需要做空間的伸長。
每個磁盤目錄的條目都維護了如下的一些資訊:
· 磁盤号
· 磁盤的狀态
· 磁盤的名稱
· 所在的failgroup名稱
· 建立的時間戳
· 失敗的時間戳
· 自失敗時間戳截止目前的時間
· resize目标值
· 磁盤修複時間
· zone的資訊
磁盤目錄的大部分資訊都可以通過視圖v$asm_disk獲得,每一個磁盤都在這個視圖中有一行記錄,這些磁盤包括哪些還不是任何磁盤組的磁盤。每次查詢這個視圖都會導緻asm執行磁盤的發現操作,是以查詢這個視圖的代價是非常大的。
下面的例子顯示了在asm執行個體中查詢v$asm_disk視圖的輸出:
sql> select group_number, disk_number, state, name, mount_status
from v$asm_disk;
group_number disk_number state name mount_s
------------ ----------- -------- ------------ -------
0 0 normal closed
0 1 normal closed
0 2 normal closed
0 6 normal closed
1 0 normal asmdisk1 cached
1 1 normal asmdisk2 cached
1 2 normal asmdisk3 cached
1 3 normal asmdisk4 cached
2 0 normal asmdisk5 cached
2 1 normal asmdisk6 cached
10 rows selected.
sql>
我們獲得了所有asm識别到的磁盤,包括了哪些不是目前正mount磁盤組(group_number=0)的磁盤。
視圖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視圖的輸出:
from v$asm_disk_stat;
6 rows selected.
this time, we only see disks for the mounted disk groups.
這次,我們隻看到了mount的磁盤組上的磁盤。
我們可以在asm執行個體中查詢固态表x$kffxp來檢視哪些au屬于asm的2号檔案,同時通過join視圖v$asm_disk_stat來擷取asm的磁盤名稱,讓我們來對一個磁盤組進行查詢:
sql> select x.xnum_kffxp "extent",
x.au_kffxp "au",
x.disk_kffxp "disk #",
d.name "disk name"
from x$kffxp x, v$asm_disk_stat d
where x.group_kffxp=d.group_number
and x.disk_kffxp=d.disk_number
and x.group_kffxp=1
and x.number_kffxp=2
order by 1, 2;
extent au disk # disk name
--------- ---------- ---------- ---------
0 2 3 asmdisk4
0 3 0 asmdisk1
0 3 1 asmdisk2
上面的結果展示了2個内容:asm的磁盤目錄被做了3重鏡像,目前磁盤目錄的大小是3個實體extent(本例中也就是3個au),再次強調,即使在一個normal備援的磁盤組中,asm的磁盤目錄也被做了3重鏡像。
讓我們使用kfed工具檢視下磁盤目錄的具體内容,由于資料在3個au中是一樣的,我們隻需要檢視第一個au的内容就可以了,這裡是asmdisk4的au 2:
$ kfed read /dev/oracleasm/disks/asmdisk4 aun=2 | more
kfbh.endian: 1 ; 0x000: 0x01
kfbh.hard: 130 ; 0x001: 0x82
kfbh.type: 6 ; 0x002: kfbtyp_diskdir
...
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
kfddde[0].state: 2 ; 0x036: kfdsta_normal
kfddde[0].ddchgfl: 132 ; 0x037: 0x84
kfddde[0].dskname: asmdisk1 ; 0x038: length=8
kfddde[0].fgname: asmdisk1 ; 0x058: length=8
kfddde[0].crestmp.hi: 32960657 ; 0x078: hour=0x11 days=0x4 mnth=0xc year=0x7db
kfddde[0].crestmp.lo: 2843202560 ; 0x07c: usec=0x0 msec=0x1f5 secs=0x17 mins=0x2a
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: 4094 ; 0x08c: 0x00000ffe
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].zones[0].start: 0 ; 0x0a4: 0x00000000
kfddde[0].zones[0].size: 4094 ; 0x0a8: 0x00000ffe
kfddde[0].zones[0].used: 47 ; 0x0ac: 0x0000002f
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: asmdisk2 ; 0x1f8: length=8
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: asmdisk3 ; 0x3b8: length=8
$
輸出資訊中的kfbh.type為kfbtyp_diskdir代表了這是一個磁盤目錄。asm中的磁盤的資訊存儲在上面輸出内容的kfddde的區域,kfddde[0] 是關于磁盤0,kfddde[1]是關于磁盤1,以此類推。以這種方式我們可以知道磁盤組中所有磁盤的資訊,就像你看到的,大部分的資訊都可以通過視圖v$asm_disk去擷取,而不需要通過kfed這種工具去檢視。
asm磁盤目錄維護了關于asm磁盤組中的所有的磁盤的資訊,這些資訊基本上可以通過視圖v$asm_disk去擷取,也可以通過kfed工具去通路到這些資訊。
<b>本文來自雲栖社群合作夥伴“dbgeek”</b>