ASM Instance从本质上来说,和数据库的实例是没有太大的区别的,基本的结构都差不多,只是专门用于管理存储而已。就像windows操作系统也有个专门的存储版本一样。
ASM Instance中也有一些隐含参数。当然,既然Oracle将它们隐藏了就是不希望我们去修改,所以在生产库中,千万不要尝试去修改这些隐含参数。我这里列出来纯属用于学习研究,擅自使用,后果自负^_^
select a.ksppinm “Name”, b.ksppstvl “Value”
from x$ksppi a, x$ksppcv b
where a.indx = b.indx
and ksppinm like ‘\_%asm%’ escape ‘\’
order by a.ksppinm;
10G
_asm_acd_chunks 1
_asm_allow_only_raw_disks TRUE
_asm_allow_resilver_corruption FALSE
_asm_ausize 1048576
_asm_blksize 4096
_asm_disk_repair_time 14400
_asm_droptimeout 60
_asm_emulmax 10000
_asm_emultimeout 0
_asm_kfdpevent 0
_asm_libraries ufs
_asm_maxio 1048576
_asm_stripesize 131072
_asm_stripewidth 8
_asm_wait_time 18
_asmlib_test 0
_asmsid asm
11G
_asm_acd_chunks 1
_asm_allow_only_raw_disks FALSE
_asm_allow_resilver_corruption TRUE
_asm_ausize 1048576
_asm_blksize 4096
_asm_compatibility 10.1
_asm_dbmsdg_nohdrchk FALSE
_asm_disk_repair_time 14400
_asm_emulmax 10000
_asm_emultimeout 0
_asm_kfdpevent 0
_asm_kfioevent 0
_asm_libraries ufs
_asm_maxio 1048576
_asm_repairquantum 60
_asm_runtime_capability_volume_support FALSE
_asm_skip_resize_check FALSE
_asm_stripesize 131072
_asm_stripewidth 8
_asm_wait_time 18
_asmlib_test 0
_asmsid asm
_lm_asm_enq_hashing TRUE
上一次ASM故障处理中有提到清空了前面4k的头部,为什么是4K,就是因为_asm_blksize=4096,这是一个block的大小,可不是随便来的,呵呵。
一些研究Database Instance的方法在ASM中照样有效,比如sql trace和10046事件等,这可以帮助我们认识到ASM内部的一些东西。
alter session set sql_trace=true;
select count(*) from v$asm_file;
alter session set sql_trace=false;
找到对应的trace file,可以发现有如下语句:
select inst_id,group_kffil,number_kffil,compound_kffil,incarn_kffil,
blksiz_kffil,blkcnt_kffil,filsiz_kffil,filspc_kffil,sftype_kffil,
decode(redun_kffil,17,’UNPROT’,18,’MIRROR’,19,’HIGH’,
35,’PARITY’,36,’PARITY’,37,’PARITY’,38,’PARITY’),
decode(bitand(fdflg_kffil, 2), 2, ‘FINE’, ‘COARSE’),
crdate_kffil,mddate_kffil,
decode(thinned_kffil, 0, ‘U’, 4294967295, ‘N’, ‘Y’)
from x$kffil
where incarn_kffil <> 0 and number_kffil > 255
可以发现v$asm_file是基于x$kffil的,同样的方法,可以追踪到其他相关的v$视图的来源。可以通过v$fixed_table来列出所有的x$表:
Oracle11G> select name from v$fixed_table where name like ‘X$KF%’;
NAME
—————————————-
X$KFALS
X$KFCBH
X$KFCCE
X$KFBH
X$KFDSK
X$KFDSK_STAT
X$KFDAT
X$KFDFS
X$KFDDD
X$KFGRP
X$KFGRP_STAT
X$KFGMG
X$KFGBRB
X$KFKID
X$KFKLIB
X$KFMDGRP
X$KFNCL
X$KFNSDSKIOST
X$KFTMTA
X$KFFIL
X$KFFXP
X$KFDPARTNER
X$KFCLLE
X$KFENV
X$KFVOL
X$KFVOLSTAT
X$KFVOFS
X$KFVOFSV
ASM的X$表的命名比database的相对要易懂一些,但也是缩写的,具体和v$的对应关系和描述可以。