当ASM中某些磁盘状态异常,比如应该是“MEMBER”的,却是“CANDIDATE”或者其他等各种盘头异常,或者ASM实例异常,可以使用下面脚本收集ASM信息(来源于MOS)
#/bin/sh ################################################################################################ ### The next script generates additional ASM metadata information thru the ASMCMD interface ### ################################################################################################ test $# -eq '1' || { echo " exec sh check_asm_lunar.sh arg1 "; exit;} ASMVERSION=$1 case $ASMVERSION in 10g|10.2) SYSROLE="sysdba" ;; 11g|11.2) SYSROLE="sysasm" ;; *) echo "Unkown ASM VERSION" # exit; ;; esac ################################################################################################ ### The next script generates additional ASM metadata information thru the ASMCMD interface ### ################################################################################################ mkdir /tmp/lunar cd /tmp/lunar rm -rf /tmp/lunar/* echo "ASMCMD commands to gather complementary metadata information:" > /tmp/asmcmd_script.out 2> /tmp/asmcmd_script.out echo "==================================" >> /tmp/asmcmd_script.out 2>> /tmp/asmcmd_script.out echo " " >> /tmp/asmcmd_script.out 2>> /tmp/asmcmd_script.out asmcmd -p ls -ls >> /tmp/asmcmd_script.out 2>> /tmp/asmcmd_script.out echo "==================================" >> /tmp/asmcmd_script.out 2>> /tmp/asmcmd_script.out echo " " >> /tmp/asmcmd_script.out 2>> /tmp/asmcmd_script.out asmcmd -p lsattr >> /tmp/asmcmd_script.out 2>> /tmp/asmcmd_script.out echo "==================================" >> /tmp/asmcmd_script.out 2>> /tmp/asmcmd_script.out echo " " >> /tmp/asmcmd_script.out 2>> /tmp/asmcmd_script.out asmcmd -p lsct >> /tmp/asmcmd_script.out 2>> /tmp/asmcmd_script.out echo "==================================" >> /tmp/asmcmd_script.out 2>> /tmp/asmcmd_script.out echo " " >> /tmp/asmcmd_script.out 2>> /tmp/asmcmd_script.out asmcmd -p lsdg >> /tmp/asmcmd_script.out 2>> /tmp/asmcmd_script.out echo "==================================" >> /tmp/asmcmd_script.out 2>> /tmp/asmcmd_script.out echo " " >> /tmp/asmcmd_script.out 2>> /tmp/asmcmd_script.out asmcmd -p lsdsk >> /tmp/asmcmd_script.out 2>> /tmp/asmcmd_script.out echo "==================================" >> /tmp/asmcmd_script.out 2>> /tmp/asmcmd_script.out echo " " >> /tmp/asmcmd_script.out 2>> /tmp/asmcmd_script.out asmcmd -p lsof >> /tmp/asmcmd_script.out 2>> /tmp/asmcmd_script.out echo "==================================" >> /tmp/asmcmd_script.out 2>> /tmp/asmcmd_script.out echo " " >> /tmp/asmcmd_script.out 2>> /tmp/asmcmd_script.out asmcmd -p lsod >> /tmp/asmcmd_script.out 2>> /tmp/asmcmd_script.out echo "==================================" >> /tmp/asmcmd_script.out 2>> /tmp/asmcmd_script.out echo " " >> /tmp/asmcmd_script.out 2>> /tmp/asmcmd_script.out asmcmd -p iostat >> /tmp/asmcmd_script.out 2>> /tmp/asmcmd_script.out echo "==================================" >> /tmp/asmcmd_script.out 2>> /tmp/asmcmd_script.out echo " " >> /tmp/asmcmd_script.out 2>> /tmp/asmcmd_script.out asmcmd -p dsget >> /tmp/asmcmd_script.out 2>> /tmp/asmcmd_script.out echo "==================================" >> /tmp/asmcmd_script.out 2>> /tmp/asmcmd_script.out echo " " >> /tmp/asmcmd_script.out 2>> /tmp/asmcmd_script.out asmcmd -p lsop >> /tmp/asmcmd_script.out 2>> /tmp/asmcmd_script.out echo "==================================" >> /tmp/asmcmd_script.out 2>> /tmp/asmcmd_script.out echo " " >> /tmp/asmcmd_script.out 2>> /tmp/asmcmd_script.out asmcmd -p spget >> /tmp/asmcmd_script.out 2>> /tmp/asmcmd_script.out echo "==================================" >> /tmp/asmcmd_script.out 2>> /tmp/asmcmd_script.out echo " " >> /tmp/asmcmd_script.out 2>> /tmp/asmcmd_script.out asmcmd -p lstmpl >> /tmp/asmcmd_script.out 2>> /tmp/asmcmd_script.out echo "==================================" >> /tmp/asmcmd_script.out 2>> /tmp/asmcmd_script.out echo " " >> /tmp/asmcmd_script.out 2>> /tmp/asmcmd_script.out asmcmd -p lsusr >> /tmp/asmcmd_script.out 2>> /tmp/asmcmd_script.out echo "==================================" >> /tmp/asmcmd_script.out 2>> /tmp/asmcmd_script.out echo " " >> /tmp/asmcmd_script.out 2>> /tmp/asmcmd_script.out asmcmd -p lsgrp >> /tmp/asmcmd_script.out 2>> /tmp/asmcmd_script.out echo "==================================" >> /tmp/asmcmd_script.out 2>> /tmp/asmcmd_script.out echo " " >> /tmp/asmcmd_script.out 2>> /tmp/asmcmd_script.out asmcmd -p lspwusr >> /tmp/asmcmd_script.out 2>> /tmp/asmcmd_script.out echo "==================================" >> /tmp/asmcmd_script.out 2>> /tmp/asmcmd_script.out echo " " >> /tmp/asmcmd_script.out 2>> /tmp/asmcmd_script.out asmcmd -p volinfo -a >> /tmp/asmcmd_script.out 2>> /tmp/asmcmd_script.out echo "==================================" >> /tmp/asmcmd_script.out 2>> /tmp/asmcmd_script.out echo " " >> /tmp/asmcmd_script.out 2>> /tmp/asmcmd_script.out ############################################################################################################## sqlplus -S /nolog<<EOF conn / as $SYSROLE spool /tmp/asm_Generic_ASM_metadata.html -- ASM Versions 10.1, 10.2, 11.1 & 11.2 SET MARKUP HTML ON set echo on set pagesize 200 alter session set nls_date_format='YYYY-MM-DD HH24:MI:SS'; select 'THIS ASM REPORT WAS GENERATED AT: ==)> ' , sysdate " " from dual; select 'HOSTNAME ASSOCIATED WITH THIS ASM INSTANCE: ==)> ' , MACHINE " " from v\$session where program like '%SMON%'; select * from v\$asm_diskgroup; SELECT * FROM v\$ASM_DISK ORDER BY GROUP_NUMBER,DISK_NUMBER; SELECT SUBSTR(d.name,1,16) AS asmdisk, d.mount_status, d.state, dg.name AS diskgroup FROM v\$ASM_DISKGROUP dg, v\$ASM_DISK d WHERE dg.group_number = d.group_number; SELECT * FROM v\$ASM_CLIENT; SELECT dg.name AS diskgroup, SUBSTR(c.instance_name,1,12) AS instance, SUBSTR(c.db_name,1,12) AS dbname, SUBSTR(c.SOFTWARE_VERSION,1,12) AS software, SUBSTR(c.COMPATIBLE_VERSION,1,12) AS compatible FROM v\$ASM_DISKGROUP dg, v\$ASM_CLIENT c WHERE dg.group_number = c.group_number; select * from v\$ASM_ATTRIBUTE; select * from v\$asm_operation; select * from gv\$asm_operation; select * from v\$version; select * from v\$ASM_ACFSSNAPSHOTS; select * from v\$ASM_ACFSVOLUMES; select * from v\$ASM_FILESYSTEM; select * from v\$ASM_VOLUME; select * from v\$ASM_VOLUME_STAT; select * from v\$ASM_USER; select * from v\$ASM_USERGROUP; select * from v\$ASM_USERGROUP_MEMBER; select * from v\$ASM_DISK_IOSTAT; select * from v\$ASM_DISK_STAT; select * from v\$ASM_DISKGROUP_STAT; select * from v\$ASM_TEMPLATE; show parameter asm show parameter cluster show parameter instance_type show parameter instance_name show parameter spfile show sga !echo "select '" > /tmp/gpnptool.sql 2> /dev/null ! $ORACLE_HOME/bin/gpnptool get >> /tmp/gpnptool.sql 2>> /dev/null !echo "' from dual;" >> /tmp/gpnptool.sql 2>> /dev/null set echo off @@/tmp/gpnptool.sql spool off spool /tmp/asm_alias_files.html -- ASM Versions 10.1, 10.2, 11.1 & 11.2 SET MARKUP HTML ON set echo on set pagesize 200 alter session set nls_date_format='YYYY-MON-DD HH24:MI:SS'; select 'THIS ASM REPORT WAS GENERATED AT: ==)> ' , sysdate " " from dual; select 'HOSTNAME ASSOCIATED WITH THIS ASM INSTANCE: ==)> ' , MACHINE " " from v\$session where program like '%SMON%'; select * from v\$asm_alias; select * from v\$asm_file; show parameter asm show parameter cluster show parameter instance_type show parameter instance_name show parameter spfile show sga spool off spool /tmp/asm_full_path_alias_directory.html -- ASM Versions 10.1, 10.2, 11.1 & 11.2 SET MARKUP HTML ON set echo on set pagesize 200 alter session set nls_date_format='YYYY-MON-DD HH24:MI:SS'; select 'THIS ASM REPORT WAS GENERATED AT: ==)> ' , sysdate " " from dual; select 'HOSTNAME ASSOCIATED WITH THIS ASM INSTANCE: ==)> ' , MACHINE " " from v\$session where program like '%SMON%'; SELECT CONCAT('+'||GNAME, SYS_CONNECT_BY_PATH(ANAME, '/')) FULL_PATH, SYSTEM_CREATED, ALIAS_DIRECTORY, FILE_TYPE FROM ( SELECT B.NAME GNAME, A.PARENT_INDEX PINDEX, A.NAME ANAME, A.REFERENCE_INDEX RINDEX, A.SYSTEM_CREATED, A.ALIAS_DIRECTORY, C.TYPE FILE_TYPE FROM v\$ASM_ALIAS A, v\$ASM_DISKGROUP B, v\$ASM_FILE C WHERE A.GROUP_NUMBER = B.GROUP_NUMBER AND A.GROUP_NUMBER = C.GROUP_NUMBER(+) AND A.FILE_NUMBER = C.FILE_NUMBER(+) AND A.FILE_INCARNATION = C.INCARNATION(+) ) START WITH (MOD(PINDEX, POWER(2, 24))) = 0 CONNECT BY PRIOR RINDEX = PINDEX; spool off exit EOF mv /tmp/asmcmd_script.out /tmp/lunar/ mv /tmp/asm_full_path_alias_directory.html /tmp/lunar/ mv /tmp/gpnptool.sql /tmp/lunar/ mv /tmp/asm_alias_files.html /tmp/lunar/ mv /tmp/asm_Generic_ASM_metadata.html /tmp/lunar/ cd /tmp tar cvf asm_lunar.tar /tmp/lunar/*