天天看點

Oracle ASM 翻譯系列第十八彈:ASM Internal ASM file number 5ASM file number 5

本章講述asm的5号檔案,5号檔案是asm的模闆目錄,包含了磁盤組中所有的檔案模闆的資訊。

有兩種類型的模闆:一種是系統自帶的,一種是使用者建立的,預設的模闆(系統自帶的)已經包含asm的所有檔案類型,建立檔案時會根據檔案類型自動比對,使用者建立的模闆隻會在使用者特别指定時會使用。

每一個模闆包含了如下的一些資訊:

· 每個模闆的名稱(對于預設模闆它的名稱其實就是檔案類型)

· 檔案備援度(預設是磁盤組的備援度)

· 檔案條帶(預設是根據檔案類型來決定檔案的條帶)

· 系統辨別(是否為系統自帶的模闆)

可以通過視圖v$asm_template來檢視完整的模闆資訊,這裡檢視下我系統上的模闆:

sql> select name "template name", redundancy "redundancy", stripe "striping", system "system"

from v$asm_template

where group_number=1;

template name            redundancy       striping         system

------------------------ ---------------- ---------------- --------

parameterfile            mirror           coarse           y

asmparameterfile         mirror           coarse           y

dumpset                  mirror           coarse           y

controlfile              high             fine             y

flashfile                mirror           coarse           y

archivelog               mirror           coarse           y

onlinelog                mirror           coarse           y

datafile                 mirror           coarse           y

tempfile                 mirror           coarse           y

backupset                mirror           coarse           y

autobackup               mirror           coarse           y

xtransport               mirror           coarse           y

changetracking           mirror           coarse           y

flashback                mirror           coarse           y

dataguardconfig          mirror           coarse           y

ocrfile                  mirror           coarse           y

16 rows selected.

有一個模闆非常的顯眼,那就是控制檔案(3重鏡像,細粒度條帶),這是預設的資料庫控制檔案的模闆,這是為什麼每一個控制檔案都會被做三重鏡像的原因。有趣的是,我們可以使用它建立任何的資料庫檔案。

這裡舉一個例子(注意我連接配接的是資料庫的執行個體):

sql> create tablespace triple_f datafile '+data(controlfile)' size 1m;

tablespace created.

sql> select name from v$datafile where name like '%triple_f%';

name

--------------------------------------------------------------------------------

+data/br/datafile/triple_f.271.771793293

上面建立了一個表空間,asm給我新建立的資料檔案配置設定了編号217,我們接着看下這個檔案的備援度,這一次我連接配接的是asm的執行個體:

sql> select group_number, name, type "redundancy"

from v$asm_diskgroup

where name='data';

group_number name                             redundancy

------------ -------------------------------- ----------------

           1 data                             normal

這是一個normal備援的磁盤組,但是由于我們使用了控制檔案模闆來建立資料檔案,是以我們通過查詢内部視圖 x$kffxp來獲得我們想要的資訊:

sql> select xnum_kffxp "extent", au_kffxp "au", disk_kffxp "disk"

from x$kffxp

where group_kffxp=1 and number_kffxp=271

order by 1,2;

    extent         au       disk

---------- ---------- ----------

         0       1126          1

         0       1130          3

         0       1136          2

         1       1131          3

         1       1132          0

         1       1137          2

...

         7       1132          1

         7       1135          3

         7       1141          2

24 rows selected.

如預期,這個檔案被做了三重鏡像,因為我們看到每一個虛拟區都由三個實體區組成,但是為什麼我的資料檔案僅僅隻有1mb,但是卻有8個虛拟區呢,這是因為控制檔案的模闆是一個精細條帶的模闆。

譯者注:隐含參數_asm_stripesize代表了精細條帶的大小,預設為128k,隐含參數_asm_stripewidth代表了條帶的寬度,預設為8。但是有一點很奇怪,精細條帶下,資料檔案頭好像沒有獨占一個extent,因為上面查詢顯示了這個1mb的檔案一共占用了8個extent,而不是9個extent,按照條帶寬度是8的設定,檔案内容本身就應該占用了8個extent。

如果我想要檔案具有三重鏡像但是粗粒度的條帶,該怎麼做?我們可以手工建立一個我們自己的模闆,coarse關鍵字指定了這是一個粗粒度的條帶:

sql> alter diskgroup data add template triple_coarse attributes (high coarse);

diskgroup altered.

let's now use this template. back to the database instance...

sql> create tablespace triple_c datafile '+data(triple_coarse)' size 1m;

sql> select name from v$datafile where name like '%triple_c%';

+data/br/datafile/triple_c.272.771794469

asm的檔案号是272,傳回到asm執行個體檢查:

where group_kffxp=1 and number_kffxp=272

         0       1136          3

         0       1137          0

         0       1142          2

         1       1133          1

         1       1137          3

         1       1143          2

6 rows selected.

這次的結果顯示了隻為1mb的檔案配置設定了1個虛拟區,額外的一個是asm的檔案頭。注意這個檔案是三重的鏡像和粗粒度的條帶。

我也可以建立一個根本不做鏡像的模闆,我們試試看:

sql> alter diskgroup data add template no_mirroring attributes (unprotected);

接下來我們使用我們上面建立的模闆來添加一個資料檔案:

sql> create tablespace not_important datafile '+data(no_mirroring)' size 1m;

sql> select name from v$datafile where name like '%not_important%';

+data/br/datafile/not_important.273.771795255

上面新産生的資料檔案的編号是273,我們來檢查一下:

where group_kffxp=1 and number_kffxp=273

         0       1138          0

         1       1134          1

我們看到這個檔案沒有被鏡像(雖然它是在一個normal備援的磁盤組中)。

模闆目錄包含了磁盤組中檔案模闆的資訊,每一個磁盤組都會有預設的一系列的系統自帶的模闆,使用者也可以額外根據需要建立自己的模闆。一個比較好的使用模闆的方法是在一個normal備援的磁盤中建立一個三重鏡像的模闆,注意如果想要使這個做法生效,我們至少需要這個磁盤組中有3個failgroup。

<b>本文來自雲栖社群合作夥伴“dbgeek”</b>