千家信息网

如何分析两个主机和Oracle数据库巡检脚本

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,如何分析两个主机和Oracle数据库巡检脚本,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。分享一个之前我用来巡检主机和Oracle的脚本
千家信息网最后更新 2026年11月02日如何分析两个主机和Oracle数据库巡检脚本

如何分析两个主机和Oracle数据库巡检脚本,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

分享一个之前我用来巡检主机和Oracle的脚本,不过输出结果不是很美观,内容还是可以的...

主机巡检脚本:OSWatcher.sh

ps:这里的第10项,普通用户检查/var/log/messages很可能没有读权限,如有需要巡检此系统日志,建议切换root用户执行此脚本。

#!/bin/bash echo "" ###################################################################### #设置命令的路径,防止命令找不到路径 PATH=$PATH:/usr/sbin/ export PATH echo "the PATH is:$PATH" ###################################################################### PLATFORM=`/bin/uname` # ###################################################################### # Create log subdirectories if they don't exist ###################################################################### if [ ! -d archive ]; then  mkdir archive fi  case $PLATFORM in  Linux)  DF='df -h'  MEMINFO='free -m'  MPSTAT='mpstat 1 3'  TOP='eval top -b -n 1 | head -50'  VMSTAT='vmstat 1 3'  IOSTAT='iostat -d -x -k 1 5'  PSELF='ps -elf'  BOOTLOG='tail -500 /var/log/boot.log'  SYSLOG='dmesg'  MESSAGE='tail -500 /var/log/messages'  ;; esac hostn=`hostname` hour=`date +'%m.%d.%y.%H00.dat'` echo "`date` Collect">archive/${hostn}_$hour ###################################################################### # Test for discovery of os utilities. Notify if not found. ###################################################################### echo "" echo "Starting Data Collection..." echo "" case $PLATFORM in  Linux)  $DF > /dev/null 2>&1  if [ $? = 0 ]; then  echo "DF found on your system."  echo "--1.DF==========================">>archive/${hostn}_$hour  $DF>>archive/${hostn}_$hour  MEMFOUND=1  else  echo "Warning... DF not found on your system."  MEMFOUND=0  fi    $MEMINFO > /dev/null 2>&1  if [ $? = 0 ]; then  echo "meminfo found on your system."  echo "--2.MEMINFO==========================">>archive/${hostn}_$hour  $MEMINFO>>archive/${hostn}_$hour  MEMFOUND=1  else  echo "Warning... /proc/meminfo not found on your system."  MEMFOUND=0  fi    $MPSTAT > /dev/null 2>&1  if [ $? = 0 ]; then  echo "MPSTAT found on your system."  echo "--3.MPSTAT==========================">>archive/${hostn}_$hour  $MPSTAT>>archive/${hostn}_$hour  MEMFOUND=1  else  echo "Warning... MPSTAT not found on your system."  MEMFOUND=0  fi    $TOP > /dev/null 2>&1  if [ $? = 0 ]; then  echo "TOP found on your system."  echo "--4.TOP==========================">>archive/${hostn}_$hour  $TOP>>archive/${hostn}_$hour  MEMFOUND=1  else  echo "Warning... TOP not found on your system."  MEMFOUND=0  fi    $VMSTAT > /dev/null 2>&1  if [ $? = 0 ]; then  echo "VMSTAT found on your system."  echo "--5.VMSTAT==========================">>archive/${hostn}_$hour  $VMSTAT>>archive/${hostn}_$hour  MEMFOUND=1  else  echo "Warning... VMSTAT not found on your system."  MEMFOUND=0  fi    $IOSTAT > /dev/null 2>&1  if [ $? = 0 ]; then  echo "IOSTAT found on your system."  echo "--6.IOSTAT==========================">>archive/${hostn}_$hour  $IOSTAT>>archive/${hostn}_$hour  MEMFOUND=1  else  echo "Warning... IOSTAT not found on your system."  MEMFOUND=0  fi    $PSELF > /dev/null 2>&1  if [ $? = 0 ]; then  echo "PSELF found on your system."  echo "--7.PSELF==========================">>archive/${hostn}_$hour  $PSELF>>archive/${hostn}_$hour  MEMFOUND=1  else  echo "Warning... PSELF not found on your system."  MEMFOUND=0  fi    $BOOTLOG > /dev/null 2>&1  if [ $? = 0 ]; then  echo "BOOTLOG found on your system."  echo "--8.BOOTLOG==========================">>archive/${hostn}_$hour  $BOOTLOG>>archive/${hostn}_$hour  MEMFOUND=1  else  echo "Warning... BOOTLOG not found on your system."  MEMFOUND=0  fi    $SYSLOG > /dev/null 2>&1  if [ $? = 0 ]; then  echo "SYSLOG found on your system."  echo "--9.SYSLOG==========================">>archive/${hostn}_$hour  $SYSLOG>>archive/${hostn}_$hour  MEMFOUND=1  else  echo "Warning... SYSLOG not found on your system."  MEMFOUND=0  fi    $MESSAGE > /dev/null 2>&1  if [ $? = 0 ]; then  echo "MESSAGE found on your system."  echo "--10.MESSAGE==========================">>archive/${hostn}_$hour  $MESSAGE>>archive/${hostn}_$hour  MEMFOUND=1  else  echo "Warning... MESSAGE not found on your system."  MEMFOUND=0  fi    ;; esac  echo "" echo "Discovery completed." echo "Collection completed." echo "The Collected result saved in ./archive/${hostn}_$hour." echo ""

Oracle巡检脚本:ORAWatcher.sh

这个是用来巡检Oracle数据库的

#!/usr/bin/ksh echo "" echo "ORAWatcher Version:1.0.1" echo ""  ###################################################################### #数据库连接设置 ###################################################################### sqlstr=$1 test $1 if [ $? = 1 ]; then  echo  echo "Info...You did not enter a value for sqlstr."  echo "Info...Using default value = system/system"  sqlstr="system/system"  fi  ###################################################################### # Create log subdirectories if they don't exist ###################################################################### if [ ! -d archive ]; then  mkdir archive fi  echo "$sqlstr" echo "Starting Data Collection..." echo "" ###################################################################### hostn=`hostname` hour=`date +'%m.%d.%y.%H00.dat'` echo "`date` collect...">archive/${hostn}_oracle_$hour ###################################################################### echo "######################## 1.数据库版本" echo "select ' ' as \"--1.Database Version\" from dual;" >my_sql.sql sqlplus $sqlstr >archive/${hostn}_oracle_$hour echo "Select version FROM Product_component_version  Where SUBSTR(PRODUCT,1,6)='Oracle';" >my_sql.sql sqlplus $sqlstr >archive/${hostn}_oracle_$hour echo "######################## 2.控制文件" echo "select ' ' as \"--2.Control files\" from dual;" >my_sql.sql sqlplus $sqlstr >archive/${hostn}_oracle_$hour echo "select name from v\$controlfile;" >my_sql.sql sqlplus $sqlstr >archive/${hostn}_oracle_$hour echo "######################## 3.pfile、spfile" echo "select ' ' as \"--3.Parameter files\" from dual;" >my_sql.sql sqlplus $sqlstr >archive/${hostn}_oracle_$hour echo "show parameter pfile;" >my_sql.sql sqlplus $sqlstr >archive/${hostn}_oracle_$hour echo "######################## 4.字符集" echo "select ' ' as \"--4.DB Character\" from dual;" >my_sql.sql sqlplus $sqlstr >archive/${hostn}_oracle_$hour echo "col PARAMETER for a20 col value for a20 select * from v\$nls_parameters where parameter='NLS_CHARACTERSET';" >my_sql.sql sqlplus $sqlstr >archive/${hostn}_oracle_$hour echo "######################## 5.归档状态" echo "select ' ' as \"--5.DB Archive Mode\" from dual;" >my_sql.sql sqlplus $sqlstr >archive/${hostn}_oracle_$hour echo "set linesize 333 show parameter log_archive" >my_sql.sql sqlplus $sqlstr >archive/${hostn}_oracle_$hour echo "######################## 6.参数设置" echo "select ' ' as \"--6.Parameter Config\" from dual;" >my_sql.sql sqlplus $sqlstr >archive/${hostn}_oracle_$hour echo "set linesize 500 set pages 2000 show parameter;" >my_sql.sql sqlplus $sqlstr >archive/${hostn}_oracle_$hour echo "######################## 7.回滚段存储位置" echo "select ' ' as \"--7.Undo Info\" from dual;" >my_sql.sql sqlplus $sqlstr >archive/${hostn}_oracle_$hour echo "set linesize 500 set pages 2000 SELECT SEGMENT_NAME, TABLESPACE_NAME, STATUS FROM DBA_ROLLBACK_SEGS;" >my_sql.sql sqlplus $sqlstr >archive/${hostn}_oracle_$hour echo "######################## 8.redolog" echo "select ' ' as \"--8.Redolog Files\" from dual;" >my_sql.sql sqlplus $sqlstr >archive/${hostn}_oracle_$hour echo "set linesize 200 set pages 2000 col MEMBER for a50 select a.member,a.group#,b.thread#,b.bytes,b.members,b.status from v\$logfile a,v\$log b where a.group#=b.group#;" >my_sql.sql sqlplus $sqlstr >archive/${hostn}_oracle_$hour echo "######################## 9.查看表空间大小及利用率" echo "select ' ' as \"--9.Tablespace Usage\" from dual;" >my_sql.sql sqlplus $sqlstr >archive/${hostn}_oracle_$hour echo "set linesize 200 set pages 2000 col TABLESPACENAME for a30 select substr(a.TABLESPACE_NAME,1,30) TablespaceName, sum(a.bytes/1024/1024) as \"Totle_size(M)\", sum(nvl(b.free_space1/1024/1024,0)) as \"Free_space(M)\", sum(a.bytes/1024/1024)-sum(nvl(b.free_space1/1024/1024,0)) as \"Used_space(M)\", round((sum(a.bytes/1024/1024)-sum(nvl(b.free_space1/1024/1024,0))) *100/sum(a.bytes/1024/1024),2) as \"Used_percent%\" from dba_data_files a, (select sum(nvl(bytes,0)) free_space1,file_id from dba_free_space group by file_id) b where a.file_id = b.file_id(+) group by a.TABLESPACE_NAME order by \"Used_percent%\";" >my_sql.sql sqlplus $sqlstr >archive/${hostn}_oracle_$hour echo "######################## 10.数据文件" echo "select ' ' as \"--10.DB Files Info\" from dual;" >my_sql.sql sqlplus $sqlstr >archive/${hostn}_oracle_$hour echo "set linesize 300 set pagesize 500 col file_name format a80 col TABLESPACE_NAME for a30 select tablespace_name,file_id,status,bytes/1024/1024 FileSizeM,file_name from dba_data_files order by tablespace_name;" >my_sql.sql sqlplus $sqlstr >archive/${hostn}_oracle_$hour echo "######################## 11.查看数据文件的扩展方式" echo "select ' ' as \"--11.DB Files Extend\" from dual;" >my_sql.sql sqlplus $sqlstr >archive/${hostn}_oracle_$hour echo "set linesize 300 set pagesize 500 col FILE_NAME for a60 col TABLESPACE_NAME for a30 select file_id,file_name,tablespace_name,autoextensible  from dba_data_files order by file_id;" >my_sql.sql sqlplus $sqlstr >archive/${hostn}_oracle_$hour echo "######################## 12.查看表空间的扩展方式" echo "select ' ' as \"--12.TBS Extend\" from dual;" >my_sql.sql sqlplus $sqlstr >archive/${hostn}_oracle_$hour echo "set linesize 120 select TABLESPACE_NAME, BLOCK_SIZE, EXTENT_MANAGEMENT, SEGMENT_SPACE_MANAGEMENT  from dba_tablespaces;" >my_sql.sql sqlplus $sqlstr >archive/${hostn}_oracle_$hour echo "######################## 13.临时表空间" echo "select ' ' as \"--13.DB Temp TBS\" from dual;" >my_sql.sql sqlplus $sqlstr >archive/${hostn}_oracle_$hour echo "select FILE_NAME, FILE_ID, TABLESPACE_NAME, BYTES/1024/1024 \"BYTES(M)\", USER_BYTES/1024/1024 \"USER_BYTES(M)\", status from dba_temp_files;" >my_sql.sql sqlplus $sqlstr >archive/${hostn}_oracle_$hour echo "######################## 14.用户默认表空间" echo "select ' ' as \"--14.User Default TBS\" from dual;" >my_sql.sql sqlplus $sqlstr >archive/${hostn}_oracle_$hour echo "set lines 200 set pages 2000 col username for a20 col default_tablespace for a30 col temporary_tablespace for a30 select username, default_tablespace, temporary_tablespace from dba_users;" >my_sql.sql sqlplus $sqlstr >archive/${hostn}_oracle_$hour echo "######################## 15.数据库缓冲区高速缓存命中率" echo "select ' ' as \"--15.DB Cache Hit\" from dual;" >my_sql.sql sqlplus $sqlstr >archive/${hostn}_oracle_$hour echo "select 1-(phy.value/(cur.value+con.value)) from v\$sysstat cur, v\$sysstat con, v\$sysstat phy where cur.name = 'db block gets'  and con.name = 'consistent gets'  and phy.name = 'physical reads';" >my_sql.sql sqlplus $sqlstr >archive/${hostn}_oracle_$hour echo "######################## 16.重写不等待比率" echo "select ' ' as \"--16.Redo nowaits\" from dual;" >my_sql.sql sqlplus $sqlstr >archive/${hostn}_oracle_$hour echo "select (req.value*5000)/entries.value from v\$sysstat req,v\$sysstat entries where req.name = 'redo log space requests' and entries.name = 'redo entires';" >my_sql.sql sqlplus $sqlstr >archive/${hostn}_oracle_$hour echo "######################## 17.库高速缓存命中率" echo "select ' ' as \"--17.Library Cache Hit\" from dual;" >my_sql.sql sqlplus $sqlstr >archive/${hostn}_oracle_$hour echo "select namespace,gethitratio from v\$librarycache;" >my_sql.sql sqlplus $sqlstr >archive/${hostn}_oracle_$hour echo "######################## 18.数据字典高速缓存Getmisses对gets的目标比例" echo "select ' ' as \"--18.DB Dic cache\" from dual;" >my_sql.sql sqlplus $sqlstr >archive/${hostn}_oracle_$hour echo "select sum(getmisses)/sum(gets) from v\$rowcache;" >my_sql.sql sqlplus $sqlstr >archive/${hostn}_oracle_$hour echo "######################## 19.用户对像(表、索引、大小)" echo "select ' ' as \"--19.User objects\" from dual;" >my_sql.sql sqlplus $sqlstr >archive/${hostn}_oracle_$hour echo "col OWNER for a30 col SEGMENT_NAME for a33 col PARTITION_NAME for a22 col SEGMENT_TYPE for a11 col TABLESPACE_NAME for a30 set lines 333 set pages 5000 select OWNER ,SEGMENT_NAME,PARTITION_NAME,SEGMENT_TYPE,TABLESPACE_NAME,bytes/1024/1024 as table_size_M  from Dba_Segments where SEGMENT_TYPE='TABLE' order by OWNER;" >my_sql.sql sqlplus $sqlstr >archive/${hostn}_oracle_$hour   echo "######################## 20.检查是否有失效的索引" echo "select ' ' as \"--20.Check invalid Ind\" from dual;" >my_sql.sql sqlplus $sqlstr >archive/${hostn}_oracle_$hour echo "set lines 333 set pages 50 select index_name, owner, status, tablespace_name   from dba_indexes  where owner not in('SYS','SYSTEM')  and status != 'VALID'  and tablespace_name is not null  union all  select index_name, index_owner owner, status, tablespace_name  from dba_ind_partitions  where index_owner not in ('SYS','SYSTEM')  and status <> 'USABLE'  and tablespace_name is not null; select '' as a from dual;" >my_sql.sql sqlplus $sqlstr >archive/${hostn}_oracle_$hour echo "######################## 21.检查数据库会话连接占用率" echo "select ' ' as \"--21.Check DB Sessions\" from dual;" >my_sql.sql sqlplus $sqlstr >archive/${hostn}_oracle_$hour echo "col TOT_SESSIONS for a15 select cur_sessions, tot_sessions, a.cur_sessions/b.tot_sessions*100 \"sessions used%\" from (select count(*) cur_sessions from v\$session) a, (select value tot_sessions from v\$parameter where name = 'sessions') b;" >my_sql.sql sqlplus $sqlstr >archive/${hostn}_oracle_$hour echo "######################## 22.检查数据库会话连接历史最高值" echo "select ' ' as \"--22.Highwater of Session\" from dual;" >my_sql.sql sqlplus $sqlstr >archive/${hostn}_oracle_$hour echo "select HIGHWATER  from dba_high_water_mark_statistics  where name = 'SESSIONS';" >my_sql.sql sqlplus $sqlstr >archive/${hostn}_oracle_$hour echo "######################## 23.检查数据库Job状态" echo "select ' ' as \"--23.Check Status of Job\" from dual;" >my_sql.sql sqlplus $sqlstr >archive/${hostn}_oracle_$hour echo "set linesize 333 col what for a30 col NEXT_DATE for a30  col INTERVAL for a30 select job, what, next_date, INTERVAL, BROKEN  from dba_jobs  where BROKEN != 'N';" >my_sql.sql sqlplus $sqlstr >archive/${hostn}_oracle_$hour ###################################################################### echo "Collection completed." echo "The Collected result saved in ./archive/${hostn}_oracle_$hour." echo ""

脚本使用

1. 创建目录并授权

# mkdir -p /home/oracle/scripts # chown -R oracle.oinstall /home/oracle/scripts/ # chmod -R 755 /home/oracle/scripts/

2. 两脚本都用oracle用户执行

切换到oracle用户,执行两个脚本:

$./OSWatcher.sh $./ORAWatcher.sh

3. 查看巡检内容

注意:ORAWatcher.sh脚本中数据库的默认连接串是:system/system,如果system密码不是这个,可以这样执行:./ORAWatcher.sh system/password

看完上述内容,你们掌握如何分析两个主机和Oracle数据库巡检脚本的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

数据 数据库 脚本 用户 检查 主机 内容 空间 两个 文件 缓存 高速 分析 命中率 命令 大小 方式 方法 更多 状态 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 港股互联网科技股 合肥互联网科技公司 喔噻互联网科技 北京互联网络科技有限公司 狮子座互联网科技培训 华脉科技工业互联网产品 上海电发互联网科技有限公司 隆华科技工业互联网 温州喔噻互联网科技有限公司 成都铂石互联网科技做什么的 互联网金融中的现代科技 互联网5g黑科技有哪些 苏州铭阳互联网科技有限公司 恒生互联网科技指数跳水 天津腾达互联网科技有限公司 威龙国际互联网科技公司 锡山区互联网智能科技产品供应 山东星卡互联网科技有限公司官网 北京瑞云互联网科技有限公司 前海云享互联网科技 手冲咖啡和咖啡机区别 北京互联网科技有限公司 互联网科技金融公司 安徽鑫晟辉互联网科技 善班互联网科技有限公司 易通互联网络科技有限公司 洛阳共同富裕互联网科技有限公司 中科明德北京互联网科技 黑科技 体验场景 互联网大会 江苏互联网智能科技产品出厂价
0