天萃荷净
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