oracle巡检脚本---linux

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

猜你喜欢

转载自blog.csdn.net/sandy9919/article/details/81282059