sitemap

RSS地图

收藏本站

设为首页

Oracle研究中心

当前位置:Oracle研究中心 > 产品DBA > Oracle ASM >

【学习笔记】Oracle asm剖析系列(6)–template directory

时间:2016-12-17 11:48   来源:Oracle研究中心   作者:网络   点击:

天萃荷净 Oracle研究中心学习笔记:分享一篇关于Oracle ASM的使用笔记,详细介绍template directory在ASM中的使用办法案例。

本站文章除注明转载外,均为本站原创: 转载自love wife & love life —Roger 的Oracle技术博客
本文链接地址: oracle asm剖析系列(6)–template directory

前面关于oracle asm 剖析系列已经进行了5篇,这将是第6篇。这篇的主要是内容是关于asm file 5,也就是asm template,即asm 模板。asm中默认就存在众多模板,每种模板针对不同类似的文件。如下来自oracle 10gR2和11gR2版本的查询结果:

---10.2
SQL> SELECT * FROM V$ASM_TEMPLATE;

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

13 ROWS selected.

你看到冗余的一列,显示的是unprot,即是不支持。
---11.2
SQL> SELECT * FROM V$ASM_TEMPLATE ORDER BY 2;

GROUP_NUMBER ENTRY_NUMBER REDUND STRIPE S NAME                           PRIM MIRR
------------ ------------ ------ ------ - ------------------------------ ---- ----
           2            0 UNPROT COARSE Y PARAMETERFILE                  COLD COLD
           2            1 UNPROT COARSE Y ASMPARAMETERFILE               COLD COLD
           2            3 UNPROT COARSE Y DUMPSET                        COLD COLD
           2            4 UNPROT FINE   Y CONTROLFILE                    COLD COLD
           2            5 UNPROT COARSE Y FLASHFILE                      COLD COLD
           2            6 UNPROT COARSE Y ARCHIVELOG                     COLD COLD
           2            7 UNPROT COARSE Y ONLINELOG                      COLD COLD
           2            8 UNPROT COARSE Y DATAFILE                       COLD COLD
           2            9 UNPROT COARSE Y TEMPFILE                       COLD COLD
           2           10 UNPROT COARSE Y BACKUPSET                      COLD COLD
           2           11 UNPROT COARSE Y AUTOBACKUP                     COLD COLD
           2           12 UNPROT COARSE Y XTRANSPORT                     COLD COLD
           2           13 UNPROT COARSE Y CHANGETRACKING                 COLD COLD
           2           14 UNPROT COARSE Y FLASHBACK                      COLD COLD
           2           15 UNPROT COARSE Y DATAGUARDCONFIG                COLD COLD
           2           16 UNPROT COARSE Y OCRFILE                        COLD COLD
           1           60 UNPROT COARSE Y PARAMETERFILE                  COLD COLD
           1           61 UNPROT COARSE Y ASMPARAMETERFILE               COLD COLD
           1           63 UNPROT COARSE Y DUMPSET                        COLD COLD
           1           64 UNPROT FINE   Y CONTROLFILE                    COLD COLD
           1           65 UNPROT COARSE Y FLASHFILE                      COLD COLD
           1           66 UNPROT COARSE Y ARCHIVELOG                     COLD COLD
           1           67 UNPROT COARSE Y ONLINELOG                      COLD COLD
           1           68 UNPROT COARSE Y DATAFILE                       COLD COLD
           1           69 UNPROT COARSE Y TEMPFILE                       COLD COLD
           1          170 UNPROT COARSE Y BACKUPSET                      COLD COLD
           1          171 UNPROT COARSE Y AUTOBACKUP                     COLD COLD
           1          172 UNPROT COARSE Y XTRANSPORT                     COLD COLD
           1          173 UNPROT COARSE Y CHANGETRACKING                 COLD COLD
           1          174 UNPROT COARSE Y FLASHBACK                      COLD COLD
           1          175 UNPROT COARSE Y DATAGUARDCONFIG                COLD COLD
           1          176 UNPROT COARSE Y OCRFILE                        COLD COLD

32 ROWS selected.
首先我们来看看关于template的相关操作,例如创建一个新的template 模板:

SQL> ALTER diskgroup data1 DROP disk DATA1_0003;
Diskgroup altered.

SQL> ALTER diskgroup data1 DROP disk DATA1_0002;
Diskgroup altered.

SQL> CREATE diskgroup data2 normal REDUNDANCY disk '/dev/sdb','/dev/sde'
Diskgroup created.

SQL> SELECT
  2      NVL(a.name, '[CANDIDATE]')                       disk_group_name
  3    , b.path                                           disk_file_path
  4    , b.name                                           disk_file_name
  5    , b.failgroup                                      disk_file_fail_group
  6    , b.total_mb                                       total_mb
  7    , (b.total_mb - b.free_mb)                         used_mb
  8    , ROUND((1- (b.free_mb / b.total_mb))*100, 2)      pct_used
  9  FROM
10      v$asm_diskgroup a RIGHT OUTER JOIN v$asm_disk b USING (group_number)
11  ORDER BY
12      a.name
13  /

Disk GROUP Name      Path              File Name            Fail GROUP           File SIZE (MB) Used SIZE (MB) Pct. Used
-------------------- ----------------- -------------------- -------------------- -------------- -------------- ---------
DATA1                /dev/sdd          DATA1_0000           DATA1_0000                    1,024            519     50.68
                     /dev/sdc          DATA1_0001           DATA1_0001                    1,024            519     50.68
********************                                                             -------------- --------------
                                                                                          2,048          1,038

DATA2                /dev/sdb          DATA2_0000           DATA2_0000                    1,024             51      4.98
                     /dev/sde          DATA2_0001           DATA2_0001                    1,024             51      4.98
********************                                                             -------------- --------------
                                                                                          2,048            102

                                                                                 -------------- --------------
Grand Total:                                                                              4,096          1,140

SQL> SELECT
  2      name                                     group_name
  3    , sector_size                              sector_size
  4    , block_size                               block_size
  5    , allocation_unit_size                     allocation_unit_size
  6    , state                                    state
  7    , TYPE                                     TYPE
  8    , total_mb                                 total_mb
  9    , (total_mb - free_mb)                     used_mb
10    , ROUND((1- (free_mb / total_mb))*100, 2)  pct_used
11  FROM
12      v$asm_diskgroup
13  ORDER BY
14      name
15  /

Disk GROUP            Sector   Block   Allocation
Name                    SIZE    SIZE    Unit SIZE State       TYPE   File SIZE (MB) Used SIZE (MB) Pct. Used
-------------------- ------- ------- ------------ ----------- ------ -------------- -------------- ---------
DATA1                    512   4,096    1,048,576 MOUNTED     EXTERN          2,048          1,038     50.68
DATA2                    512   4,096    1,048,576 MOUNTED     NORMAL          2,048            102      4.98
                                                                     -------------- --------------
Grand Total:
                                                                  4,096          1,140

+++++++++++++创建一个test表空间到data2 diskgroup上:
---asm instance
SQL> SHOW parameter TYPE

NAME                                 TYPE   VALUE
------------------------------------ ------ ------------------------------
instance_type                        string asm
plsql_code_type                      string INTERPRETED
SQL> ALTER diskgroup data2 ADD template test_template attributes (coarse);

Diskgroup altered.

SQL>
SQL> SELECT * FROM v$asm_template;

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

27 ROWS selected.

----database instance
SQL> SHOW parameter TYPE

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
instance_type                        string      RDBMS
plsql_code_type                      string      INTERPRETED

SQL> CREATE tablespace test datafile '+data2(test_template)' SIZE 5m;
Tablespace created.

回到主题上来,我这里仍然以10gR2 版本为例,通过如下查询我们知道asm template directory信息在file 5中:

SQL> SELECT number_kffxp file#, disk_kffxp disk#, COUNT(disk_kffxp) extents
  2  FROM x$kffxp
  3  WHERE group_kffxp=1
  4        AND disk_kffxp <> 65534
  5  GROUP BY number_kffxp, disk_kffxp;

     FILE#      DISK#    EXTENTS
---------- ---------- ----------
         1          0          1
         1          1          1
         2          1          1
         3          0         21
         3          1         21
         4          0          1
         4          1          1
         5          0          1   ---这就是template directory
         6          0          1
       256          0        240
..........
既然我们知道template是file 5,那么其元数据也就在第file directory 的第5个block,如下:

[oracle@10gasm ~]$ kfed read /dev/sdb aun=2 blkn=5 |more
kfbh.endian:                          1 ; 0x000: 0x01
kfbh.hard:                          130 ; 0x001: 0x82
kfbh.type:                            4 ; 0x002: KFBTYP_FILEDIR
kfbh.datfmt:                          1 ; 0x003: 0x01
kfbh.block.blk:                       5 ; 0x004: T=0 NUMB=0x5
kfbh.block.obj:                       1 ; 0x008: TYPE=0x0 NUMB=0x1
kfbh.check:                  3972293368 ; 0x00c: 0xecc462f8
kfbh.fcn.base:                        0 ; 0x010: 0x00000000
kfbh.fcn.wrap:                        0 ; 0x014: 0x00000000
kfbh.spare1:                          0 ; 0x018: 0x00000000
kfbh.spare2:                          0 ; 0x01c: 0x00000000
kfffdb.node.incarn:                   1 ; 0x000: A=1 NUMM=0x0
kfffdb.node.frlist.number:   4294967295 ; 0x004: 0xffffffff
kfffdb.node.frlist.incarn:            0 ; 0x008: A=0 NUMM=0x0
kfffdb.hibytes:                       0 ; 0x00c: 0x00000000
kfffdb.lobytes:                 1048576 ; 0x010: 0x00100000
kfffdb.xtntcnt:                       3 ; 0x014: 0x00000003
kfffdb.xtnteof:                       3 ; 0x018: 0x00000003
kfffdb.blkSize:                    4096 ; 0x01c: 0x00001000
kfffdb.flags:                         1 ; 0x020: O=1 S=0 S=0 D=0 C=0 I=0 R=0 A=0
kfffdb.fileType:                     15 ; 0x021: 0x0f
kfffdb.dXrs:                         19 ; 0x022: SCHE=0x1 NUMB=0x3
kfffdb.iXrs:                         19 ; 0x023: SCHE=0x1 NUMB=0x3
kfffdb.dXsiz[0]:             4294967295 ; 0x024: 0xffffffff
kfffdb.dXsiz[1]:                      0 ; 0x028: 0x00000000
kfffdb.dXsiz[2]:                      0 ; 0x02c: 0x00000000
kfffdb.iXsiz[0]:             4294967295 ; 0x030: 0xffffffff
kfffdb.iXsiz[1]:                      0 ; 0x034: 0x00000000
kfffdb.iXsiz[2]:                      0 ; 0x038: 0x00000000
kfffdb.xtntblk:                       3 ; 0x03c: 0x0003
kfffdb.break:                        60 ; 0x03e: 0x003c
kfffdb.priZn:                         0 ; 0x040: 0x00
kfffdb.secZn:                         0 ; 0x041: 0x00
kfffdb.ub2spare:                      0 ; 0x042: 0x0000
kfffdb.alias[0]:             4294967295 ; 0x044: 0xffffffff
kfffdb.alias[1]:             4294967295 ; 0x048: 0xffffffff
kfffdb.strpwdth:                      0 ; 0x04c: 0x00
kfffdb.strpsz:                        0 ; 0x04d: 0x00
kfffdb.usmsz:                         0 ; 0x04e: 0x0000
kfffdb.crets.hi:               32982470 ; 0x050: HOUR=0x6 DAYS=0xe MNTH=0x1 YEAR=0x7dd
kfffdb.crets.lo:              330584064 ; 0x054: USEC=0x0 MSEC=0x114 SECS=0x3b MINS=0x4
kfffdb.modts.hi:               32982470 ; 0x058: HOUR=0x6 DAYS=0xe MNTH=0x1 YEAR=0x7dd
kfffdb.modts.lo:              330584064 ; 0x05c: USEC=0x0 MSEC=0x114 SECS=0x3b MINS=0x4
kfffdb.spare[0]:                      0 ; 0x060: 0x00000000
........
kfffdb.spare[14]:                     0 ; 0x098: 0x00000000
kfffdb.spare[15]:                     0 ; 0x09c: 0x00000000
kfffdb.usm:                             ; 0x0a0: length=0
kfffde[0].xptr.au:                   49 ; 0x4a0: 0x00000031
kfffde[0].xptr.disk:                  0 ; 0x4a4: 0x0000
kfffde[0].xptr.flags:                 0 ; 0x4a6: L=0 E=0 D=0 C=0 S=0
kfffde[0].xptr.chk:                  27 ; 0x4a7: 0x1b
kfffde[1].xptr.au:                   49 ; 0x4a8: 0x00000031
kfffde[1].xptr.disk:                  1 ; 0x4ac: 0x0001
kfffde[1].xptr.flags:                 0 ; 0x4ae: L=0 E=0 D=0 C=0 S=0
kfffde[1].xptr.chk:                  26 ; 0x4af: 0x1a
kfffde[2].xptr.au:           4294967294 ; 0x4b0: 0xfffffffe
........
继续读取AU 49,得到如下结果:

[oracle@10gasm ~]$ kfed read /dev/sdb aun=49 blkn=0 |more
kfbh.endian:                          1 ; 0x000: 0x01
kfbh.hard:                          130 ; 0x001: 0x82
kfbh.type:                           10 ; 0x002: KFBTYP_TMPLTDIR
kfbh.datfmt:                          1 ; 0x003: 0x01
kfbh.block.blk:                       0 ; 0x004: T=0 NUMB=0x0
kfbh.block.obj:                       5 ; 0x008: TYPE=0x0 NUMB=0x5
kfbh.check:                  1227264929 ; 0x00c: 0x492693a1
kfbh.fcn.base:                      580 ; 0x010: 0x00000244
kfbh.fcn.wrap:                        0 ; 0x014: 0x00000000
kfbh.spare1:                          0 ; 0x018: 0x00000000
kfbh.spare2:                          0 ; 0x01c: 0x00000000
kffdnd.bnode.incarn:                  1 ; 0x000: A=1 NUMM=0x0
kffdnd.bnode.frlist.number:  4294967295 ; 0x004: 0xffffffff
kffdnd.bnode.frlist.incarn:           0 ; 0x008: A=0 NUMM=0x0
kffdnd.overfl.number:        4294967295 ; 0x00c: 0xffffffff
kffdnd.overfl.incarn:                 0 ; 0x010: A=0 NUMM=0x0
kffdnd.parent.number:                 0 ; 0x014: 0x00000000
kffdnd.parent.incarn:                 1 ; 0x018: A=1 NUMM=0x0
kffdnd.fstblk.number:                 0 ; 0x01c: 0x00000000
kffdnd.fstblk.incarn:                 1 ; 0x020: A=1 NUMM=0x0
kftmde[0].entry.incarn:               1 ; 0x024: A=1 NUMM=0x0
kftmde[0].entry.hash:            616561 ; 0x028: 0x00096871
kftmde[0].entry.refer.number:4294967295 ; 0x02c: 0xffffffff
kftmde[0].entry.refer.incarn:         0 ; 0x030: A=0 NUMM=0x0
kftmde[0].templ.name:     PARAMETERFILE ; 0x034: length=13
kftmde[0].templ.flags:                4 ; 0x054: S=0 S=0 S=1
kftmde[0].templ.redun:               18 ; 0x058: SCHE=0x1 NUMB=0x2
kftmde[0].templ.strpwdth:             8 ; 0x059: 0x08
kftmde[0].templ.strpsz:              17 ; 0x05a: 0x11
kftmde[0].templ.priZn:                0 ; 0x05b: 0x00
kftmde[0].templ.secZn:                0 ; 0x05c: 0x00
kftmde[0].templ.ub1spare:             0 ; 0x05d: 0x00
kftmde[0].templ.ub2spare:             0 ; 0x05e: 0x0000
kftmde[0].templ.dXsiz[0]:    4294967295 ; 0x060: 0xffffffff
kftmde[0].templ.dXsiz[1]:             0 ; 0x064: 0x00000000
kftmde[0].templ.dXsiz[2]:             0 ; 0x068: 0x00000000
kftmde[0].templ.iXsiz[0]:    4294967295 ; 0x06c: 0xffffffff
kftmde[0].templ.iXsiz[1]:             0 ; 0x070: 0x00000000
kftmde[0].templ.iXsiz[2]:             0 ; 0x074: 0x00000000
kftmde[0].templ.entry:                0 ; 0x078: 0x00000000
kftmde[0].templ.idx:                  0 ; 0x07c: 0x00000000
kftmde[0].templ.spare[0]:             0 ; 0x080: 0x00000000
........
kftmde[0].templ.spare[10]:            0 ; 0x0a8: 0x00000000
kftmde[1].entry.incarn:               1 ; 0x0ac: A=1 NUMM=0x0
kftmde[1].entry.hash:              9498 ; 0x0b0: 0x0000251a
kftmde[1].entry.refer.number:4294967295 ; 0x0b4: 0xffffffff
kftmde[1].entry.refer.incarn:         0 ; 0x0b8: A=0 NUMM=0x0
kftmde[1].templ.name:           DUMPSET ; 0x0bc: length=7
kftmde[1].templ.flags:                4 ; 0x0dc: S=0 S=0 S=1
kftmde[1].templ.redun:               18 ; 0x0e0: SCHE=0x1 NUMB=0x2
kftmde[1].templ.strpwdth:             8 ; 0x0e1: 0x08
kftmde[1].templ.strpsz:              17 ; 0x0e2: 0x11
kftmde[1].templ.priZn:                0 ; 0x0e3: 0x00
kftmde[1].templ.secZn:                0 ; 0x0e4: 0x00
kftmde[1].templ.ub1spare:             0 ; 0x0e5: 0x00
kftmde[1].templ.ub2spare:             0 ; 0x0e6: 0x0000
kftmde[1].templ.dXsiz[0]:    4294967295 ; 0x0e8: 0xffffffff
kftmde[1].templ.dXsiz[1]:             0 ; 0x0ec: 0x00000000
kftmde[1].templ.dXsiz[2]:             0 ; 0x0f0: 0x00000000
kftmde[1].templ.iXsiz[0]:    4294967295 ; 0x0f4: 0xffffffff
kftmde[1].templ.iXsiz[1]:             0 ; 0x0f8: 0x00000000
kftmde[1].templ.iXsiz[2]:             0 ; 0x0fc: 0x00000000
kftmde[1].templ.entry:                0 ; 0x100: 0x00000000
kftmde[1].templ.idx:                  0 ; 0x104: 0x00000000
kftmde[1].templ.spare[0]:             0 ; 0x108: 0x00000000
........
kftmde[1].templ.spare[10]:            0 ; 0x130: 0x00000000
kftmde[2].entry.incarn:               1 ; 0x134: A=1 NUMM=0x0
kftmde[2].entry.hash:            149841 ; 0x138: 0x00024951
kftmde[2].entry.refer.number:4294967295 ; 0x13c: 0xffffffff
kftmde[2].entry.refer.incarn:         0 ; 0x140: A=0 NUMM=0x0
kftmde[2].templ.name:       CONTROLFILE ; 0x144: length=11
kftmde[2].templ.flags:                5 ; 0x164: S=1 S=0 S=1
kftmde[2].templ.redun:               19 ; 0x168: SCHE=0x1 NUMB=0x3
kftmde[2].templ.strpwdth:             8 ; 0x169: 0x08
kftmde[2].templ.strpsz:              17 ; 0x16a: 0x11
kftmde[2].templ.priZn:                0 ; 0x16b: 0x00
kftmde[2].templ.secZn:                0 ; Oracleо0x16c: 0x00
kftmde[2].templ.ub1spare:             0 ; 0x16d: 0x00
kftmde[2].templ.ub2spare:             0 ; 0x16e: 0x0000
kftmde[2].templ.dXsiz[0]:    4294967295 ; 0x170: 0xffffffff
kftmde[2].templ.dXsiz[1]:             0 ; 0x174: 0x00000000
kftmde[2].templ.dXsiz[2]:             0 ; 0x178: 0x00000000
kftmde[2].templ.iXsiz[0]:    4294967295 ; 0x17c: 0xffffffff
kftmde[2].templ.iXsiz[1]:             0 ; 0x180: 0x00000000
kftmde[2].templ.iXsiz[2]:             0 ; 0x184: 0x00000000
kftmde[2].templ.entry:                0 ; 0x188: 0x00000000
kftmde[2].templ.idx:                  0 ; 0x18c: 0x00000000
kftmde[2].templ.spare[0]:             0 ; 0x190: 0x00000000
...........
kftmde[2].templ.spare[10]:            0 ; 0x1b8: 0x00000000
kftmde[3].entry.incarn:               1 ; 0x1bc: A=1 NUMM=0x0
kftmde[3].entry.hash:             72253 ; 0x1c0: 0x00011a3d
kftmde[3].entry.refer.number:4294967295 ; 0x1c4: 0xffffffff
kftmde[3].entry.refer.incarn:         0 ; 0x1c8: A=0 NUMM=0x0
kftmde[3].templ.name:        ARCHIVELOG ; 0x1cc: length=10
kftmde[3].templ.flags:                4 ; 0x1ec: S=0 S=0 S=1
kftmde[3].templ.redun:               18 ; 0x1f0: SCHE=0x1 NUMB=0x2
kftmde[3].templ.strpwdth:             8 ; 0x1f1: 0x08
kftmde[3].templ.strpsz:              17 ; 0x1f2: 0x11
kftmde[3].templ.priZn:                0 ; 0x1f3: 0x00
kftmde[3].templ.secZn:                0 ; 0x1f4: 0x00
kftmde[3].templ.ub1spare:             0 ; 0x1f5: 0x00
kftmde[3].templ.ub2spare:             0 ; 0x1f6: 0x0000
kftmde[3].templ.dXsiz[0]:    4294967295 ; 0x1f8: 0xffffffff
kftmde[3].templ.dXsiz[1]:             0 ; 0x1fc: 0x00000000
kftmde[3].templ.dXsiz[2]:             0 ; 0x200: 0x00000000
kftmde[3].templ.iXsiz[0]:    4294967295 ; 0x204: 0xffffffff
kftmde[3].templ.iXsiz[1]:             0 ; 0x208: 0x00000000
kftmde[3].templ.iXsiz[2]:             0 ; 0x20c: 0x00000000
kftmde[3].templ.entry:                0 ; 0x210: 0x00000000
kftmde[3].templ.idx:                  0 ; 0x214: 0x00000000
kftmde[3].templ.spare[0]:             0 ; 0x218: 0x00000000
.........
kftmde[3].templ.spare[10]:            0 ; 0x240: 0x00000000
.........
.........
kftmde[13].entry.incarn:              1 ; 0x70c: A=1 NUMM=0x0
kftmde[13].entry.hash:           657713 ; 0x710: 0x000a0931
kftmde[13].entry.refer.number:4294967295 ; 0x714: 0xffffffff
kftmde[13].entry.refer.incarn:        0 ; 0x718: A=0 NUMM=0x0
kftmde[13].templ.name:    TEST_TEMPLATE ; 0x71c: length=13
kftmde[13].templ.flags:               0 ; 0x73c: S=0 S=0 S=0
kftmde[13].templ.redun:              18 ; 0x740: SCHE=0x1 NUMB=0x2
kftmde[13].templ.strpwdth:            8 ; 0x741: 0x08
kftmde[13].templ.strpsz:             17 ; 0x742: 0x11
kftmde[13].templ.priZn:               0 ; 0x743: 0x00
kftmde[13].templ.secZn:               0 ; 0x744: 0x00
kftmde[13].templ.ub1spare:            0 ; 0x745: 0x00
kftmde[13].templ.ub2spare:            0 ; 0x746: 0x0000
kftmde[13].templ.dXsiz[0]:   4294967295 ; 0x748: 0xffffffff
kftmde[13].templ.dXsiz[1]:            0 ; 0x74c: 0x00000000
kftmde[13].templ.dXsiz[2]:            0 ; 0x750: 0x00000000
kftmde[13].templ.iXsiz[0]:   4294967295 ; 0x754: 0xffffffff
kftmde[13].templ.iXsiz[1]:            0 ; 0x758: 0x00000000
kftmde[13].templ.iXsiz[2]:            0 ; 0x75c: 0x00000000
kftmde[13].templ.entry:               0 ; 0x760: 0x00000000
kftmde[13].templ.idx:                 0 ; 0x764: 0x00000000
kftmde[13].templ.spare[0]:            0 ; 0x768: 0x00000000
kftmde[13].templ.spare[1]:            0 ; 0x76c: 0x00000000
.........
可见,其实template directory的结构也很简单,主要是如下几部分:

1) kfbh,头部信息,跟前面其他的文章描述的一样,不累述;
2) kffdnd,kffdnd,从上面输出的信息,我们不难猜测,这部分信息其实就是用来定位和描述block在目录树中的具体位置的。
   跟前面描述disk directory的kffdnd结构是一样的,所以这里也不多说。

3) kftmde,这部分结构主要是包括template模板的详细信息,如条带大小,宽度等信息. 下面详细描述该部分内容:

kftmde[0].entry.incarn:               1 ; 0x024: A=1 NUMM=0x0
kftmde[0].entry.hash:            616561 ; 0x028: 0x00096871  --hash值,无太大实际意义
kftmde[0].entry.refer.number:4294967295 ; 0x02c: 0xffffffff  ---指向下一层的block号
kftmde[0].entry.refer.incarn:         0 ; 0x030: A=0 NUMM=0x0

kftmde[0].templ.name:     PARAMETERFILE ; 0x034: length=13   --template模板名称
kftmde[0].templ.flags:                4 ; 0x054: S=0 S=0 S=1 --标志信息


kftmde[0].templ.redun:               18 ; 0x058: SCHE=0x1 NUMB=0x2 --表示冗余级别,17表示unprot,18表示MIRROR,19表示high.
kftmde[0].templ.strpwdth:             8 ; 0x059: 0x08  ---表示条带宽度
kftmde[0].templ.strpsz:              17 ; 0x05a: 0x11  ---表示条带大小
kftmde[0].templ.priZn:                0 ; 0x05b: 0x00
kftmde[0].templ.secZn:                0 ; 0x05c: 0x00
kftmde[0].templ.ub1spare:             0 ; 0x05d: 0x00  ---下面这部分内容都没有什么实际意义
kftmde[0].templ.ub2spare:             0 ; 0x05e: 0x0000
kftmde[0].templ.dXsiz[0]:    4294967295 ; 0x060: 0xffffffff
kftmde[0].templ.dXsiz[1]:             0 ; 0x064: 0x00000000
kftmde[0].templ.dXsiz[2]:             0 ; 0x068: 0x00000000
kftmde[0].templ.iXsiz[0]:    4294967295 ; 0x06c: 0xffffffff
kftmde[0].templ.iXsiz[1]:             0 ; 0x070: 0x00000000
kftmde[0].templ.iXsiz[2]:             0 ; 0x074: 0x00000000
kftmde[0].templ.entry:                0 ; 0x078: 0x00000000
kftmde[0].templ.idx:                  0 ; 0x07c: 0x00000000
kftmde[0].templ.spare[0]:             0 ; 0x080: 0x00000000

到这里,基本上asm template directory的结构大概描述完了,比较简单,而且这部分内容通常也不需要去关注,大家了解下即可。

上面提到了asm 条带,我这里就补充一点关于asm条带方面的内容。

在10g中,关于asm条带宽度和大小主要是由如下两个参数在空中:

SQL> SELECT * FROM V$version WHERE rownum < 3;

BANNER
----------------------------------------------------------------
Oracle DATABASE 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production

SQL> SHOW parameter asm_strip

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
_asm_stripesize                      INTEGER     131072  --默认是128k
_asm_stripewidth                     INTEGER     8       --8个条带大小
SQL>
你会发现stripsize * stripwidth 恰好是1m,这也正是我们的AU size大小,而1m通常也是大多数操作系统所能达到的单次最大io量。

asm 的条带分为两种COARSE和FINE,也被称为粗条带和细条带。

粗条带,默认就等于你的AU size,比如我这里au size为1m,那么粗条带大小就是1m,这种情况下的条带,通常实用于连续性的大IO操作,例如全表扫描。

细条带,默认是128k,8个条带组成一个AU,这种条带类型通常适用于对于读写延迟比较敏感的文件,比如redo logfile,controlfile。

从我前面10gR2的查询结果可以看出,其中也就redo和controlfile以及flashback是fine类型的,其他的均为粗条带,下面我进行一个简单的分类:

---默认是粗条带模板           ---默认是细条带模板                      
PARAMETERFILE                 CONTROLFILE
DUMPSET                       ONLINELOG 
ARCHIVELOG                    FLASHBACK 
DATAFILE                               
TEMPFILE
BACKUPSET
AUTOBACKUP
XTRANSPORT
CHANGETRACKING
DATAGUARDCONFIG

关于asm的条带大小,其实跟我们平常说讲的存储条带是一样的,比如aix中对lv进行条带。oracle官方文档的推荐值是要求你设置条带大小最少为2*DB_FILE_MULTIBLOCK_READ_COUNT. 然而,通常来讲,我们都推荐设置为128k甚至更高的值。

在11gR2中,我发现asm相关的参数多了很多,如下:

SQL> SELECT * FROM v$version WHERE rownum < 3;

BANNER
--------------------------------------------------------------------------------
Oracle DATABASE 11g Enterprise Edition Release 11.2.0.2.0 - Production
PL/SQL Release 11.2.0.2.0 - Production

SQL> SHOW parameter _asm

NAME                                   TYPE        VALUE
------------------------------------   ----------- ------------------------------
_asm_acd_chunks                        INTEGER     1
_asm_admin_with_sysdba                 BOOLEAN     FALSE
_asm_allow_lvm_resilvering             BOOLEAN     TRUE
_asm_allow_only_raw_disks              BOOLEAN     TRUE
_asm_ausize                            INTEGER     1048576
_asm_automatic_rezone                  BOOLEAN     TRUE
_asm_avoid_pst_scans                   BOOLEAN     TRUE
_asm_blksize                           INTEGER     4096
_asm_check_for_misbehaving_cf_clients  BOOLEAN     FALSE                              
_asm_compatibility                     string      10.1
_asm_dba_threshold                     INTEGER     0
_asm_dbmsdg_nohdrchk                   BOOLEAN     FALSE
_asm_diag_dead_clients                 BOOLEAN     FALSE
_asm_direct_con_expire_time            INTEGER     120
_asm_disable_amdu_dump                 BOOLEAN     FALSE
_asm_disable_async_msgs                BOOLEAN     FALSE
_asm_disable_multiple_instance_check   BOOLEAN     FALSE
_asm_disable_profilediscovery          BOOLEAN     FALSE
_asm_disable_smr_creation              BOOLEAN     FALSE
_asm_disk_repair_time                  INTEGER     14400
_asm_emulate_nfs_disk                  BOOLEAN     FALSE
_asm_emulmax                           INTEGER     10000
_asm_emultimeout                       INTEGER     0
_asm_evenread                          INTEGER     0
_asm_evenread_alpha                    INTEGER     0
_asm_evenread_alpha2                   INTEGER     0
_asm_evenread_faststart                INTEGER     0
_asm_fail_random_rx                    BOOLEAN     FALSE
_asm_fob_tac_frequency                 INTEGER     9
_asm_force_quiesce                     BOOLEAN     FALSE
_asm_hbeatwaitquantum                  INTEGER     2
_asm_imbalance_tolerance               INTEGER     3
_asm_instlock_quota                    INTEGER     0
_asm_iostat_latch_count                INTEGER     31
_asm_kfdpevent                         INTEGER     0
_asm_kfioevent                         INTEGER     0
_asm_kill_unresponsive_clients         BOOLEAN     TRUE
_asm_libraries                         string      ufs
_asm_log_scale_rebalance               BOOLEAN     FALSE
_asm_lsod_bucket_size                  INTEGER     13
_asm_max_cod_strides                   INTEGER     5
_asm_max_redo_buffer_size              INTEGER     2097152
_asm_maxio                             INTEGER     1048576
_asm_partner_target_disk_part          INTEGER     8
_asm_partner_target_fg_rel             INTEGER     4
_asm_primary_load                      INTEGER     1
_asm_primary_load_cycles               BOOLEAN     TRUE
_asm_random_zone                       BOOLEAN     FALSE
_asm_rebalance_plan_size               INTEGER     120
_asm_rebalance_space_errors            INTEGER     4
_asm_repairquantum                     INTEGER     60
_asm_reserve_slaves                    BOOLEAN     TRUE
_asm_root_directory                    string      ASM
_asm_runtime_capability_volume_support BOOLEAN     FALSE                                   
_asm_secondary_load                    INTEGER     10000
_asm_secondary_load_cycles             BOOLEAN     FALSE
_asm_serialize_volume_rebalance        BOOLEAN     FALSE
_asm_shadow_cycle                      INTEGER     3
_asm_skip_rename_check                 BOOLEAN     FALSE
_asm_skip_resize_check                 BOOLEAN     FALSE
_asm_storagemaysplit                   BOOLEAN     FALSE
_asm_stripesize                        INTEGER     131072
_asm_stripewidth                       INTEGER     8
_asm_sync_rebalance                    BOOLEAN     FALSE
_asm_usd_batch                         INTEGER     64
_asm_wait_time                         INTEGER     18
_asmlib_test                           INTEGER     0
_asmsid                                string      asm
_ges_diagnostics_asm_dump_level        INTEGER     11
_lm_asm_enq_hashing                    BOOLEAN     TRUE
关于asm template directory,个人认为没有太大的实际意义,了解即可,所以这篇文章内容就到此为止,后面会继续。

--------------------------------------ORACLE-DBA----------------------------------------

最权威、专业的Oracle案例资源汇总之【学习笔记】Oracle asm剖析系列(6)–template directory

本文由大师惜分飞原创分享,网址:http://www.oracleplus.net/arch/1410.html

Oracle研究中心

关键词:

Oracle ASM

Oracle ASM管理

ASM template directory管理