前面关于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/ ,如需转载,请注明出处,否则将追究法律责任。