前言

  这篇文章介绍了DBA每天在监控Oracle数据库方面的职责,讲述了如何通过shell脚本来完成这些重复的监控工作。本文首先回顾了一些DBA常用的Unix命令,以及解释了如何通过Unix Cron来定时执行DBA脚本。同时文章还介绍了8个重要的脚本来监控Oracle数据库:

   检查实例的可用性
 
   检查监听器的可用性

   检查alert日志文件中的错误信息
 
   在存放log文件的地方满以前清空旧的log文件

   分析table和index以获得更好的性能

   检查表空间的使用情况

   找出无效的对象

   监控用户和事务

   DBA需要的Unix基本知识

   基本的UNIX命令

  以下是一些常用的Unix命令:

   ps--显示进程
   grep--搜索文件中的某种文本模式
   mailx--读取或者发送mail
   cat--连接文件或者显示它们
   cut--选择显示的列
   awk--模式匹配语言
   df--显示剩余的磁盘空间

  以下是DBA如何使用这些命令的一些例子:

  显示服务器上的可用实例:

$ ps -ef | grep smon
oracle 21832 1 0 Feb 24 ? 19:05 ora_smon_oradb1
oracle 898 1 0 Feb 15 ? 0:00 ora_smon_oradb2
dliu 25199 19038 0 10:48:57 pts/6 0:00 grep smon
oracle 27798 1 0 05:43:54 ? 0:00 ora_smon_oradb3
oracle 28781 1 0 Mar 03 ? 0:01 ora_smon_oradb4、
  显示服务器上的可用监听器:

$ ps -ef | grep listener | grep -v grep
(译者注:grep命令应该加上-i参数,即grep -i listener,该参数的作用是忽略大小写,因为有些时候listener是大写的,这时就会看不到结果)
oracle 23879 1 0 Feb 24 ? 33:36 /8.1.7/bin/tnslsnr listener_db1 -inherit
oracle 27939 1 0 05:44:02 ? 0:00 /8.1.7/bin/tnslsnr listener_db2 -inherit
oracle 23536 1 0 Feb 12 ? 4:19 /8.1.7/bin/tnslsnr listener_db3 -inherit
oracle 28891 1 0 Mar 03 ? 0:01 /8.1.7/bin/tnslsnr listener_db4 -inherit
  查看Oracle存档目录的文件系统使用情况

$ df -k | grep oraarch
/dev/vx/dsk/proddg/oraarch 71123968 4754872 65850768 7% /u09/oraarch
  统计alter.log文件中的行数:

$ cat alert.log | wc -l
2984

  列出alert.log文件中的全部Oracle错误信息:

$ grep ORA- alert.log
ORA-00600: internal error code, arguments: [kcrrrfswda.1], [], [], [], [], []
ORA-00600: internal error code, arguments: [1881], [25860496], [25857716], []
   CRONTAB基本

  一个crontab文件中包含有六个字段:

  分钟 0-59

  小时 0-23

  月中的第几天 1-31

  月份 1 - 12

  星期几 0 - 6, with 0 = Sunday

   Unix命令或者Shell脚本

  要编辑一个crontab文件,输入:

  Crontab -e

  要查看一个crontab文件,输入:

Crontab -l
0 4 * * 5 /dba/admin/analyze_table.ksh
30 3 * * 3,6 /dba/admin/hotbackup.ksh /dev/null 2>&1

  在上面的例子中,第一行显示了一个分析表的脚本在每个星期5的4:00am运行。第二行显示了一个执行热备份的脚本在每个周三和周六的3:00a.m.运行。

  监控数据库的常用Shell脚本

  以下提供的8个shell脚本覆盖了DBA每日监控工作的90%,你可能还需要修改UNIX的环境变量。

  检查Oracle实例的可用性

  oratab文件中列出了服务器上的所有数据库

$ cat /var/opt/oracle/oratab
###################################################################
## /var/opt/oracle/oratab ##
###################################################################
oradb1:/u01/app/oracle/product/8.1.7:Y
oradb2:/u01/app/oracle/product/8.1.7:Y
oradb3:/u01/app/oracle/product/8.1.7:N
oradb4:/u01/app/oracle/product/8.1.7:Y
  以下的脚本检查oratab文件中列出的所有数据库,并且找出该数据库的状态(启动还是关闭)

###################################################################
## ckinstance.ksh ## ###################################################################
ORATAB=/var/opt/oracle/oratab
echo "`date` "
echo "Oracle Database(s) Status `hostname` :\n"

db=`egrep -i ":Y|:N" $ORATAB | cut -d":" -f1 | grep -v "\#" | grep -v "\*"`
pslist="`ps -ef | grep pmon`"
for i in $db ; do
echo "$pslist" | grep "ora_pmon_$i" > /dev/null 2>$1
if (( $? )); then
echo "Oracle Instance - $i: Down"
else
echo "Oracle Instance - $i: Up"
fi
done

  使用以下的命令来确认该脚本是可以执行的:

$ chmod 744 ckinstance.ksh
$ ls -l ckinstance.ksh
-rwxr--r-- 1 oracle dba 657 Mar 5 22:59 ckinstance.ksh*
  以下是实例可用性的报表:

$ ckinstance.ksh
Mon Mar 4 10:44:12 PST 2002 
Oracle Database(s) Status for DBHOST server:
Oracle Instance - oradb1: Up
Oracle Instance - oradb2: Up
Oracle Instance - oradb3: Down
Oracle Instance - oradb4: Up 
  检查Oracle监听器的可用性

  以下有一个类似的脚本检查Oracle监听器。如果监听器停了,该脚本将会重新启动监听器:

#######################################################################
## cklsnr.sh ##
#######################################################################
#!/bin/ksh
DBALIST="primary.dba@company.com,another.dba@company.com";export DBALIST
cd /var/opt/oracle
rm -f lsnr.exist 
ps -ef | grep mylsnr | grep -v grep > lsnr.exist
if [ -s lsnr.exist ]
then
echo 
else
echo "Alert" | mailx -s "Listener 'mylsnr' on `hostname` is down" $DBALIST 
TNS_ADMIN=/var/opt/oracle; export TNS_ADMIN
ORACLE_SID=db1; export ORACLE_SID 
ORAENV_ASK=NO; export ORAENV_ASK
PATH=$PATH:/bin:/usr/local/bin; export PATH
. oraenv
LD_LIBRARY_PATH=${ORACLE_HOME}/lib;export LD_LIBRARY_PATH
lsnrctl start mylsnr
fi

  检查Alert日志(ORA-XXXXX)

  每个脚本所使用的一些环境变量可以放到一个profile中:

#######################################################################
## oracle.profile ## 
#######################################################################
EDITOR=vi;export EDITOR ORACLE_BASE=/u01/app/oracle; export 
ORACLE_BASE ORACLE_HOME=$ORACLE_BASE/product/8.1.7; export 
ORACLE_HOME LD_LIBRARY_PATH=$ORACLE_HOME/lib; export 
LD_LIBRARY_PATH TNS_ADMIN=/var/opt/oracle;export 
TNS_ADMIN NLS_LANG=american; export 
NLS_LANG NLS_DATE_FORMAT='Mon DD YYYY HH24:MI:SS'; export 
NLS_DATE_FORMAT ORATAB=/var/opt/oracle/oratab;export 
ORATAB PATH=$PATH:$ORACLE_HOME:$ORACLE_HOME/bin:/usr/ccs/bin:/bin:/usr/bin:/usr/sbin:/
sbin:/usr/openwin/bin:/opt/bin:.; export 
PATH DBALIST="primary.dba@company.com,another.dba@company.com";export 
DBALIST 
  以下的脚本首先调用oracle.profile来设置全部的环境变量。如果发现任何的Oracle错误,该脚本还会给DBA发送一个警告的email。

####################################################################
## ckalertlog.sh ##
####################################################################
#!/bin/ksh
.. /etc/oracle.profile
for SID in `cat $ORACLE_HOME/sidlist`
do
cd $ORACLE_BASE/admin/$SID/bdump
if [ -f alert_${SID}.log ]
then
mv alert_${SID}.log alert_work.log
touch alert_${SID}.log
cat alert_work.log >> alert_${SID}.hist
grep ORA- alert_work.log > alert.err
fi
if [ `cat alert.err|wc -l` -gt 0 ]
then
mailx -s "${SID} ORACLE ALERT ERRORS" $DBALIST < alert.err
fi
rm -f alert.err
rm -f alert_work.log
done

  清除旧的归档文件

  以下的脚本将会在log文件达到90%容量的时候清空旧的归档文件:

$ df -k | grep arch
Filesystem kbytes used avail capacity Mounted on
/dev/vx/dsk/proddg/archive 71123968 30210248 40594232 43% /u08/archive

#######################################################################
## clean_arch.ksh ##
#######################################################################
#!/bin/ksh
df -k | grep arch > dfk.result
archive_filesystem=`awk -F" " '{ print $6 }' dfk.result`
archive

监控Oracle数据库的常用shell脚本 ORACLE教程 教程作者:佚名 教程来源:不详 教程栏目:ORACLE教程相关推荐

  1. 监控Oracle数据库的常用shell脚本

    文章介绍了DBA每天在监控Oracle数据库方面的职责,讲述了如何通过shell脚本来完成这些重复的监控工作.本文首先回顾了一些DBA常用的Unix命令,以及解释了如何通过Unix Cron来定时执行 ...

  2. oracle rman 实例,Oracle数据库rman常用命令的使用示例

    Oracle数据库rman常用命令的使用是本文我们主要要介绍的内容,接下来我们就开始介绍这一部分内容,希望能够对您有些收获! 连接到rman 1.连接到目标数据库(不使用恢复目录) [oracle@l ...

  3. Oracle数据库SqlLoad常用技巧总结word版

    <Oracle数据库SqlLoad常用技巧总结word版> 下载地址: 网盘下载 转载于:https://www.cnblogs.com/long12365/p/9731207.html

  4. 入侵oracle数据库时常用的操作命令整理

    首 页  系统问题系  图像网站系  办公应用系  编程开发系  数字艺术系  学院图酷  [ 视频中心  看精美图片  专题集锦  学院周刊 ] 操作系统 | 工具软件 | 病毒安全 | 多媒体 | ...

  5. Oracle数据库基本常用命令

    Oracle数据库基本常用命令 1.得到数据库名和创建日期 SELECT name, created, log_mode, open_mode FROM v$database; 2.ORACLE数据库 ...

  6. Oracle数据库的常用命令(创建用户、用户授权、用户登录、表空间、备份还原 )

    Oracle数据库的常用命令 Oracle数据库的常用命令 一.创建用户及授权相关命令 二.用户登录相关命令 三.表空间相关命令 四.备份的还原 Oracle数据库的常用命令 一.创建用户及授权相关命 ...

  7. shell编程系列22--shell操作数据库实战之shell脚本与MySQL数据库交互(增删改查)

    shell编程系列22--shell操作数据库实战之shell脚本与MySQL数据库交互(增删改查)Shell脚本与MySQL数据库交互(增删改查)# 环境准备:安装mariadb 数据库 [root ...

  8. Linux 常用Shell脚本,后端开发必备

    Linux 常用Shell脚本,后端开发必备 文章目录 Linux 常用Shell脚本,后端开发必备 1 用户猜数字 2 查看有多少远程的 IP 在连接本机 3 helloworld 4 打印 tom ...

  9. 大数据常用shell脚本之fl脚本

    一.前置准备 CentOS7.jdk1.8.zookeeper-3.5.7.kafka-2.4.1.flume-1.9.0 想要完成本期视频中所有操作,需要以下准备: Flume安装及基本使用-视频教 ...

最新文章

  1. 测试晶面间距软件_丽江导电橡胶电阻率测试仪生产商
  2. 以太坊钱包开发系列 - 创建钱包账号
  3. 【BZOJ3512】DZY Loves Math IV(杜教筛)
  4. 好程序员大数据点睛:关于HDFS的二三事
  5. 面试题:常用的http状态码
  6. 二倍图css,css二倍图的使用
  7. ASP.NET Core 新建项目 - macOS 环境 - ASP.NET Core 基础教程 - 简单教程,简单编程
  8. matlab中mod(10 3),matlab的rem()和mod()函数
  9. JAVA实现二叉树带权路径长度和_哈夫曼树的构建与最小带权路径长度
  10. vs2019键盘钩子_江门网站建设:针对Web开发人员的12个最佳Visual Studio代码扩展
  11. 最新全套码支付源码/QQ+微信+支付宝三网免挂支付系统源码
  12. cdr添加节点快捷键_cdr快捷键大全_cdr教程【图文】
  13. android手机自带浏览器无法识别apk文件
  14. 简单调用百度api实现车型识别
  15. 图灵C/C++图书阅读路线图
  16. 华科校园网内ubuntu12.04用锐捷客户端联网流程详解
  17. 【错误记录】Android 应用安全检测漏洞修复 ( StrandHogg 漏洞 | 设置 Activity 组件 android:taskAffinity=““ )
  18. 电路板上的插头怎么拔下来_如何在电路板上完美的取下多针脚电子元件?求高手指教方法技巧?...
  19. asp.net网站修改aspx.cs文件后如何不替换网站就生效
  20. 开发笔记——vue echarts图表在切换页面大小时缩成一团

热门文章

  1. 浅谈Hbase在用户画像上的应用
  2. linux卸载已装载的文件系统的命令,linux如何使用umount命令强制卸载文件系统
  3. 用java编写赛马_老王赛马 (Java代码)
  4. 1.Excel查询重复数据
  5. 豆瓣自动注册、回贴脚本 powered by Python Selenium
  6. 纪念我的iriver T7
  7. 使用JWT替换默认令牌token
  8. STM32 FOC BLDC与PMSM的区别
  9. QML官方系列教程——Use Case - Animations In QML
  10. 一文学会使用 CSS 中的 min(), max(), clamp() 以及它们的使用场景