关闭

oracle数据库表空间巡检

标签: oracle数据库表空间巡检shell
88人阅读 评论(0) 收藏 举报
分类:

shell oracle数据库表空间、进程、监听自动巡检

1、巡检标准

(1)使用oracle用户登录

(2)执行红色字体部分进入数据库sqlplus "/as sysdba"

(3) 执行如下指令查询表空间占用情况

select a.tablespace_name,

       round(a.abytes/ 1024 / 1024) total_mb,

       round((a.abytes- f.fbytes) / 1024 / 1024) used_mb,

       round(f.fbytes/ 1024 / 1024)  free_mb,

       (1 - round(f.fbytes/ a.abytes, 2)) * 100  "USED",

       round(f.fbytes/ a.abytes, 2) * 100 "FREE"

  from (select tablespace_name, sum(bytes) abytesfrom dba_data_filesgroup by tablespace_name) a,

       (select tablespace_name, sum(bytes) fbytesfrom dba_free_spacegroup by tablespace_name) f

 where a.tablespace_name= f.tablespace_nameorder by USEDdesc;



上图中,关注USED的数据,超过90表示表空间可能存在安全隐患需要联系系统维护人员扩充表空间。

(4)巡检完成后,执行SQL>exit退出数据库连接。


2、shell代码

(1)这是巡检表空间的shell
#!/bin/bash
#writen by zy

#*************************数据库表空间的巡检*************************
echo "#####处理开始####"
sqlplus  / as  sysdba  << EOF
select a.tablespace_name,
       round(a.abytes / 1024 / 1024) total_mb,
       round((a.abytes - f.fbytes) / 1024 / 1024) used_mb,
       round(f.fbytes / 1024 / 1024)  free_mb,
       (1 - round(f.fbytes / a.abytes, 2)) * 100  "USED",
       round(f.fbytes / a.abytes, 2) * 100 "FREE"
  from (select tablespace_name, sum(bytes) abytes from dba_data_files group by tablespace_name) a,
       (select tablespace_name, sum(bytes) fbytes from dba_free_space group by tablespace_name) f
 where a.tablespace_name = f.tablespace_name order by USED desc;
exit;
EOF
echo "######处理结束####"

#***********************对数据库表空间的文件进行分析**********************
(2)下面在main.sh执行上面的贴出来的cmd_sql.sh并将其巡检结果写入cmd_sql.txt中,对cmd_sql.txt进行分析即可得到结果,除此之外,main.sh还巡检了数据库进程和监听程序。附上代码:若异常则写入newreport.txt里面,正常则打印控制台。
#!/bin/bash
#writen by zy
#echo "数据库7服务器巡检开始。。。"  >> ./newreport.txt 

echo "开始处理数据库7进程巡检"

echo "-------------------------------------------------"

num1=`ps -ef | grep ora_lgwr | grep -v grep|wc -l`

num2=`ps -ef | grep ora_ckpt | grep -v grep|wc -l`

num3=`ps -ef | grep ora_smon | grep -v grep|wc -l`

num4=`ps -ef | grep ora_pmon | grep -v grep|wc -l`

if [ $num1 -eq 1 ]&&[ $num2 -eq 1 ]&&[ $num3 -eq  1 ]&&[ $num4 -eq 1 ] ;   then

        echo "系统正常!"

else

        echo "`date` 数据库7系统存在较大风险,请及时处理!所使用的命令是ps -ef | grep ora_lgwr | grep -v grep|wc -l     ps -ef | grep ora_ckpt | grep -v grep|wc -l 
    ps -ef | grep ora_smon | grep -v grep|wc -l    ps -ef | grep ora_pmon | grep -v grep|wc -l中至少有1条进程不存在!" >> ./newreport.txt

fi

num5=`ps -ef | grep ora_dbw | grep -v grep|wc -l`

if [ $num5 -ge 1 ];  then

        echo "进程正常! "

else

        echo "`date` 数据库7进程不正常,请及时处理!所使用的命令是ps -ef | grep ora_dbw | grep -v grep|wc -l进程不存在!" >> ./newreport.txt

fi

echo "-------------------------------------------------"

echo "数据库进程巡检结束!!!"

#**********************数据库监听巡检************************

echo "开始处理数据库监听巡检..."

echo "-------------------------------------------------"

num6=`ps -ef | grep tnslsnr | grep -v grep|wc -l`

if [ $num6 -ge 1 ];  then

        echo "数据库监听正常!"

else

        echo "`date` 数据库7监听不正常!请及时处理!所使用的命令ps -ef | grep tnslsnr | grep -v grep|wc -l进程不存在!" >> ./newreport.txt

fi

echo "-------------------------------------------------"

echo "数据库监听处理结束!!!"

#***********************生成表空间文件再进行解析************************

echo  "调用cmd_sql.sh生成表空间文件cmd_sql_txt"

source   /home/oracle/.bash_profile
echo "***************************************************************************"
echo "`date`"

    rm  -rf  /home/oracle/publie_file/cmd_sql_txt
    echo "`/home/oracle/publie_file/cmd_sql.sh`" >/home/oracle/publie_file/cmd_sql_txt

     free1=`cat  /home/oracle/publie_file/cmd_sql_txt   | awk '{print $5}' | sed -n 3p | sed 's/%//g' |sed 's/id,//g'`




echo "***************************************************************************"

#***********************对数据库表空间的文件进行分析**********************

echo "开始解析表空间..."

cat3=`cat cmd_sql_txt| awk '{print $5}' | sed -n 24p | sed 's/%//g' |sed 's/id,//g'`

if [ $cat3  -gt   90 ]; then

        echo "`date` 数据库7TBS_STG表空间异常,表空间大小是$cat3,超过参照值90,请及时处理!"  >> ./newreport.txt

else

        echo "TBS_STG表空间正常!"

fi


cat4=`cat cmd_sql_txt| awk '{print $5}' | sed -n 32p | sed 's/%//g' |sed 's/id,//g'`

cat5=`cat cmd_sql_txt| awk '{print $5}' | sed -n 35p | sed 's/%//g' |sed 's/id,//g'`

cat6=`cat cmd_sql_txt| awk '{print $5}' | sed -n 38p | sed 's/%//g' |sed 's/id,//g'`
if [ $cat4 -gt  90 ]; then

        echo "`date` 数据库7TS_TAB_ECMP表空间异常,表空间大小是$cat4,超过参照值90,请及时处理!" >> ./newreport.txt

else

        echo "TS_TAB_ECMP表空间正常!"

fi

if [ $cat5 -gt  90 ]; then

        echo "`date` 数据库7TBS_MOP表空间异常,表空间大小是$5,超过参照值90,请及时处理!"  >> ./newreport.txt

else

        echo "TBS_MOP表空间正常!"

fi

if [ $cat6 -gt  90 ]; then

        echo "`date` 数据库7TBS_STD表空间异常,表空间大小是$6,超过参照值90,请及时处理!"  >> ./newreport.txt

else

        echo "TBS_STD表空间正常!"

fi
cat7=`cat cmd_sql_txt| awk '{print $5}' | sed -n 46p | sed 's/%//g' |sed 's/id,//g'`

cat8=`cat cmd_sql_txt| awk '{print $5}' | sed -n 49p | sed 's/%//g' |sed 's/id,//g'`

cat9=`cat cmd_sql_txt| awk '{print $5}' | sed -n 52p | sed 's/%//g' |sed 's/id,//g'`

if [ $cat7  -gt  90 ]; then

       echo "`date` 数据库7TBS_OIP表空间异常,表空间大小是$cat7,超过标准值请90,请及时处理!" >> ./newreport.txt

else

        echo "TBS_OIP表空间正常!"

fi

if [ $cat8  -gt  90 ]; then

        echo "`date` 数据库7TBS_ITMON表空间异常,表空间大小是$cat8,超过标准值90,请及时处理!"  >> ./newreport.txt

else

        echo "TBS_ITMON表空间正常!"

fi

if [ $cat9  -gt  90 ]; then

        echo "`date` 数据库7TBS_RULE表空间异常,表空间大小是$cat9,超过标准值90,请及时处理!"  >> ./newreport.txt

else

        echo "TBS_RULE表空间正常!"

fi

cat10=`cat cmd_sql_txt| awk '{print $5}' | sed -n 60p | sed 's/%//g' |sed 's/id,//g'`

cat11=`cat cmd_sql_txt| awk '{print $5}' | sed -n 63p | sed 's/%//g' |sed 's/id,//g'`

cat12=`cat cmd_sql_txt| awk '{print $5}' | sed -n 66p | sed 's/%//g' |sed 's/id,//g'`


if [ $cat10 -gt  90 ]; then

        echo "`date`数据库7TBS_ALARM表空间异常,表空间大小是$cat10,超过参考值90,请及时处理!" >> ./newreport.txt

else

        echo "TBS_ALARM表空间正常!"

fi

if [ $cat11 -gt  90 ]; then

        echo "`date` 数据库7USERS表空间异常,表空间大小是$cat11,超过参考值90,请及时处理!"  >> ./newreport.txt

else

        echo "USERS表空间正常!"

fi

if [ $cat12 -gt  90 ]; then

        echo "`date` 数据库7TBS_UEAP表空间异常,表空间大小是$cat12,超过参考值90,请及时处理!"  >> ./newreport.txt

else

        echo "TBS_UEAP表空间正常!"

fi

cat13=`cat cmd_sql_txt| awk '{print $5}' | sed -n 74p | sed 's/%//g' |sed 's/id,//g'`

cat14=`cat cmd_sql_txt| awk '{print $5}' | sed -n 77p | sed 's/%//g' |sed 's/id,//g'`

cat15=`cat cmd_sql_txt| awk '{print $5}' | sed -n 80p | sed 's/%//g' |sed 's/id,//g'`


if [ $cat13 -gt  90 ]; then

        echo "`date` 数据库7TBS_GESS表空间异常,表空间大小是$cat13,超过参考值90,请及时处理!" >> ./newreport.txt

else

        echo "TBS_GESS表空间正常!"

fi

if [ $cat14 -gt  90 ]; then

        echo "`date` 数据库7TBS_SECU表空间异常,表空间大小是$cat14,超过参考值90,请及时处理!"  >> ./newreport.txt

else

        echo "TBS_SECU表空间正常!"

fi

if [ $cat15 -gt  90 ]; then

        echo "`date` 数据库7UNDOTBS1表空间异常,表空间大小是$cat15,超过参考值90,请及时处理!"  >> ./newreport.txt

else

        echo "UNDOTBS1表空间正常!"

fi


cat16=`cat cmd_sql_txt| awk '{print $5}' | sed -n 88p | sed 's/%//g' |sed 's/id,//g'`

cat17=`cat cmd_sql_txt| awk '{print $5}' | sed -n 91p | sed 's/%//g' |sed 's/id,//g'`

cat18=`cat cmd_sql_txt| awk '{print $5}' | sed -n 94p | sed 's/%//g' |sed 's/id,//g'`


if [ $cat16  -gt  90 ]; then

        echo "`date` 数据库7TBS_ISHARE表空间异常,表空间大小是$cat16,超过参考值90,请及时处理!" >> ./newreport.txt

else

        echo "TBS_ISHARE表空间正常!"

fi

if [ $cat17 -gt  90 ]; then

        echo "`date` 数据库7TBS_ETL表空间异常,表空间大小是$cat17,超过参考值90,请及时处理!"  >> ./newreport.txt

else

        echo "TBS_ETL表空间正常!"

fi

if [ $cat18  -gt  90 ]; then

        echo "`date` 数据库7UNDOTBS2表空间异常,表空间大小是$cat18,超过参考值90,请及时处理!"  >> ./newreport.txt

else

        echo "UNDOTBS2表空间正常!"

fi

cat19=`cat cmd_sql_txt| awk '{print $5}' | sed -n 102p | sed 's/%//g' |sed 's/id,//g'`

cat20=`cat cmd_sql_txt| awk '{print $5}' | sed -n 105p | sed 's/%//g' |sed 's/id,//g'`

cat21=`cat cmd_sql_txt| awk '{print $5}' | sed -n 108p | sed 's/%//g' |sed 's/id,//g'`

if [ $cat19  -gt  90 ]; then

        echo "`date` 数据库7INTF_ZG_INM表空间异常,表空间大小是$cat19,超过参考值90,请及时处理!" >> ./newreport.txt

else

        echo "INTF_ZG_INM表空间正常!"

fi

if [ $cat20  -gt  90 ]; then

        echo "`date` 数据库7TBS_DQP表空间异常,表空间大小是$cat20,超过参考值90,请及时处理!"  >> ./newreport.txt

else

        echo "TBS_DQP表空间正常!"

fi

if [ $cat21 -gt  90 ]; then

        echo "`date` 数据库7TBS_REPORT表空间异常,表空间大小是$cat21,超过参考值90,请及时处理!"  >> ./newreport.txt

else

        echo "TBS_REPORT表空间正常!"

fi


cat22=`cat cmd_sql_txt| awk '{print $5}' | sed -n 116p | sed 's/%//g' |sed 's/id,//g'`

cat23=`cat cmd_sql_txt| awk '{print $5}' | sed -n 119p | sed 's/%//g' |sed 's/id,//g'`

cat24=`cat cmd_sql_txt| awk '{print $5}' | sed -n 122p | sed 's/%//g' |sed 's/id,//g'`

cat25=`cat cmd_sql_txt| awk '{print $5}' | sed -n 130p | sed 's/%//g' |sed 's/id,//g'`

if [ $cat22 -gt  90 ]; then

        echo "`date` 数据库7INTF_FB_INM表空间异常,表空间大小是$cat22,超过参考值90,请及时处理!"  >> ./newreport.txt

else

        echo "INTF_FB_INM表空间正常!"

fi

if [ $cat23 -gt   90 ]; then

        echo "`date` 数据库7TBS_TOPO表空间异常,表空间大小是$cat23,超过参考值90,请及时处理!"  >> ./newreport.txt

else

        echo "TBS_TOPO表空间正常!"

fi

if [ $cat24 -gt  90 ]; then

        echo "`date` 数据库7TBS_DESKTOP表空间异常,表空间大小是$cat24,超过参考值90,请及时处理!"  >> ./newreport.txt

else

        echo "TBS_DESKTOP表空间正常!"

fi

if [ $cat25 -gt   90 ]; then

        echo "`date` 数据库7TBS_IMON表空间异常,表空间大小是$cat25,超过参考值90,请及时处理!"  >> ./newreport.txt

else

        echo "TBS_IMON表空间正常!"

fi

echo "数据库7解析表空间结束!!!"

#echo "数据库7服务器巡检结束!"  >> ./newreport.txt


(3)若要巡检应用进程可以用
ps -ef | grep "redis-server \*:8246" | wc -l,grep后面跟的是具体应用程序名称,下面附源码:
web10=`ps -ef | grep "redis-server \*:8246" | wc -l`

if [ $web10 -eq 1 ]; then

        echo "10服务器适配平台用redis应用进程正常!"

else

        echo "`date '+%Y年%m月%d日 %H:%M:%S'` 10服务器适配平台用redis应用进程异常,请及时处理!巡检命令是:ps -ef | grep "redis-server \*:8246"" >> ./newreport.txt

fi



1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:6022次
    • 积分:298
    • 等级:
    • 排名:千里之外
    • 原创:22篇
    • 转载:0篇
    • 译文:0篇
    • 评论:3条
    最新评论