当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/*
