本篇介紹asm元資訊的十号檔案和十一号檔案,asm元資訊10号檔案是asm使用者目錄,11号檔案是組目錄。它們是用來為asm檔案通路控制特性提供支援的元資訊結構。
asm檔案通路控制機制用來限制特定的asm用戶端(通常就是資料庫執行個體)對檔案的通路,它是基于作業系統層database home的effective user辨別号實作的。
這些資訊可以通過v$asm_user、v$asm_usergroup、$asm_usergroup_member視圖查詢到。
如果要使用asm檔案通路控制特性,我們需要适當的設定作業系統使用者群組。通過alter diskgroup add usergroup指令将使用者群組添加至asm磁盤組中。這一步就略過了,我們把關注點集中在asm 使用者群組目錄上。
下面是作業系統中我們建立的使用者。
$ id grid
uid=1100(grid) gid=1000(oinstall) groups=1000(oinstall),1020(asmadmin),1021(asmdba),1031(dba)
$ id oracle
uid=1101(oracle) gid=1000(oinstall) groups=1000(oinstall),1021(asmdba),1031(dba)
$ id oracle1
uid=1102(oracle1) gid=1033(dba1) groups=1033(dba1)
$ id oracle2
uid=1103(oracle2) gid=1034(dba2) groups=1034(dba2)
接下來就是我在磁盤組中設定的使用者群組。
sql> select u.group_number "disk group#",
u.os_id "os id",
u.os_name "os user",
u.user_number "asm user#",
g.usergroup_number "asm group#",
g.name "asm user group"
from v$asm_user u, v$asm_usergroup g, v$asm_usergroup_member m
where u.group_number=g.group_number and u.group_number=m.group_number
and u.user_number=m.member_number
and g.usergroup_number=m.usergroup_number
order by 1, 2;
disk group# os id os user asm user# asm group# asm user group
----------- ----- ------- --------- ---------- --------------
1 1100 grid 1 3 gridteam
1101 oracle 2 1 dbateam1
1102 oracle1 3 2 dbateam2
1103 oracle2 4 2 dbateam2
2 1101 oracle 2 1 dbateam1
在1号磁盤組中擷取asm 使用者群組目錄所在的au。
sql> select x.number_kffxp "file#",
x.disk_kffxp "disk#",
x.xnum_kffxp "extent",
x.au_kffxp "au",
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 d.group_number=1
and x.number_kffxp in (10, 11)
file# disk# extent au disk name
---------- ---------- ---------- ---------- ------------------------------
10 0 0 2139 asmdisk5
1 0 2139 asmdisk6
11 0 0 2140 asmdisk5
1 0 2140 asmdisk6
對于每個使用者,使用者目錄元資訊中都有一個block相對應,而block号是跟使用者号(對應v$asm_user的user_number列)相對應的。如果我們有四個使用者,使用者号碼分别對應1-4,那麼他們也分别位于1-4号block中。接下來加以驗證。
$ kfed read /dev/oracleasm/disks/asmdisk5 aun=2139 blkn=1 | more
kfbh.endian: 1 ; 0x000: 0x01
kfbh.hard: 130 ; 0x001: 0x82
kfbh.type: 24 ; 0x002: kfbtyp_userdir
...
kfzude.user: 1100 ; 0x038: length=4
是以,1号block對應1100号作業系統使用者。這與上文v$asm_user查詢結果是比對的。接下來看其他block。
$ let b=1
$ while (( $b <= 4 ))
do
kfed read /dev/oracleasm/disks/asmdisk5 aun=2139 blkn=$b | grep kfzude.user
let b=b+1
done
kfzude.user: 1101 ; 0x038: length=4
kfzude.user: 1102 ; 0x038: length=4
kfzude.user: 1103 ; 0x038: length=4
正如所想的,以上顯示了asm使用者目錄中的四個作業系統使用者對應的id。
組目錄也是一個條目對應一個block,block号也是跟asm組号碼比對的。繼續驗證。
$ while (( $b <= 3 ))
kfed read /dev/oracleasm/disks/asmdisk5 aun=2140 blkn=$b | grep kfzgde.name
done
kfzgde.name: dbateam1 ; 0x03c: length=8
kfzgde.name: dbateam2 ; 0x03c: length=8
kfzgde.name: gridteam ; 0x03c: length=8
以上顯示了該磁盤組中對應的組名稱。
asm使用者目錄群組目錄是用來為asm檔案通路控制特性提供支援的元資訊結構,該特性在11.2版本中引入。這些資訊可以通過v$asm_user、v$asm_usergroup、$asm_usergroup_member視圖查詢到。
<b>本文來自雲栖社群合作夥伴“dbgeek”</b>