ITPub博客

首页 > 数据库 > Oracle > ASM剖析(6)-template directory

ASM剖析(6)-template directory

Oracle 作者:Curry_0316 时间:2015-02-02 11:09:54 0 删除 编辑
http://www.killdb.com/2013/01/16/oracle-asm剖析系列6-template-directory.html

前面关于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 ------------ ------------ ------ ------ - ------------------------------10 UNPROT COARSE Y PARAMETERFILE 11 UNPROT COARSE Y DUMPSET 12 UNPROT FINE   Y CONTROLFILE 13 UNPROT COARSE Y ARCHIVELOG 14 UNPROT FINE   Y ONLINELOG 15 UNPROT COARSE Y DATAFILE 16 UNPROT COARSE Y TEMPFILE 17 UNPROT COARSE Y BACKUPSET 18 UNPROT COARSE Y AUTOBACKUP 19 UNPROT COARSE Y XTRANSPORT 110 UNPROT COARSE Y CHANGETRACKING 111 UNPROT FINE   Y FLASHBACK 112 UNPROT COARSE Y DATAGUARDCONFIG
  13ROWS selected.  
你看到冗余的一列,显示的是unprot,即是不支持。 ---11.2 SQL>SELECT*FROM V$ASM_TEMPLATE ORDERBY2;
 
GROUP_NUMBER ENTRY_NUMBER REDUND STRIPE S NAME                           PRIM MIRR ------------ ------------ ------ ------ - ------------------------------ ---- ----20 UNPROT COARSE Y PARAMETERFILE                  COLD COLD 21 UNPROT COARSE Y ASMPARAMETERFILE               COLD COLD 23 UNPROT COARSE Y DUMPSET                        COLD COLD 24 UNPROT FINE   Y CONTROLFILE                    COLD COLD 25 UNPROT COARSE Y FLASHFILE                      COLD COLD 26 UNPROT COARSE Y ARCHIVELOG                     COLD COLD 27 UNPROT COARSE Y ONLINELOG                      COLD COLD 28 UNPROT COARSE Y DATAFILE                       COLD COLD 29 UNPROT COARSE Y TEMPFILE                       COLD COLD 210 UNPROT COARSE Y BACKUPSET                      COLD COLD 211 UNPROT COARSE Y AUTOBACKUP                     COLD COLD 212 UNPROT COARSE Y XTRANSPORT                     COLD COLD 213 UNPROT COARSE Y CHANGETRACKING                 COLD COLD 214 UNPROT COARSE Y FLASHBACK                      COLD COLD 215 UNPROT COARSE Y DATAGUARDCONFIG                COLD COLD 216 UNPROT COARSE Y OCRFILE                        COLD COLD 160 UNPROT COARSE Y PARAMETERFILE                  COLD COLD 161 UNPROT COARSE Y ASMPARAMETERFILE               COLD COLD 163 UNPROT COARSE Y DUMPSET                        COLD COLD 164 UNPROT FINE   Y CONTROLFILE                    COLD COLD 165 UNPROT COARSE Y FLASHFILE                      COLD COLD 166 UNPROT COARSE Y ARCHIVELOG                     COLD COLD 167 UNPROT COARSE Y ONLINELOG                      COLD COLD 168 UNPROT COARSE Y DATAFILE                       COLD COLD 169 UNPROT COARSE Y TEMPFILE                       COLD COLD 1170 UNPROT COARSE Y BACKUPSET                      COLD COLD 1171 UNPROT COARSE Y AUTOBACKUP                     COLD COLD 1172 UNPROT COARSE Y XTRANSPORT                     COLD COLD 1173 UNPROT COARSE Y CHANGETRACKING                 COLD COLD 1174 UNPROT COARSE Y FLASHBACK                      COLD COLD 1175 UNPROT COARSE Y DATAGUARDCONFIG                COLD COLD 1176 UNPROT COARSE Y OCRFILE                        COLD COLD
  32ROWS 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>SELECT2 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 9FROM10 v$asm_diskgroup a RIGHTOUTERJOIN v$asm_disk b USING(group_number)11ORDERBY12 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 51950.68/dev/sdc          DATA1_0001           DATA1_0001 1,024 51950.68********************-------------- --------------2,048 1,038
 
DATA2 /dev/sdb          DATA2_0000           DATA2_0000 1,024 514.98/dev/sde          DATA2_0001           DATA2_0001 1,024 514.98********************-------------- --------------2,048 102   -------------- -------------- Grand Total: 4,096 1,140  
SQL>SELECT2 name                                     group_name 3, sector_size                              sector_size 4, block_size                               block_size 5, allocation_unit_size                     allocation_unit_size 6, state                                    state 7,TYPETYPE8, total_mb                                 total_mb 9,(total_mb - free_mb) used_mb 10, ROUND((1-(free_mb / total_mb))*100,2) pct_used 11FROM12 v$asm_diskgroup 13ORDERBY14 name 15/  
Disk GROUP Sector   Block   Allocation
Name SIZESIZE Unit SIZE State TYPE File SIZE(MB) Used SIZE(MB) Pct. Used -------------------- ------- ------- ------------ ----------- ------ -------------- -------------- --------- DATA1 5124,096 1,048,576 MOUNTED     EXTERN 2,048 1,038 50.68 DATA2 5124,096 1,048,576 MOUNTED     NORMAL 2,048 1024.98-------------- -------------- Grand Total: 4,096 1,140+++++++++++++创建一个test表空间到data2 diskgroup上: ---asm instance SQL>SHOW parameter TYPE  
NAME TYPEVALUE------------------------------------ ------ ------------------------------ 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 ------------ ------------ ------ ------ - ------------------------------10 UNPROT COARSE Y PARAMETERFILE 11 UNPROT COARSE Y DUMPSET 12 UNPROT FINE   Y CONTROLFILE 13 UNPROT COARSE Y ARCHIVELOG 14 UNPROT FINE   Y ONLINELOG 15 UNPROT COARSE Y DATAFILE 16 UNPROT COARSE Y TEMPFILE 17 UNPROT COARSE Y BACKUPSET 18 UNPROT COARSE Y AUTOBACKUP 19 UNPROT COARSE Y XTRANSPORT 110 UNPROT COARSE Y CHANGETRACKING 111 UNPROT FINE   Y FLASHBACK 112 UNPROT COARSE Y DATAGUARDCONFIG 20 MIRROR COARSE Y PARAMETERFILE 21 MIRROR COARSE Y DUMPSET 22 HIGH   FINE   Y CONTROLFILE 23 MIRROR COARSE Y ARCHIVELOG 24 MIRROR FINE   Y ONLINELOG 25 MIRROR COARSE Y DATAFILE 26 MIRROR COARSE Y TEMPFILE 27 MIRROR COARSE Y BACKUPSET 28 MIRROR COARSE Y AUTOBACKUP 29 MIRROR COARSE Y XTRANSPORT 210 MIRROR COARSE Y CHANGETRACKING 211 MIRROR FINE   Y FLASHBACK 212 MIRROR COARSE Y DATAGUARDCONFIG 213 MIRROR COARSE N TEST_TEMPLATE
  27ROWS selected.   ----database instance SQL>SHOW parameter TYPE  
NAME TYPEVALUE------------------------------------ ----------- ------------------------------ instance_type                        string      RDBMS
plsql_code_type                      string      INTERPRETED
 
SQL>CREATE tablespace test datafile '+data2(test_template)'SIZE 5m;
 
Tablespace created.  
SQL>

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

SQL>SELECT number_kffxp file#, disk_kffxp disk#,COUNT(disk_kffxp) extents 2FROM x$kffxp 3WHERE group_kffxp=14AND disk_kffxp <>655345GROUPBY number_kffxp, disk_kffxp;
 
     FILE#      DISK#    EXTENTS ---------- ---------- ----------10111121130213121401411501---这就是template directory6012560240..........

既然我们知道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 ; 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 TYPEVALUE------------------------------------ ----------- ------------------------------ _asm_stripesize INTEGER131072--默认是128k _asm_stripewidth INTEGER8--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 TYPEVALUE------------------------------------   ----------- ------------------------------ _asm_acd_chunks INTEGER1 _asm_admin_with_sysdba BOOLEANFALSE _asm_allow_lvm_resilvering BOOLEANTRUE _asm_allow_only_raw_disks BOOLEANTRUE _asm_ausize INTEGER1048576 _asm_automatic_rezone BOOLEANTRUE _asm_avoid_pst_scans BOOLEANTRUE _asm_blksize INTEGER4096 _asm_check_for_misbehaving_cf_clients BOOLEANFALSE _asm_compatibility                     string 10.1 _asm_dba_threshold INTEGER0 _asm_dbmsdg_nohdrchk BOOLEANFALSE _asm_diag_dead_clients BOOLEANFALSE _asm_direct_con_expire_time INTEGER120 _asm_disable_amdu_dump BOOLEANFALSE _asm_disable_async_msgs BOOLEANFALSE _asm_disable_multiple_instance_check BOOLEANFALSE _asm_disable_profilediscovery BOOLEANFALSE _asm_disable_smr_creation BOOLEANFALSE _asm_disk_repair_time INTEGER14400 _asm_emulate_nfs_disk BOOLEANFALSE _asm_emulmax INTEGER10000 _asm_emultimeout INTEGER0 _asm_evenread INTEGER0 _asm_evenread_alpha INTEGER0 _asm_evenread_alpha2 INTEGER0 _asm_evenread_faststart INTEGER0 _asm_fail_random_rx BOOLEANFALSE _asm_fob_tac_frequency INTEGER9 _asm_force_quiesce BOOLEANFALSE _asm_hbeatwaitquantum INTEGER2 _asm_imbalance_tolerance INTEGER3 _asm_instlock_quota INTEGER0 _asm_iostat_latch_count INTEGER31 _asm_kfdpevent INTEGER0 _asm_kfioevent INTEGER0 _asm_kill_unresponsive_clients BOOLEANTRUE _asm_libraries                         string      ufs
_asm_log_scale_rebalance BOOLEANFALSE _asm_lsod_bucket_size INTEGER13 _asm_max_cod_strides INTEGER5 _asm_max_redo_buffer_size INTEGER2097152 _asm_maxio INTEGER1048576 _asm_partner_target_disk_part INTEGER8 _asm_partner_target_fg_rel INTEGER4 _asm_primary_load INTEGER1 _asm_primary_load_cycles BOOLEANTRUE _asm_random_zone BOOLEANFALSE _asm_rebalance_plan_size INTEGER120 _asm_rebalance_space_errors INTEGER4 _asm_repairquantum INTEGER60 _asm_reserve_slaves BOOLEANTRUE _asm_root_directory                    string      ASM
_asm_runtime_capability_volume_support BOOLEANFALSE _asm_secondary_load INTEGER10000 _asm_secondary_load_cycles BOOLEANFALSE _asm_serialize_volume_rebalance BOOLEANFALSE _asm_shadow_cycle INTEGER3 _asm_skip_rename_check BOOLEANFALSE _asm_skip_resize_check BOOLEANFALSE _asm_storagemaysplit BOOLEANFALSE _asm_stripesize INTEGER131072 _asm_stripewidth INTEGER8 _asm_sync_rebalance BOOLEANFALSE _asm_usd_batch INTEGER64 _asm_wait_time INTEGER18 _asmlib_test INTEGER0 _asmsid                                string      asm
_ges_diagnostics_asm_dump_level INTEGER11 _lm_asm_enq_hashing BOOLEANTRUE

关于asm template directory,个人认为没有太大的实际意义,了解即可,所以这篇文章内容就到此为止,后面会继续。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29953799/viewspace-1423431/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2014-10-11

  • 博文量
    89
  • 访问量
    280152