百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

分析两个主机和Oracle数据库巡检脚本,值得收藏

mhr18 2024-09-20 20:57 37 浏览 0 评论

概述

分享一个之前我用来巡检主机和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 <my_sql.sql>>archive/${hostn}_oracle_$hour
echo "Select version FROM Product_component_version 
Where SUBSTR(PRODUCT,1,6)='Oracle';" >my_sql.sql
sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour
echo "######################## 2.控制文件"
echo "select ' ' as \"--2.Control files\" from dual;" >my_sql.sql
sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour
echo "select name from v\$controlfile;" >my_sql.sql
sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour
echo "######################## 3.pfile、spfile"
echo "select ' ' as \"--3.Parameter files\" from dual;" >my_sql.sql
sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour
echo "show parameter pfile;" >my_sql.sql
sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour
echo "######################## 4.字符集"
echo "select ' ' as \"--4.DB Character\" from dual;" >my_sql.sql
sqlplus $sqlstr <my_sql.sql>>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 <my_sql.sql>>archive/${hostn}_oracle_$hour
echo "######################## 5.归档状态"
echo "select ' ' as \"--5.DB Archive Mode\" from dual;" >my_sql.sql
sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour
echo "set linesize 333
show parameter log_archive" >my_sql.sql
sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour
echo "######################## 6.参数设置"
echo "select ' ' as \"--6.Parameter Config\" from dual;" >my_sql.sql
sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour
echo "set linesize 500
set pages 2000
show parameter;" >my_sql.sql
sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour
echo "######################## 7.回滚段存储位置"
echo "select ' ' as \"--7.Undo Info\" from dual;" >my_sql.sql
sqlplus $sqlstr <my_sql.sql>>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 <my_sql.sql>>archive/${hostn}_oracle_$hour
echo "######################## 8.redolog"
echo "select ' ' as \"--8.Redolog Files\" from dual;" >my_sql.sql
sqlplus $sqlstr <my_sql.sql>>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 <my_sql.sql>>archive/${hostn}_oracle_$hour
echo "######################## 9.查看表空间大小及利用率"
echo "select ' ' as \"--9.Tablespace Usage\" from dual;" >my_sql.sql
sqlplus $sqlstr <my_sql.sql>>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 <my_sql.sql>>archive/${hostn}_oracle_$hour
echo "######################## 10.数据文件"
echo "select ' ' as \"--10.DB Files Info\" from dual;" >my_sql.sql
sqlplus $sqlstr <my_sql.sql>>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 <my_sql.sql>>archive/${hostn}_oracle_$hour
echo "######################## 11.查看数据文件的扩展方式"
echo "select ' ' as \"--11.DB Files Extend\" from dual;" >my_sql.sql
sqlplus $sqlstr <my_sql.sql>>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 <my_sql.sql>>archive/${hostn}_oracle_$hour
echo "######################## 12.查看表空间的扩展方式"
echo "select ' ' as \"--12.TBS Extend\" from dual;" >my_sql.sql
sqlplus $sqlstr <my_sql.sql>>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 <my_sql.sql>>archive/${hostn}_oracle_$hour
echo "######################## 13.临时表空间"
echo "select ' ' as \"--13.DB Temp TBS\" from dual;" >my_sql.sql
sqlplus $sqlstr <my_sql.sql>>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 <my_sql.sql>>archive/${hostn}_oracle_$hour
echo "######################## 14.用户默认表空间"
echo "select ' ' as \"--14.User Default TBS\" from dual;" >my_sql.sql
sqlplus $sqlstr <my_sql.sql>>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 <my_sql.sql>>archive/${hostn}_oracle_$hour
echo "######################## 15.数据库缓冲区高速缓存命中率"
echo "select ' ' as \"--15.DB Cache Hit\" from dual;" >my_sql.sql
sqlplus $sqlstr <my_sql.sql>>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 <my_sql.sql>>archive/${hostn}_oracle_$hour
echo "######################## 16.重写不等待比率"
echo "select ' ' as \"--16.Redo nowaits\" from dual;" >my_sql.sql
sqlplus $sqlstr <my_sql.sql>>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 <my_sql.sql>>archive/${hostn}_oracle_$hour
echo "######################## 17.库高速缓存命中率"
echo "select ' ' as \"--17.Library Cache Hit\" from dual;" >my_sql.sql
sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour
echo "select namespace,gethitratio from v\$librarycache;" >my_sql.sql
sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour
echo "######################## 18.数据字典高速缓存Getmisses对gets的目标比例"
echo "select ' ' as \"--18.DB Dic cache\" from dual;" >my_sql.sql
sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour
echo "select sum(getmisses)/sum(gets) from v\$rowcache;" >my_sql.sql
sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour
echo "######################## 19.用户对像(表、索引、大小)"
echo "select ' ' as \"--19.User objects\" from dual;" >my_sql.sql
sqlplus $sqlstr <my_sql.sql>>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 <my_sql.sql>>archive/${hostn}_oracle_$hour
 
echo "######################## 20.检查是否有失效的索引"
echo "select ' ' as \"--20.Check invalid Ind\" from dual;" >my_sql.sql
sqlplus $sqlstr <my_sql.sql>>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 <my_sql.sql>>archive/${hostn}_oracle_$hour
echo "######################## 21.检查数据库会话连接占用率"
echo "select ' ' as \"--21.Check DB Sessions\" from dual;" >my_sql.sql
sqlplus $sqlstr <my_sql.sql>>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 <my_sql.sql>>archive/${hostn}_oracle_$hour
echo "######################## 22.检查数据库会话连接历史最高值"
echo "select ' ' as \"--22.Highwater of Session\" from dual;" >my_sql.sql
sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour
echo "select HIGHWATER
 from dba_high_water_mark_statistics
 where name = 'SESSIONS';" >my_sql.sql
sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour
echo "######################## 23.检查数据库Job状态"
echo "select ' ' as \"--23.Check Status of Job\" from dual;" >my_sql.sql
sqlplus $sqlstr <my_sql.sql>>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 <my_sql.sql>>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


虽然后面都是用工具巡检了,但是这个脚本还是有可借鉴之处的。后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注一下~


相关推荐

JDK从8升级到21的问题集(jdk8版本)

一、背景与挑战1.升级动因oOracle长期支持策略o现代特性需求:协程、模式匹配、ZGC等o安全性与性能的需求oAI新技术引入的版本要求2.项目情况o100+项目并行升级的协同作战o多技术栈并存o持...

科莱特SAP ABAP干货 | 基础篇:二、数据字典(1)

ABAP开发基础及应用二、数据字典(1)目标及说明目标:1、掌握SAP数据字典各种对象的定义和使用2、能根据业务数据要求,建立存储数据用的表和视图需求说明:1、在SAP中自建程序,以对一企业(自由行集...

Mycat入门(mycatalog)

一、Linux系统下搭建Mycat注:如果没有服务器可以选择虚拟机进行操作1、首先准备好服务器或者虚拟机2、安装和配置MySQL数据库2.1、删除原来的数据库//查询已安装的mariadb[root...

MySQL从入门到实战:表设计、索引优化与高频面试解析

一、业务场景驱动表设计:电商订单系统案例场景背景某电商平台需设计用户、商品、订单模块,要求支持以下操作:用户高频查询最新订单按商品分类+价格区间筛选商品统计每日订单金额建表实战--用户表(反范式设计...

oracle生成AWR报告的两种方法(oracle中awr报告的输出格式有哪些)

方法1:sqlplus中执行:execdbms_workload_repository.create_snapshot();@?/rdbms/admin/awrrpt.sql方法2:setpage...

Navicat Premium:数据库管理神器(navicat 本地数据库)

提供免费下载网站Mavom.cn在数据库管理的世界里,「NavicatPremium」是一款「一体化的数据库管理和迁移工具」,适用于MySQL、SQLServer、Oracle和PostgreSQ...

Iperius Backup功能特色(backup如何使用)

备份作业:1.文件夹备份:本地的文件夹,带SMB的路径文件夹,网络路径文件夹,NAS文件夹等等2.文件备份:对某个文件进行备份3.备份镜像:可以把系统刻录成镜像用于恢复(图1)4.FTP:自带FTP...

sql注入攻击,拿到网站账户,黑客这样神操作

首先的话,我们来仔细搞清楚这个攻击的流程,第一步就是了解一下,什么是sql?又什么是sql注入、sql注入的流程和步骤。1、首先什么是sql,Sql是一种数据库查询和程序设计的语言,这里的数据库是指存...

Java 8 新特性指南(java的八大特性)

本教程可以在实验楼(shiyanlou.com)中在线练习。一、实验简介Java8是近年来最后起来的一个Java编程语言发行版本。Oracle在2014年3月发布了它。该版本为Java带来...

Java系统开发从入门到精通第三讲(文字版)

下来我们进入数据持久化的部分,对于一个真实的业务系统,能够正常的运转离不开数据的持久化。在数据持久化这块,目前主流的还是关系型数据库(RDBMS),NoSQL(NewSQL)也有了长足发展,特别在大数...

扣细节:while (true) 和 for (;;) 哪个更快

来源:zhihu.com/question/52311366/answer/130090347在JDK8u的jdk项目下做个很粗略的搜索:mymbp:/Users/me/workspace/jdk8u...

JAVA 8 环境安装配置(java环境怎么装)

一、下载这里选择的是OracleJDK,首先到Oracle官网下载JDK8,以Windows10操作系统为例,若是32位系统则下载“Windowsx86”,否则64位系统下载“Windows...

从零开始学Java系列之最详细的Java环境变量配置教程

前言:在上一篇文章中,壹哥给大家重点讲解了Java实现跨平台的原理,不知道你现在有没有弄清楚呢?如果你还有疑问,可以在评论区留言~之前的三篇文章,主要是理论性的内容,其实你暂时跳过不看也是可以的,我们...

Linux下乱码的文件名修改或删除(linux文件名乱码如何处理)

查看文件名#lstouch1?.txt#ll-itotal1469445217956913-rw-r--r--1oracleoinstall0Jan18...

「论文写作-解决方案」数据库TDE加密

数据是应用的核心。对于绝大多数应用,存储数据的数据库是系统日常管理的重中之重。数据库安全背景根据verizon2014年的统计数据,96%数据攻击行为是针对数据库进行的。数据库已经成为外部入侵与内部渗...

取消回复欢迎 发表评论: