info.sh --- #采集操作系统信息
#!/bin/bash
mem_total=`free -m | grep Mem | awk '{print $2}'`
mem_use=`free -m | grep cache: | awk '{print $3}'`
mem_used=`awk 'BEGIN{printf "%.2f%\n",'$mem_use'/'$mem_total'*100}'`
sar_info=`sar -u 1 5`
cpu_idle=`echo "$sar_info" | sed -n '$p' | awk '{print $NF}'`
cpu_used=`awk 'BEGIN{printf "%.2f%\n",100-'$cpu_idle'}'`
echo -e "$cpu_used\t$mem_used"
asm.sh--- #采集ASM磁盘组信息
#!/bin/bash
PATH=$PATH:$HOME/bin
source ~/.bash_profile
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/rdbms/lib:/lib:/usr/lib:.
export SHLIB_PATH=$ORACLE_HOME/lib32:$ORACLE_HOME/rdbms/lib32:.
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
export PATH=$ORACLE_HOME/bin:/usr/local/bin:/usr/bin:/usr/sbin:/usr/bin/X11:$PATH:.
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib:$ORACLE_HOME/network/jlib
export PS1=$LOGNAME@`hostname`:'$PWD''$ '
sqlplus / as sysdba <<EOF
col name for a10
set linesize 1000
select group_number,name,TOTAL_MB,FREE_MB,USABLE_FILE_MB,to_char(round(free_mb/total_mb*100,2))||'%' percent,STATE from v\$asm_diskgroup;
EOF
unusable_object.sh --- #失效对象
#!/bin/bash
PATH=$PATH:$HOME/bin
export PATH
source ~/.bash_profile
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/rdbms/lib:/lib:/usr/lib:.
export SHLIB_PATH=$ORACLE_HOME/lib32:$ORACLE_HOME/rdbms/lib32:.
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
export PATH=$ORACLE_HOME/bin:/usr/local/bin:/usr/bin:/usr/sbin:/usr/bin/X11:$PATH:.
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib:$ORACLE_HOME/network/jlib
export PS1=$LOGNAME@`hostname`:'$PWD''$ '
sqlplus / as sysdba <<EOF
col object_name for a30
set linesize 1000
set pagesize 1000
col TO_CHAR(LAST_DDL_TIME,'YYYYMMDDHH24:MI') for a30
col owner for a10
select a.object_type,a.owner,a.object_name,to_char(a.last_ddl_time,'yyyymmdd hh24:mi') from dba_objects a,dba_users b where a.owner=b.username and a.owner!='SYS' and a.status!='VALID' and b.account_status='OPEN'
order by a.object_type
/
EOF
parallel.sh --- #采集 并行度 > 1 的索引
#!/bin/bash
PATH=$PATH:$HOME/bin
export PATH
source ~/.bash_profile
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/rdbms/lib:/lib:/usr/lib:.
export SHLIB_PATH=$ORACLE_HOME/lib32:$ORACLE_HOME/rdbms/lib32:.
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
export PATH=$ORACLE_HOME/bin:/usr/local/bin:/usr/bin:/usr/sbin:/usr/bin/X11:$PATH:.
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib:$ORACLE_HOME/network/jlib
export PS1=$LOGNAME@`hostname`:'$PWD''$ '
sqlplus / as sysdba <<EOF
select table_name,owner,index_name,degree from dba_indexes where rtrim(ltrim(degree)) not in ('0','1','DEFAULT')
/
EOF
unusable_index.sh --- # 采集 无效索引
#!/bin/bash
PATH=$PATH:$HOME/bin
export PATH
source ~/.bash_profile
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/rdbms/lib:/lib:/usr/lib:.
export SHLIB_PATH=$ORACLE_HOME/lib32:$ORACLE_HOME/rdbms/lib32:.
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
export PATH=$ORACLE_HOME/bin:/usr/local/bin:/usr/bin:/usr/sbin:/usr/bin/X11:$PATH:.
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib:$ORACLE_HOME/network/jlib
export PS1=$LOGNAME@`hostname`:'$PWD''$ '
sqlplus / as sysdba <<EOF
col owner for a10
col index_name for a40
col table_owner for a10
col table_name for a30
col tablespace_name for a20
set linesize 1000
select owner,index_name,index_type,table_owner,table_name,tablespace_name,status from dba_indexes where status!='N/A' and status<>'VALID'
/
select index_owner,index_name,tablespace_name,status from dba_ind_partitions where status!='USABLE'
/
EOF
state.sh --- # 检查数据库基本状况
#!/bin/bash
PATH=$PATH:$HOME/bin
export PATH
source ~/.bash_profile
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/rdbms/lib:/lib:/usr/lib:.
export SHLIB_PATH=$ORACLE_HOME/lib32:$ORACLE_HOME/rdbms/lib32:.
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
export PATH=$ORACLE_HOME/bin:/usr/local/bin:/usr/bin:/usr/sbin:/usr/bin/X11:$PATH:.
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib:$ORACLE_HOME/network/jlib
export PS1=$LOGNAME@`hostname`:'$PWD''$ '
tday=`date +%Y%m%d`
mkdir -p /home/oracle/inspection/state/$tday
sqlplus / as sysdba <<EOF
set linesize 1000
col host_name for a20
col instance_name for a20
spool /home/oracle/inspection/state/$tday/state.shili
select instance_name,host_name,startup_time,status,database_status from v\$instance;
spool off
spool /home/oracle/inspection/state/$tday/curr.session
select count(*) from v\$session;
spool off
spool /home/oracle/inspection/state/$tday/max.session
show parameter sessions;
spool off
spool /home/oracle/inspection/state/$tday/max.process
select value from v\$parameter where name='processes';
spool off
spool /home/oracle/inspection/state/$tday/state.tablespace
select tablespace_name,status from dba_tablespaces;
spool off
col name for a50
spool /home/oracle/inspection/state/$tday/state.datefile
select name,status from v\$datafile;
spool off
spool /home/oracle/inspection/state/$tday/state.logfile
select group#,status,type,member from v\$logfile;
spool off
EOF
crs.sh --- #采集crs状态信息
#!/usr/local/bin/bash
source ~/.bash_profile
export NLS_LANG=AMERICAN_AMERICA.UTF8
export NLS_DATE_FORMAT="yyyy-mm-dd hh24:mi:ss"
export PATH=.:${PATH}:$HOME/bin:$ORACLE_HOME/bin
export PATH=${PATH}:/usr/bin:/bin:/usr/bin/X11:/usr/local/bin
export PATH=${PATH}:$ORACLE_BASE/common/oracle/bin
export ORACLE_PATH=${PATH}:$ORACLE_BASE/common/oracle/sql:.:$ORACLE_HOME/rdbms/admin
export ORACLE_TERM=xterm
export TNS_ADMIN=$ORACLE_HOME/network/admin
export ORA_NLS10=$ORACLE_HOME/nls/data
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$ORACLE_HOME/oracm/lib
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/lib:/usr/lib:/usr/local/lib
export CLASSPATH=$ORACLE_HOME/JRE
export CLASSPATH=${CLASSPATH}:$ORACLE_HOME/jlib
export CLASSPATH=${CLASSPATH}:$ORACLE_HOME/rdbms/jlib
export CLASSPATH=${CLASSPATH}:$ORACLE_HOME/network/jlib
export THREADS_FLAG=native
export TEMP=/tmp
export TMPDIR=/tmp
export PS1=`hostname`:'$PWD'"$"
crsctl stat res -t
basic_status.sh --- # 检查数据库基本状况
#!/bin/bash
tday=`date +%Y%m%d`
dir="/home/oracle/inspection/state/$tday"
su - oracle "/home/oracle/inspection/state.sh" > /dev/null 2>&1
if [ $? -ne 0 ];then
echo "state.sh error"
else
sl_state=`more $dir/state.shili | awk '{print $NF}' | grep ^ACTIVE$ | wc -l`
if [[ $sl_state -eq 1 ]];then
sl_newstate=0
fi
curr_session=`grep -E "[0-9]" $dir/curr.session| awk '{print $1}'`
max_session=`more $dir/max.session | grep "^session" | awk '{print $NF}'`
max_process=`more $dir/max.process | awk '{print $NF}' | grep "^[0-9]"`
state_space=`more $dir/state.tablespace | awk '{print $2}' | egrep -v "select|---|STATUS|rows|spool|^ONLINE|^$" | wc -l`
state_datefile=`more $dir/state.datefile | awk '{print $2}' | egrep -v "^ONLINE|SYSTEM|STATUS|----|select|rows|spool|off|datafile|^$" | wc -l`
state_log=`more $dir/state.logfile | awk '{print $2}' | egrep -v "select|^ONLINE|STATUS|^STANDBY|---|rows|spool|^$" | wc -l`
su - grid "/home/oracle/inspection/crs.sh" > $dir/state.crs
if [ $? -ne 0 ];then
echo "crs.sh error"
else
ora_asm=`more $dir/state.crs | awk '{print $NF}' | grep Started | wc -l`
ora_orcl_db=`more $dir/state.crs | awk '{print $NF}' | grep ^Open$ | wc -l`
if [ $ora_asm -eq 2 ] && [ $ora_orcl_db -eq 2 ];then
state_crs=0
else
state_crs=1
fi
echo "$sl_newstate $curr_session $max_session $max_process $state_space $state_datefile $state_log $state_crs"
fi
fi
tablespace_use.sh --- # 表空间大小统计
#!/bin/bash
PATH=$PATH:$HOME/bin
export PATH
source ~/.bash_profile
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/rdbms/lib:/lib:/usr/lib:.
export SHLIB_PATH=$ORACLE_HOME/lib32:$ORACLE_HOME/rdbms/lib32:.
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
export PATH=$ORACLE_HOME/bin:/usr/local/bin:/usr/bin:/usr/sbin:/usr/bin/X11:$PATH:.
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib:$ORACLE_HOME/network/jlib
export PS1=$LOGNAME@`hostname`:'$PWD''$ '
sqlplus / as sysdba <<EOF
set linesize 188
SELECT UPPER(F.TABLESPACE_NAME) "TBS_NAME",
D.TOT_GROOTTE_MB "SIZE(M)",
D.TOT_GROOTTE_MB - F.TOTAL_BYTES "USED(M)",
TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.TOT_GROOTTE_MB * 100,
2),
'990.99') "USED%"
FROM (SELECT TABLESPACE_NAME,
ROUND(SUM(BYTES) / (1024 * 1024), 2) TOTAL_BYTES,
ROUND(MAX(BYTES) / (1024 * 1024), 2) MAX_BYTES
FROM SYS.DBA_FREE_SPACE
GROUP BY TABLESPACE_NAME) F,
(SELECT DD.TABLESPACE_NAME,
ROUND(SUM(DD.BYTES) / (1024 * 1024), 2) TOT_GROOTTE_MB
FROM SYS.DBA_DATA_FILES DD
GROUP BY DD.TABLESPACE_NAME) D
WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME
ORDER BY 4 DESC
/
EOF
rman_log.sh --- # 检查 rman备份、expdp,dg同步等log是否存在 error
#!/bin/bash
tday=`date +%Y-%m-%d`
rman_log=/bak/ora_rman_backup/log/rman.log
expdp_log=/logdata/oraback
ora_err=`grep "ORA-" $rman_log | awk -F : '{print $1}'`
if [ -n "$ora_err" ];then
a=$ora_err
else
a='0'
fi
log_num=`ls $expdp_log/*$tday.log | wc -l`
succ_num=`cat $expdp_log/*$tday.log | grep "successfully loaded/unloaded" | wc -l`
if [ $log_num -eq 0 ];then
b='nodata'
else
if [ -f $expdp_log/export_$tday.log ];then
num=`expr $log_num - 1`
else
num=$log_num
fi
if [ $succ_num -eq $num ];then
b='0'
else
b='1'
fi
fi
echo "$a,$b,N|L,N|L"
dgcheck.sh --- #检查归档日志路径状态
#!/usr/bin/sh
source ~/.bash_profile
export NLS_LANG=AMERICAN_AMERICA.UTF8
export NLS_DATE_FORMAT="yyyy-mm-dd hh24:mi:ss"
export PATH=.:${PATH}:$HOME/bin:$ORACLE_HOME/bin
export PATH=${PATH}:/usr/bin:/bin:/usr/bin/X11:/usr/local/bin
export PATH=${PATH}:$ORACLE_BASE/common/oracle/bin
export ORACLE_PATH=${PATH}:$ORACLE_BASE/common/oracle/sql:.:$ORACLE_HOME/rdbms/admin
export ORACLE_TERM=xterm
export TNS_ADMIN=$ORACLE_HOME/network/admin
#export ORA_NLS10=$ORACLE_HOME/nls/data
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$ORACLE_HOME/oracm/lib
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/lib:/usr/lib:/usr/local/lib
export CLASSPATH=$ORACLE_HOME/JRE
export CLASSPATH=${CLASSPATH}:$ORACLE_HOME/jlib
export CLASSPATH=${CLASSPATH}:$ORACLE_HOME/rdbms/jlib
export CLASSPATH=${CLASSPATH}:$ORACLE_HOME/network/jlib
export THREADS_FLAG=native
export TEMP=/tmp
export TMPDIR=/tmp
export PS1=`hostname`:'$PWD'"$"
tday=`date +%Y%m%d`
mkdir -p /home/oracle/inspection/state/$tday
sqlplus / as sysdba <<EOF
set linesize 500
col dest_name for a30
col error for a50
spool /home/oracle/inspection/state/$tday/dg.check
select dest_id, dest_name, status, error from v\$archive_dest order by dest_id
/
spool off
EOF
dg.sh --- #检查dg状态
#!/usr/bin/sh
tday=`date +%Y%m%d`
su - oracle "/home/oracle/inspection/dgcheck.sh" >/dev/null 2>&1
if [ $? -eq 0 ];then
if [ -f /home/oracle/inspection/state/$tday/dg.check ];then
num=`more /home/oracle/inspection/state/$tday/dg.check | awk '{print $3}' | grep ^INVALID | wc -l`
if [ $num -eq 0 ];then
a='0'
else
a='1'
fi
fi
fi
echo $a
ora_err.sh --- # ORA 报错统计
#!/bin/bash
source /home/oracle/.bash_profile
dt=`env LANG=en_US.UTF-8 date | awk '{print $3}'`
if [ $dt -lt 10 ];then
td=`env LANG=en_US.UTF-8 date | awk '{print $1,$2,0$3}'`
else
td=`env LANG=en_US.UTF-8 date | awk '{print $1,$2,$3}'`
fi
dir=$ALERT
begin=`grep -n "$td" $dir | head -1 | awk -F : '{print $1}'`
err=`sed -n ''"$begin"',$p' $dir | grep ORA-`
if [ -n "$err" ];then
echo "$err"
else
echo 0
fi