网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > Oracle教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
本月文章推荐
.Oracle迁移SQL Server的陷阱.
.简析Oracle Online Redo LogFile.
.最近研究双机和ops,想不通个问题.
.查找 Oracle 用户锁的DLL SQL.
.全面理解虚拟邮件域.
.在Oracle中实现搜索分页查询.
.异构服务提高Oracle连接异种数据.
.用自动ftp提高工作效率.
.如何利用QCTO开发可重复使用的测.
.Linux启动过程全接触(1).
.rman备份,未用catalog,控制文件丢.
.Redhat 8.0 下Gaim0.58 for QQ、.
.Oracle job 管理.
.安装文档ORACLE9i for sun solar.
.checkpoint小议.
.Red Hat Linux 7.1使用手册(上).
.让我简单介绍一下ORACLE SEQUENCE.
.oracle架构的基础知识(入门级).
.谈谈在ORACLE下开发JAVA程序的问.
.Oracle9i初始化参数中文说明3.

让我们一起学做业余DBA!

发表日期:2008-2-9



  前言
  这篇文章介绍了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.errwc -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<
上一篇:通过SELECT语句实现两个记录集的比较 人气:878
下一篇:Oracle 10G 最佳20位新特性:闪回查询 人气:475
浏览全部Oracle教程的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐