如何分析两个主机和Oracle数据库巡检脚本
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,如何分析两个主机和Oracle数据库巡检脚本,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。分享一个之前我用来巡检主机和Oracle的脚本
千家信息网最后更新 2025年11月07日如何分析两个主机和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安全错误
数据库的锁怎样保障安全
德力网络技术有限公司招聘
360网络安全都思航
四川苹果软件开发价钱是多少
赴日本软件开发 bse
知名的重庆移动服务器托管云主机
数据库 如何表示月日年
深圳第三方软件开发哪家便宜
宝塔gz类型的数据库
软件开发包就业
无线网络技术的应用领域英文
云南中学生网络安全知识竞赛
飞宇网络技术
网络安全等级保护评测要求
网络安全小课堂开课啦
三级数据库技术题型
苏州国税软件开发税率
太仓电子网络技术哪个好
护苗网络安全宣传工作总结
rtmp推到流媒体服务器卡顿
安徽软件开发专升本考什么科目
计算机三级网络技术是上机考吗
信息科网络安全保障措施
邹平hr管理软件开发
加强网络安全堵塞保密漏洞
软件开发甲方不结尾款
共建网络安全宣传
网络安全法六十五
网络安全在我心演讲稿550字
网络技术网站开发
网络安全逻辑隔离