当前位置: 首页 > 图文教程 > 数据库 > Oracle > 检测Oracle的可用性和表空间容量

Oracle
Oracle数据库技术(32)
Oracle数据库技术(33)
Oracle数据库技术(34)
Oracle数据库技术(35)
Oracle数据库技术(36)
Oracle数据安全面面观
Oracle数据操作和控制语言详解
Oracle数据库数据对象分析
解析Oracle 8i/9i的计划稳定性
使用Oracle实现实时通信
Oracle数据库中索引的维护
Oracle数据库游标使用大全
Oracle9i中监视索引的使用
在Oracle9i中使用多种Block Size
监控Oracle数据库的常用shell脚本
Performance Improvement Tips for Oracle on UNIX
Raw Partitions and Windows NT
How to use OS commands to diagnose Database Performance issues?
Raw Devices and Oracle - 20 Common Questions and Answers
Monitor Oracle Resource Consumption in UNIX

检测Oracle的可用性和表空间容量


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-30   浏览: 61 ::
收藏到网摘: n/a

很多人也许并不了解,检测Oracle的可用性所需要的命令比简单的ping或者ps -ef | grep 等Oracle的命令要多得多。有观点认为它需要一个使用SQL*Net 来验证监听器已经开启并运行的测试访问Oracle——这是用户经常用到的访问。通过实际地登录到实际环境中,你可以确认这个实例环境可以接受登录的,如果你只是做了以上的检测的话,你如何才能知道是否登录没有被接受,只是因为需要等待文档日志?

除了Oracle的激活和可用性之外,我们还需要进行检测以确保它可以用,这样我们还可以检测表空间的容量。

检测的脚本:

◆假设所有的Oracle环境都已经搭建起来了

◆假设所有的扩展都已经达到了最大的限度

◆假设左右的表空间都缺乏运行的空闲空间

下面的脚本可以在你想要的任何时候通过crontab 来中断。另外,如果上面的例外情况出现了的话,您还可以就这个脚本写信或者电子邮件给支持人员获得帮助。

如果您有什么其他的测试,这个脚本可以让您轻松地进行修改以加以利用。我使用这个Monitororcl 脚本作为模板并且在末尾添加了功能。

按crontab来调用query_oracle_instances.sh 脚本:

#!/bin/ksh
. /u01/home/oracle/.profile
/u01/app/oracle/admin/monitororcl
'cat /u01/app/oracle/admin/Get_Oracle_Instance_List'
exit

 Get_Oracle_Instance_List 脚本如下:  

instance_name1 tnsname1 sys_password_for_this_instance
instance_name2 tnsname2 sys_password_for_this_instance
instance_name3 tnsname3 sys_password_for_this_instance

下面是MONITORORCL脚本:  

  #!/bin/ksh
  #script : Rick Stehno
  # script will monitor to see if Oracle is up
  while [ "$1" != "" ]
  do
  ORACLE_INSTANCE=$1
  ORACLE_TNS=$2
  USR_ID=sys
  USR_PASS=$3
  # echo "Instance: [$ORACLE_INSTANCE]"
  # echo "TNS [$ORACLE_TNS]"
  # echo "PASS: [$USR_PASS]"
  LOGFIL=/u01/app/oracle/admin/monitordev1.out
  [email protected],userid2,[email protected]
  #
  # 检测关键的段没有达到最大限度
  sqlplus -s <$LOGFIL 2>/dev/null
  $USR_ID/$USR_PASS@$ORACLE_TNS
  set pages 0
  select distinct 'YES' from dba_segments
  where extents >= (max_extents-5) and segment_name not like '1.%';
  EOF1
  grep -i '^ORA-' $LOGFIL >/dev/null
  if [ $? -eq 0 ]
  then
  echo "$0 failed: check $ORACLE_INSTANCE for problems" | /bin/mailx -
s "${ORACLE_INSTANCE} : Script failed" $NOTIFY_LIST
  exit 1
  fi
  MAXEXTENTS_REACHED=`awk '{ print $1 }' $LOGFIL`
  if [ "$MAXEXTENTS_REACHED" = "YES" ]
  then
  echo "$0 failed: $ORACLE_INSTANCE max extents reached" | /bin/mailx -
s "${ORACLE_INSTANCE} : max extents reached" $NOTIFY_LIST
  exit 1
  fi
  #
  # 检测是否能分配下一个段
  sqlplus -s <$LOGFIL 2>/dev/null
  $USR_ID/$USR_PASS@$ORACLE_TNS
  set pages 0
  select distinct 'YES' from dba_segments ds
  where next_extent >
  (select max(bytes) from dba_free_space
  where tablespace_name = ds.tablespace_name);
  EOF2
  grep -i '^ORA-' $LOGFIL >/dev/null
  if [ $? -eq 0 ]
  then
  echo "$0 failed: check $ORACLE_INSTANCE for problems" | /bin/mailx -
s "${ORACLE_INSTANCE} : Script failed" $NOTIFY_LIST
  exit 1
  fi
  POSSIBLE_NEXTEXT_FAIL=`awk '{print $1 }' $LOGFIL`
  if [ "$POSSIBLE_NEXTEXT_FAIL" = "YES" ]
  then
  echo "$0 failed: $ORACLE_INSTANCE cannot extend segment" | /bin/mailx -
s "${ORACLE_INSTANCE} : max extents reached" $NOTIFY_LIST
  exit 1
  fi
  shift 3
  # echo "shift done"
  done
  echo "Successful completion of $0" `date`
  exit 0