如何分析两个主机和Oracle数据库巡检脚本
发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,如何分析两个主机和Oracle数据库巡检脚本,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。分享一个之前我用来巡检主机和Oracle的脚本
千家信息网最后更新 2025年02月01日如何分析两个主机和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安全错误
数据库的锁怎样保障安全
sh脚本从另一台服务器获取文件
国内顶尖的软件开发
互联网高清科技
海尔软件开发招聘
开间小店 服务器
东方道迩软件开发面试
上海国拍服务器
电脑搭建服务器需要什么
网络安全态势统计分析
数据库响应速度应该为多少
单位网络安全规划方案
三种服务器类型结构特点的探讨
东莞有软件开发的公司吗
北大数据库作业答案
宝塔站点链接数据库
数据库报警系统
网络安全法宣传海报
移动服务器
天津网络安全学院排名
上海成人it软件开发培训
获取数据库表中的字段
计算机网络技术论文题目大专
初中生进行的网络安全教育
飞塔 网络安全平台
软件开发与测试属于什么专业
网络安全需要会什么基础知识
数据库管理技术有哪三个阶段
黑客入侵sec数据库
国企网络安全运营工作
云南大理棋牌软件开发