天天看點

Oracle ASM 翻譯系列第二十四彈:ASM Internal ASM files number 10 and 11ASM files number 10 and 11

本篇介紹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>