Oracle ASM Template Directory

eric0435發表於2016-12-29

Template Directory包含關於磁碟組所有檔案模板的資訊。有兩種型別的模板:一種是系統自帶的,一種是使用者建立的,預設的模板(系統自帶的)已經包含ASM的所有檔案型別,建立磁碟組時對於每種支援的檔案型別將使用預設的系統模板進行填充。使用者建立的模板只會在使用者特別指定時會使用。如果使用者建立自己的模板將會增加新的條目,模板目錄透過模板號進行索引。

每種模板條目包含以下內容:
.每個模板的名稱(對於預設模板它的名稱其實就是檔案型別)
.檔案冗餘度(預設是磁碟組的冗餘度)
.檔案條帶(預設是根據檔案型別來決定檔案的條帶)
.系統標識(是否為系統自帶的模板)

Template Directory在每個磁碟組中的檔案號為5(F5)。預設模板的模板名與檔案型別相關。檔案冗餘預設為磁碟組冗餘。檔案條帶預設是檔案型別特定。系統標識(system flag)被設定為系統模板。使用者建立的模板不會設定系統標識(system flag)。

透過查詢檢視V$ASM_TEMPLATE可檢視完整的模板資訊
10G:

sql> col system for a20
sql> col primary_region for a20
sql> col mirror_region for a20
sql> select * from v$asm_template where group_number=1; 

GROUP_NUMBER ENTRY_NUMBER REDUNDANCY   STRIPE       SYSTEM               NAME
------------ ------------ ------------ ------------ -------------------- ------------------------------
           1            0 MIRROR       COARSE       Y                    PARAMETERFILE
           1            1 MIRROR       COARSE       Y                    DUMPSET
           1            2 HIGH         FINE         Y                    CONTROLFILE
           1            3 MIRROR       COARSE       Y                    ARCHIVELOG
           1            4 MIRROR       FINE         Y                    ONLINELOG
           1            5 MIRROR       COARSE       Y                    DATAFILE
           1            6 MIRROR       COARSE       Y                    TEMPFILE
           1            7 MIRROR       COARSE       Y                    BACKUPSET
           1            8 MIRROR       COARSE       Y                    AUTOBACKUP
           1            9 MIRROR       COARSE       Y                    XTRANSPORT
           1           10 MIRROR       COARSE       Y                    CHANGETRACKING
           1           11 MIRROR       FINE         Y                    FLASHBACK
           1           12 MIRROR       COARSE       Y                    DATAGUARDCONFIG

13 rows selected.

11G:

sql> col system for a20
sql> col primary_region for a20
sql> col mirror_region for a20
sql> select * from v$asm_template where group_number=3;

GROUP_NUMBER ENTRY_NUMBER REDUNDANCY   STRIPE       SYSTEM               NAME                           PRIMARY_REGION       MIRROR_REGION
------------ ------------ ------------ ------------ -------------------- ------------------------------ -------------------- --------------------
           3           60 MIRROR       COARSE       Y                    PARAMETERFILE                  COLD                 COLD
           3           61 MIRROR       COARSE       Y                    ASMPARAMETERFILE               COLD                 COLD
           3           63 MIRROR       COARSE       Y                    DUMPSET                        COLD                 COLD
           3           64 HIGH         FINE         Y                    CONTROLFILE                    COLD                 COLD
           3           65 MIRROR       COARSE       Y                    FLASHFILE                      COLD                 COLD
           3           66 MIRROR       COARSE       Y                    ARCHIVELOG                     COLD                 COLD
           3           67 MIRROR       COARSE       Y                    ONLINELOG                      COLD                 COLD
           3           68 MIRROR       COARSE       Y                    DATAFILE                       COLD                 COLD
           3           69 MIRROR       COARSE       Y                    TEMPFILE                       COLD                 COLD
           3          170 MIRROR       COARSE       Y                    BACKUPSET                      COLD                 COLD
           3          171 MIRROR       COARSE       Y                    XTRANSPORT BACKUPSET           COLD                 COLD
           3          172 MIRROR       COARSE       Y                    AUTOBACKUP                     COLD                 COLD
           3          173 MIRROR       COARSE       Y                    XTRANSPORT                     COLD                 COLD
           3          174 MIRROR       COARSE       Y                    CHANGETRACKING                 COLD                 COLD
           3          175 MIRROR       COARSE       Y                    FLASHBACK                      COLD                 COLD
           3          176 MIRROR       COARSE       Y                    DATAGUARDCONFIG                COLD                 COLD
           3          177 MIRROR       COARSE       Y                    OCRFILE                        COLD                 COLD
17 rows selected.

redundancy欄位所顯示的mirror為存在映象副本,high為存在三份映象副本,unprot為不支援映象。其中name為controlfile的控制檔案redundancy為high,stripe為fine,即為控制檔案存在三份映象,並使用細粒度條帶。這是預設的資料庫控制檔案的模板,這是為什麼每一個控制檔案都會被做三重映象的原因。有意思的是,我們可以使用它建立任何的資料庫檔案。例如下面將使用控制檔案模板來建立一個表空間的資料檔案。

連線資料庫的例項

SQL> create tablespace cs datafile '+DATADG(CONTROLFILE)' size 10m;

Tablespace created.



SQL> select name from v$datafile where name like '%cs%';

NAME
--------------------------------------------------------------------------------
+DATADG/jyrac/datafile/cs.271.931879611

上面建立了一個表空間,ASM給我新建立的資料檔案分配了編號271。

檢視該資料檔案的冗餘度
連線ASM例項

SQL> select group_number, name, type "redundancy" from v$asm_diskgroup where name='DATADG';

GROUP_NUMBER NAME                           redundancy
------------ ------------------------------ ------------------------------
           3 DATADG                         NORMAL

這是一個normal冗餘的磁碟組,但是由於使用了控制檔案模板來建立資料檔案,因此透過查詢內部檢視 x$kffxp來獲得想要的資訊

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=271
  7  order by 1,2,3;

virtual extent physical extent         au     disk # disk name
-------------- --------------- ---------- ---------- ------------------------------------------------------------
             0               0       1654          0 DATADG_0001
             0               1       1647          2 DATADG_0002
             0               2       1647          1 DATADG_0003
             1               3       1648          2 DATADG_0002
             1               4       1648          1 DATADG_0003
             1               5       1655          3 DATADG_0000
             2               6       1649          1 DATADG_0003
             2               7       1655          0 DATADG_0001
             2               8       1656          3 DATADG_0000
             3               9       1657          3 DATADG_0000
             3              10       1650          1 DATADG_0003
             3              11       1656          0 DATADG_0001
             4              12       1657          0 DATADG_0001
             4              13       1658          3 DATADG_0000
             4              14       1649          2 DATADG_0002
             5              15       1650          2 DATADG_0002
             5              16       1658          0 DATADG_0001
             5              17       1651          1 DATADG_0003
             6              18       1652          1 DATADG_0003
             6              19       1651          2 DATADG_0002
             6              20       1659          0 DATADG_0001
             7              21       1659          3 DATADG_0000
             7              22       1652          2 DATADG_0002
             7              23       1653          1 DATADG_0003

24 rows selected.

這個檔案被做了三重映象,因為每一個虛擬區都由三個物理區組成,但是為什麼我的資料檔案僅僅只有1MB,但是卻有8個虛擬區呢,這是因為控制檔案的模板是一個細粒度條帶的模板。隱含引數_asm_stripesize代表了細粒度條帶的大小,預設為128K,隱含引數_asm_stripewidth代表了條帶的寬度,預設為8。但是有一點很奇怪,細粒度條帶下,資料檔案頭好像沒有獨佔一個extent,因為上面查詢顯示了這個1MB的檔案一共佔用了8個extent,而不是9個extent,按照條頻寬度是8的設定,檔案內容本身就應該佔用了8個extent。
10g:

SQL> col name for a30
SQL> col value for a50
SQL> col describ for a50
SQL> select x.ksppinm NAME,y.ksppstvl value,x.ksppdesc describ
  2  from x$ksppi x, x$ksppcv y
  3  where x.inst_id=USERENV('Instance')
  4  and y.inst_id=USERENV('Instance')
  5  and x.indx=y.indx
  6  and x.ksppinm like '%asm_strip%';   

NAME                           VALUE                                              DESCRIB
------------------------------ -------------------------------------------------- --------------------------------------------------
_asm_stripewidth               8                                                  ASM file stripe width
_asm_stripesize                131072                                             ASM file stripe size

11g:

SQL> col value for a50
SQL> col describ for a50
SQL> select x.ksppinm NAME,y.ksppstvl value,x.ksppdesc describ
  2  from x$ksppi x, x$ksppcv y
  3  where x.inst_id=USERENV('Instance')
  4  and y.inst_id=USERENV('Instance')
  5  and x.indx=y.indx
  6  and x.ksppinm like '%asm_strip%';   

NAME                           VALUE                                              DESCRIB
------------------------------ -------------------------------------------------- --------------------------------------------------
_asm_stripewidth               8                                                  ASM file stripe width
_asm_stripesize                131072                                             ASM file stripe size

而stripsize * stripwidth 恰好是1m,這也正是我們的AU size大小,而1m通常也是大多數作業系統所能達到的單次最大io量。asm 的條帶分為兩種COARSE和FINE,也被稱為粗粒度條帶和細粒度條帶。粗粒度條帶,預設就等於你的AU size,比如我這裡au size為1m,那麼粗粒度條帶大小就是1m,這種情況下的條帶,通常實用於連續性的大IO操作,例如全表掃描。細粒度條帶,預設是128k,8個條帶組成一個AU,這種條帶型別通常適用於對於讀寫延遲比較敏感的檔案,比如redo logfile,controlfile。從前面10g的查詢結果可以看出,其中也就redo和controlfile以及flashback是fine型別的,其他的均為粗條帶,而在11g中變為只有controlfile為fine型別。

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

連線ASM例項

SQL> alter diskgroup datadg add template cs_stripe_coarse attributes (HIGH COARSE);  

Diskgroup altered.

SQL> select * from v$asm_template where group_number=3;

GROUP_NUMBER ENTRY_NUMBER REDUNDANCY   STRIPE       SYSTEM               NAME                           PRIMARY_REGION       MIRROR_REGION
------------ ------------ ------------ ------------ -------------------- ------------------------------ -------------------- --------------------
           3           60 MIRROR       COARSE       Y                    PARAMETERFILE                  COLD                 COLD
           3           61 MIRROR       COARSE       Y                    ASMPARAMETERFILE               COLD                 COLD
           3           63 MIRROR       COARSE       Y                    DUMPSET                        COLD                 COLD
           3           64 HIGH         FINE         Y                    CONTROLFILE                    COLD                 COLD
           3           65 MIRROR       COARSE       Y                    FLASHFILE                      COLD                 COLD
           3           66 MIRROR       COARSE       Y                    ARCHIVELOG                     COLD                 COLD
           3           67 MIRROR       COARSE       Y                    ONLINELOG                      COLD                 COLD
           3           68 MIRROR       COARSE       Y                    DATAFILE                       COLD                 COLD
           3           69 MIRROR       COARSE       Y                    TEMPFILE                       COLD                 COLD
           3          170 MIRROR       COARSE       Y                    BACKUPSET                      COLD                 COLD
           3          171 MIRROR       COARSE       Y                    XTRANSPORT BACKUPSET           COLD                 COLD
           3          172 MIRROR       COARSE       Y                    AUTOBACKUP                     COLD                 COLD
           3          173 MIRROR       COARSE       Y                    XTRANSPORT                     COLD                 COLD
           3          174 MIRROR       COARSE       Y                    CHANGETRACKING                 COLD                 COLD
           3          175 MIRROR       COARSE       Y                    FLASHBACK                      COLD                 COLD
           3          176 MIRROR       COARSE       Y                    DATAGUARDCONFIG                COLD                 COLD
           3          177 MIRROR       COARSE       Y                    OCRFILE                        COLD                 COLD
           3          280 HIGH         COARSE       N                    CS_STRIPE_COARSE               COLD                 COLD

18 rows selected.

從上面name=CS_STRIPE_COARSE,stripe=COARSE可以看到建立的模板為粗粒度條帶,連線資料庫例項

SQL> create tablespace cs_stripe_coarse datafile '+DATADG(CS_STRIPE_COARSE)' size 1m;

Tablespace created.

SQL> select name from v$datafile where name like 'cs_stripe_coarse%';

no rows selected

SQL> select name from v$datafile where name like '%cs_stripe_coarse%';

NAME
--------------------------------------------------------------------------------
+DATADG/jyrac/datafile/cs_stripe_coarse.272.931882089

建立的資料檔案的檔案號為272,連線ASM例項

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=272
  7  order by 1,2,3;

virtual extent physical extent         au     disk # disk name
-------------- --------------- ---------- ---------- ------------------------------------------------------------
             0               0       1664          0 DATADG_0001
             0               1       1664          3 DATADG_0000
             0               2       1659          1 DATADG_0003
             1               3       1660          2 DATADG_0002
             1               4       1665          0 DATADG_0001
             1               5       1665          3 DATADG_0000

6 rows selected.

上面的結果顯示了只為1MB的檔案分配了2個虛擬區, 一個是ASM的檔案頭,一個用於檔案。注意這個檔案是三重的映象和粗粒度的條帶。也可以建立一個根本不做映象的模板,例如:

連線ASM例項

SQL> alter diskgroup datadg add template no_mirroring attributes (UNPROTECTED); 

Diskgroup altered.

SQL> select * from v$asm_template where group_number=3;

GROUP_NUMBER ENTRY_NUMBER REDUNDANCY   STRIPE       SYSTEM               NAME                           PRIMARY_REGION       MIRROR_REGION
------------ ------------ ------------ ------------ -------------------- ------------------------------ -------------------- --------------------
           3           60 MIRROR       COARSE       Y                    PARAMETERFILE                  COLD                 COLD
           3           61 MIRROR       COARSE       Y                    ASMPARAMETERFILE               COLD                 COLD
           3           63 MIRROR       COARSE       Y                    DUMPSET                        COLD                 COLD
           3           64 HIGH         FINE         Y                    CONTROLFILE                    COLD                 COLD
           3           65 MIRROR       COARSE       Y                    FLASHFILE                      COLD                 COLD
           3           66 MIRROR       COARSE       Y                    ARCHIVELOG                     COLD                 COLD
           3           67 MIRROR       COARSE       Y                    ONLINELOG                      COLD                 COLD
           3           68 MIRROR       COARSE       Y                    DATAFILE                       COLD                 COLD
           3           69 MIRROR       COARSE       Y                    TEMPFILE                       COLD                 COLD
           3          170 MIRROR       COARSE       Y                    BACKUPSET                      COLD                 COLD
           3          171 MIRROR       COARSE       Y                    XTRANSPORT BACKUPSET           COLD                 COLD
           3          172 MIRROR       COARSE       Y                    AUTOBACKUP                     COLD                 COLD
           3          173 MIRROR       COARSE       Y                    XTRANSPORT                     COLD                 COLD
           3          174 MIRROR       COARSE       Y                    CHANGETRACKING                 COLD                 COLD
           3          175 MIRROR       COARSE       Y                    FLASHBACK                      COLD                 COLD
           3          176 MIRROR       COARSE       Y                    DATAGUARDCONFIG                COLD                 COLD
           3          177 MIRROR       COARSE       Y                    OCRFILE                        COLD                 COLD
           3          280 HIGH         COARSE       N                    CS_STRIPE_COARSE               COLD                 COLD
           3          281 UNPROT       COARSE       N                    NO_MIRRORING                   COLD                 COLD

19 rows selected.

從上面name=CS_STRIPE_COARSE,redundancy=unprot可以看到建立的模板不支援映象,連線資料庫例項

SQL> create tablespace not_important datafile '+DATADG(NO_MIRRORING)' size 1m; 

Tablespace created.

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

NAME
--------------------------------------------------------------------------------
+DATADG/jyrac/datafile/not_important.273.931882831

建立的資料檔案的檔案號為273,連線ASM例項

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=273
  7  order by 1,2,3;

virtual extent physical extent         au     disk # disk name
-------------- --------------- ---------- ---------- ------------------------------------------------------------
             0               0       1661          2 DATADG_0002
             1               1       1660          1 DATADG_0003

上面的結果顯示一個虛擬extent只有一個物理extent,所以這個檔案沒有被映象(雖然它是在一個normal冗餘的磁碟組中)。

小結:
模板目錄包含了磁碟組中檔案模板的資訊,每一個磁碟組都會有預設的一系列的系統自帶的模板,使用者也可以額外根據需要建立自己的模板。一個比較好的使用模板的方法是在一個normal冗餘的磁碟中建立一個三重映象的模板,注意如果想要使這個做法生效,我們至少需要這個磁碟組中有3個故障磁碟組(failgroup)。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26015009/viewspace-2131614/,如需轉載,請註明出處,否則將追究法律責任。

相關文章