账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式

Oracle数据库管理常用的监控脚本------极大的简化运维工作

推荐

江山杯中晃 所属圈子:PS技巧 读给你听

文章标签 Oracle数据库 工作 常用 数据库 极大 监控 简化 管理 脚本 运维 专栏分类运维 阅读数13225 评论数0 点赞数5 收藏数0

导读:Oracle数据库管理常用的监控脚本------极大的简化运维工作2017-11-151218简介: 最近几天都研究SHELL脚本,为了方便对..

Oracle数据库管理常用的监控脚本------极大的简化运维工作

简介:

 

  最近几天都研究SHELL脚本,为了方便对公司的Oracle运维,简化管理,学习一些SHELL脚本是非常有必要的,通过书本和网上的一些资料,整理出了一些比较精典的脚本,都是经过清自测试可行的,放上来共大家分享。

 


  1. # 监控Oracle监听状态(chk_lsnr_stat.sh) 
  2. # ======================================================================================
  3. # 监控Oracle监听器状态,发现状态异常启动监听,并发送邮件通知管理员,如果启动监听失败,发送邮件
  4. # 通知管理员。 
  5. # ======================================================================================
  6.  
  7. #! /bin/bash 
  8.  
  9. . /home/oracle/.bash_profile 
  10.  
  11. tempfile=$ORACLE_BASE/admin/$ORACLE_SID/tempfile.lis 
  12.  
  13. su - oracle -c "lsnrctl status" > /dev/null 
  14.  
  15. if [ $? != '0' ]; then 
  16.    echo "" >> $tempfile 
  17.  
  18.    echo "======================================================" >> $tempfile 
  19.  
  20.    echo "`date +%D-%T`" >> $tempfile 
  21.  
  22.    su - oracle -c "lsnrctl start" >> $tempfile 
  23.  
  24.    if [ $? = '0' ]; then 
  25.     
  26.       cat $tempfile | mail dba@163.com -s "The Listener Shutdown,and Restarted Success" 
  27.   
  28.    else 
  29.  
  30.      cat $tempfile | mail dba@163.com -s "The Listener Shutdown,and Restarted Failed" 
  31.  
  32.    fi 
  33.  
  34. fi 
  35.  
  36.  
  37.  
  38. ---------------------------------------------------------------------------------------- 
  39.  
  40.  
  41. # 监控Oracle实例状态(chk_inst_stat.sh) 
  42. # ===================================================================================== 
  43. # 监控Oracle实例是否打开,实例打开时,数据库是否可用,当实例关闭,数据库不可用时发送告警邮件 
  44. # 通知管理员(判断时除开+ASM这个特殊实例) 
  45. # ===================================================================================== 
  46.  
  47. #! /bin/bash 
  48.  
  49. ORATAB=/etc/oratab 
  50.  
  51. tempfile=/home/oracle/tempfile.lis 
  52.  
  53. db=`cat $ORATAB |egrep -i ":Y|:N"|cut -d ":" -f 1|grep -v "^+"` 
  54.  
  55. pslist="`ps -ef | grep pmon|grep -v grep`"  
  56.  
  57. mark=n 
  58.  
  59. dbstat=`su - oracle << EOF 
  60.  
  61.     sqlplus -s /nolog 
  62.  
  63.     conn / as sysdba 
  64.  
  65.     set feedback off heading off pagesize 0 
  66.  
  67.     select status from v\$instance; 
  68.  
  69.     exit 
  70.  
  71. EOF` 
  72.  
  73. for db_name in $db; do 
  74.   
  75.        echo "$pslist" | grep "ora_pmon_$db_name" > /dev/null 2>&1 
  76.         
  77.     if [ $? = "0" ]; then  
  78.         
  79.        if [ $dbstat != "OPEN" ];then 
  80.  
  81.           mark=y 
  82.            
  83.           break 
  84.     
  85.        fi 
  86.         
  87.     else 
  88.      
  89.        mark=y 
  90.         
  91.        break 
  92.         
  93.     fi  
  94.      
  95. done 
  96.  
  97. if [ $mark != 'n' ];then 
  98.  
  99.    echo '>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>' >> $tempfile 
  100.    echo "SERVER: $HOSTNAME" >> $tempfile 
  101.    echo "`date +%D-%T`"  >> $tempfile 
  102.    echo 'WARN!!! Oracle Database Unavailable' >> $tempfile 
  103.    echo "Maybe The Following Reasons: The Instance or Database is not OPEN" >>$tempfile 
  104.     
  105.    echo | mail -s "Oracle Database Abnormal" dba@163.com < $tempfile 
  106.    rm -f $tempfile 
  107.     
  108. fi 
  109.  
  110. ------------------------------------------------------------------------------------------ 
  111.  
  112.  
  113. # 监控归档目录空间(chk_arc_space.sh) 
  114. #===================================================================================== 
  115. # 将日志目录空间控制在200M,当容量大于200M时,将最旧日志打包复制到其它目录,并删除之 
  116. # 直到日志目录空间容量小于200M为止。 
  117. #===================================================================================== 
  118.  
  119. #! /bin/bash 
  120.  
  121. ARC_DIR=/disk01/tbs03 
  122.  
  123. BAK_DIR=/opt/arcbackup 
  124.  
  125. limit=200 
  126.  
  127. capacity() 
  128.  
  129. { 
  130.  
  131.   du -sh $ARC_DIR|awk -F " " '{print $1}'|tr -d M 
  132.  
  133. } 
  134.  
  135.  
  136. oldlog() 
  137.  
  138. { 
  139.  
  140.   ls -l|sort -k6|sed '1d'|head -1|awk -F " " '{print $9}' 
  141.    
  142. } 
  143.  
  144. cd $ARC_DIR 
  145.  
  146. if [ `capacity` -gt $limit ]; then 
  147.  
  148.      echo ""|mail -s "The Archivelog Directory is Over Than $limit"\ 
  149.  dba@163.com 
  150.  
  151. fi 
  152.  
  153. while [ `capacity` -gt $limit ]  
  154.  
  155. do   
  156.      
  157.     file=`oldlog` 
  158.      
  159.     tar -czf $file.`date +%Y%m%d%H%M`.tar.gz $file 
  160.      
  161.     cp $file.`date +%Y%m%d%H%M`.tar.gz $BAK_DIR/ 
  162.      
  163.     rm -rf $ARC_DIR/$file $ARC_DIR/$file.`date +%Y%m%d%H%M`.tar.gz 
  164.      
  165. done 
  166.  
  167.  
  168.  
  169. # 监控警告文件错误信息(chk_alert_info.sh) 
  170. #================================================================================ 
  171. # 固定时间间隔内检查alert_$ORACLE_SID.log文件中是否包含ORA-开头的错误信息,如果存在 
  172. # 则将其以邮件的形式通知管理员。 
  173. #================================================================================ 
  174.  
  175. #! /bin/bash 
  176.  
  177. . /home/oracle/.bash_profile 
  178.  
  179. cd $ORACLE_BASE/admin/$ORACLE_SID/bdump/ 
  180.  
  181. mv alert_$ORACLE_SID.log alert_temp.log 
  182.  
  183. touch alert_$ORACLE_SID.log 
  184.  
  185. cat alert_temp.log >> alert.$ORACLE_SID.hist 
  186.  
  187. grep ORA- alert_temp.log > alert.err 
  188.  
  189. if [ `cat alert.err|wc -l` -gt 0 ];then 
  190.  
  191.      mail -s "ORACLE ALERT ERROR" dba@163.com < alert.err 
  192.       
  193. fi 
  194.  
  195. rm -rf alert.err 
  196.  
  197. rm -rf alert_temp.log 
  198.  
  199.  
  200.  
  201. # 监控磁盘空间利用率(chk_disk_space) 
  202. # ==================================================================== 
  203. # 判断/dev开头的磁盘或分区空间利用率,当磁盘空间利用率超过90%则发送邮件通知 
  204. # 管理员 
  205. # ==================================================================== 
  206.  
  207. #! /bin/bash 
  208.  
  209. limit=90% 
  210.  
  211. tempfile=chk_disk_space.tmp 
  212.  
  213. mark=n 
  214.  
  215. diskusage() 
  216.  
  217. { 
  218.  
  219.    df -h|grep -v Filesystem|sed '/\/dev\/mapper/N;s/\n//'|grep "^/dev"|awk -F " " '{print $5}' 
  220.     
  221. } 
  222.  
  223. for percent in `diskusage` 
  224.  
  225. do 
  226.  
  227.    if [[ $percent > $limit]];then 
  228.     
  229.        mark=y 
  230.         
  231.        break 
  232.         
  233.    fi 
  234.     
  235. done 
  236.  
  237. if [ $mark != 'n' ];then 
  238.  
  239.     df -h > $tempfile 
  240.      
  241.     mail -s "Disk Usage Over than $limit on `hostname`" < $tempfile 
  242.  
  243.     rm -rf $tempfile     
  244. fi 
  245.  
  246.  
  247.  
  248.  
  249. # 监控表空间空闲表空间(chk_tbs_free.sh) 
  250. #================================================================================== 
  251. # 监控空闲表空间,当空闲表空间低于20%时,发送邮件通知管理员 
  252. #================================================================================== 
  253.  
  254. #! /bin/bash 
  255.  
  256. su - oracle > /dev/null << EOF 
  257. sqlplus -s /nolog 
  258. conn / as sysdba 
  259. set feedback off  
  260. set heading off 
  261. set verify off 
  262. set pagesize 0 
  263. set linesize 200 
  264.  
  265. spool tbsfree.alert 
  266.  
  267. select t.tablespace_name,f.free_space/t.total_space from  
  268. (select tablespace_name,sum(bytes) total_space from  
  269. dba_data_files group by tablespace_name) t, 
  270. (select tablespace_name,sum(bytes) free_space from  
  271. dba_free_space group by tablespace_name) f  
  272. where t.tablespace_name=f.tablespace_name and f.free_space/t.total_space < 0.20 
  273. / 
  274.  
  275. spool off 
  276.  
  277. exit 
  278.  
  279. EOF 
  280.  
  281. if [ `cat tbsfree.alert|wc -l` -gt 0 ];then 
  282.  
  283.       cat tbsfree.alert|mail -s "No Free Space in Oracle db" dba@163.com 
  284.        
  285.       rm -rf tbsfree.alert 
  286.        
  287. fi 
  288.  
  289.  
  290. # 全库冷备份(full_cold_backup.sh) 
  291. # ================================================================================= 
  292. # 数据库打开时,自动生成备份脚本。然后关闭数据库,对控制文件,数据文件,重做日志文件, 
  293. # 初始化参数文件及口令文件做冷备,完成后打开数据库。 
  294. # ================================================================================= 
  295.  
  296. #! /bin/bash 
  297.  
  298. . /home/oracle/.bash_profile 
  299.  
  300. backup_dir=/disk01/backup/coldbak 
  301.  
  302. log_file=/disk01/backup/coldbak/cold_backup_$ORACLE_SID.log 
  303.  
  304. echo 'Begin Cold Backup>>>>>>>>>>>>>>>>'  >> $log_file 
  305.  
  306. date >> $log_file 
  307.  
  308. su - oracle > /dev/null << EOF 
  309.  
  310. sqlplus -s /nolog 
  311.  
  312. conn / as sysdba 
  313.  
  314. set feedback off heading off pagesize 0 line 1000 
  315.  
  316. spool file_copy_$ORACLE_SID.sh 
  317.  
  318. select 'cp ' || name || ' $backup_dir/' from v$controlfile; 
  319.  
  320. select 'cp' || file_name || ' $backup_dir/' from dba_data_files; 
  321.  
  322. select 'cp' || member || ' $backup_dir/' from v$logfile; 
  323.  
  324. spool off 
  325.  
  326. shutdown immediate 
  327.  
  328. ! bash file_copy_$ORACLE_SID.sh 
  329.  
  330. startup 
  331.  
  332. exit 
  333.  
  334. EOF 
  335.  
  336. if [ -e $ORACLE_HOME/dbs/init$ORACLE_SID.ora ];then 
  337.  
  338.      cp $ORACLE_HOME/dbs/init$ORACLE_SID.ora $backup_dir/ 
  339.       
  340. fi 
  341.  
  342. if [ -e $ORACLE_HOME/dbs/spfile$ORACLE_SID.ora ];then 
  343.  
  344.      cp $ORACLE_HOME/dbs/spfile$ORACLE_SID.ora $backup_dir/ 
  345.       
  346. fi 
  347.  
  348. if [ -e $ORACLE_HOME/dbs/orapw$ORACLE_SID ];then 
  349.  
  350.      cp $ORACLE_HOME/dbs/orapw$ORACLE_SID $backup_dir/ 
  351.       
  352. fi 
  353.  
  354.  
  355. echo 'Cold Backup Finished>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>' >>$log_file 
  356.  
  357. date >> $log_file 
  358.  
  359.  
  360. # RMAN备份SHELL脚本(rman_backup.sh) 
  361. #=========================================================================== 
  362. # 实现指定级别的增量备份,由用户传入备份级别参数,如果不指参数则进行0级备份 
  363. #=========================================================================== 
  364.  
  365. #! /bin/bash 
  366.  
  367. . /home/oracle/.bash_profile 
  368.  
  369. if [ $1 ];then 
  370.  
  371.    backup_level=$1 
  372.     
  373. else 
  374.  
  375.    backup_level=0 
  376.     
  377. fi 
  378.  
  379. backup_user=sys 
  380.  
  381. backup_user_pw=oracle 
  382.  
  383. #catalog_user=rman 
  384.  
  385. #catalog_user_pw=rman 
  386.  
  387. log_file=/home/oracle/rman_backup.log 
  388.  
  389. echo 'Begining rman backup  >>>>>>>>>>>>>>>>>>>>>>>>>>'  >> $log_file 
  390.  
  391. date >> $log_file 
  392.  
  393. su - oracle >> $log_file << EOF 
  394.  
  395. rman target $backup_user/$backup_user_pw  
  396.      # catalog $catalog_user/$catalog_user_pw 
  397.       
  398. backup incremental level = $backup_level database; 
  399.  
  400. quit; 
  401.  
  402. EOF 
  403.  
  404. echo 'rman backup finished  >>>>>>>>>>>>>>>>>>>>>>>>>'  >> $log_file 
  405.  
  406. date >> $log_file 
  407.  
  408.  
  409.  
  410. # 逻辑备份SHELL脚本(schema_exp.sh) 
  411. #========================================================================= 
  412. # EXP对数据库schema对象进行备份,用户可以将需要备份的用户名做为参数传入SHELL脚本 
  413. #========================================================================= 
  414.  
  415. #! /bin/bash 
  416.  
  417. BAK_DIR=/disk01/backup/logical_bak/ 
  418.  
  419. log_file=/disk01/backup/logical_bak/user_full_bak.log 
  420.  
  421. exp_par="userid=system/oracle buffer=10485760 owner=$1" 
  422.  
  423. if [ $2 ];then 
  424.  
  425.     exp_par="$exp_par file=$2" 
  426.      
  427. else 
  428.  
  429.     exp_par="$exp_par file="$BAK_DIR/$1_`date +%Y%m%d%H%M`.dmp"" 
  430.      
  431. fi 
  432.  
  433. echo "Begining User $1 Export ---------------------" >> $log_file 
  434.  
  435. echo "Export with following parameters: $exp_par" >> $log_file 
  436.  
  437. date >> $log_file 
  438.  
  439. su - oracle -c "exp $exp_par" >> $log_file 2>&1 
  440.  
  441. echo "Backup Finished ---------------------" >> $log_file 
  442.  
  443. date >> $log_file 

更多文章请关注《万象专栏》

转载请注明出处:https://www.wanxiangsucai.com/read/cv107202

  • 打赏
  • 5 赞
  • 收藏
  • 评论
  • 举报
发布评论
全部评论(0)

相关文章