Linux上的oracle巡检脚本

修改自dba大神博客:http://www.cnblogs.com/jyzhao/p/5364049.html

脚本巡检的优化:自动化,节省时间。

脚本需加强:巡检结果中有大量的sqlplus连接信息,后期考虑用shell只过滤出有用信息,优化查看。

开始介绍:

1.环境sentos6\7、redhat6

2.可以将脚本放至/home/oracle/checkdir/ORA_check.sh

3.修改脚本文件权限:

# chown -R oracle:dba /var/ORA_check.sh
# chmod u+x ORA_check.sh

4.vim ORA_check.sh

#!/usr/bin/ksh
echo ""
echo "ORAWatcher Version:1.0.1"
echo ""
#Create Time:2016-04-08
#Update Time:2017-12-14
######################################################################
#数据库连接设置
######################################################################
read -p "Please input system passwd: " DBApasswd
sqlstr=system/$DBApasswd

######################################################################
# Create log subdirectories if they don‘t exist
######################################################################
archive=/home/oracle/checkdir/archive
if [ ! -d $archive ]; then
        mkdir $archive
fi

echo "Starting ..."
echo ""
######################################################################
hostn=`hostname`
CKtime=`date +%F_%H:%M.log`
echo "CHECK_TIME: $CKtime ">$archive/${hostn}_oracle_$CKtime
######################################################################

echo "########################  1.数据库版本"
echo "--1.Database Version" >>$archive/${hostn}_oracle_$CKtime
echo "Select version FROM Product_component_version
Where SUBSTR(PRODUCT,1,6)=‘Oracle‘;" >my_sql.sql
sqlplus $sqlstr <my_sql.sql>>$archive/${hostn}_oracle_$CKtime
echo "" >>$archive/${hostn}_oracle_$CKtime

echo "########################  2.控制文件"
echo "--2.Control files" >>$archive/${hostn}_oracle_$CKtime
echo "select name from v\$controlfile;" >my_sql.sql
sqlplus $sqlstr <my_sql.sql>>$archive/${hostn}_oracle_$CKtime
echo "" >>$archive/${hostn}_oracle_$CKtime

echo "########################  3.pfile、spfile"
echo "--3.Parameter files" >>$archive/${hostn}_oracle_$CKtime
echo "show parameter pfile;" >my_sql.sql
sqlplus $sqlstr <my_sql.sql>>$archive/${hostn}_oracle_$CKtime
echo "" >>$archive/${hostn}_oracle_$CKtime

echo "########################  4.字符集"
echo "--4.DB Character" >>$archive/${hostn}_oracle_$CKtime
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_$CKtime
echo "" >>$archive/${hostn}_oracle_$CKtime

echo "########################  5.归档状态"
echo "--5.DB Archive Mode" >>$archive/${hostn}_oracle_$CKtime
echo "set linesize 333
show parameter log_$archive" >my_sql.sql
sqlplus $sqlstr <my_sql.sql>>$archive/${hostn}_oracle_$CKtime
echo "" >>$archive/${hostn}_oracle_$CKtime

echo "########################  6.参数设置"
echo "--6.Parameter Config" >>$archive/${hostn}_oracle_$CKtime
echo "set linesize 500
set pages 2000
show parameter;" >my_sql.sql
sqlplus $sqlstr <my_sql.sql>>$archive/${hostn}_oracle_$CKtime
echo "" >>$archive/${hostn}_oracle_$CKtime

echo "########################  7.回滚段存储位置"
echo "--7.Undo Info" >>$archive/${hostn}_oracle_$CKtime
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_$CKtime
echo "" >>$archive/${hostn}_oracle_$CKtime

echo "########################  8.redolog"
echo "--8.Redolog Files" >>$archive/${hostn}_oracle_$CKtime
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_$CKtime
echo "" >>$archive/${hostn}_oracle_$CKtime

echo "########################  9.查看表空间大小及利用率"
echo "--9.Tablespace Usage" >>$archive/${hostn}_oracle_$CKtime
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_$CKtime
echo "" >>$archive/${hostn}_oracle_$CKtime

echo "########################  10.数据文件"
echo "--10.DB Files Info" >>$archive/${hostn}_oracle_$CKtime
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_$CKtime
echo "" >>$archive/${hostn}_oracle_$CKtime

echo "########################  11.查看数据文件的扩展方式"
echo "--11.DB Files Extend" >>$archive/${hostn}_oracle_$CKtime
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_$CKtime
echo "" >>$archive/${hostn}_oracle_$CKtime

echo "########################  12.查看表空间的扩展方式"
echo "--12.TBS Extend" >>$archive/${hostn}_oracle_$CKtime
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_$CKtime
echo "" >>$archive/${hostn}_oracle_$CKtime

echo "########################  13.临时表空间"
echo "--13.DB Temp TBS" >>$archive/${hostn}_oracle_$CKtime
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_$CKtime
echo "" >>$archive/${hostn}_oracle_$CKtime

echo "########################  14.用户默认表空间"
echo "--14.User Default TBS" >>$archive/${hostn}_oracle_$CKtime
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_$CKtime
echo "" >>$archive/${hostn}_oracle_$CKtime

echo "########################  15.数据库缓冲区高速缓存命中率"
echo "--15.DB Cache Hit" >>$archive/${hostn}_oracle_$CKtime
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_$CKtime
echo "" >>$archive/${hostn}_oracle_$CKtime

echo "########################  16.重写不等待比率"
echo "--16.Redo nowaits" >>$archive/${hostn}_oracle_$CKtime
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_$CKtime
echo "" >>$archive/${hostn}_oracle_$CKtime

echo "########################  17.库高速缓存命中率"
echo "--17.Library Cache Hit" >>$archive/${hostn}_oracle_$CKtime
echo "select namespace,gethitratio from v\$librarycache;" >my_sql.sql
sqlplus $sqlstr <my_sql.sql>>$archive/${hostn}_oracle_$CKtime
echo "" >>$archive/${hostn}_oracle_$CKtime

echo "########################  18.数据字典高速缓存Getmisses对gets的目标比例"
echo "--18.DB Dic cache" >>$archive/${hostn}_oracle_$CKtime
echo "select sum(getmisses)/sum(gets) from v\$rowcache;" >my_sql.sql
sqlplus $sqlstr <my_sql.sql>>$archive/${hostn}_oracle_$CKtime
echo "" >>$archive/${hostn}_oracle_$CKtime

echo "########################  19.用户对像(表、索引、大小)"
echo "--19.User objects" >>$archive/${hostn}_oracle_$CKtime
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_$CKtime
echo "" >>$archive/${hostn}_oracle_$CKtime

echo "########################  20.检查是否有失效的索引"
echo "--20.Check invalid Ind" >>$archive/${hostn}_oracle_$CKtime
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_$CKtime
echo "" >>$archive/${hostn}_oracle_$CKtime

echo "########################  21.检查数据库会话连接占用率"
echo "--21.Check DB Sessions" >>$archive/${hostn}_oracle_$CKtime
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_$CKtime
echo "" >>$archive/${hostn}_oracle_$CKtime

echo "########################  22.检查数据库会话连接历史最高值"
echo "--22.Highwater of Session" >>$archive/${hostn}_oracle_$CKtime
echo "select HIGHWATER
 from dba_high_water_mark_statistics
 where name = ‘SESSIONS‘;" >my_sql.sql
sqlplus $sqlstr <my_sql.sql>>$archive/${hostn}_oracle_$CKtime
echo "" >>$archive/${hostn}_oracle_$CKtime

echo "########################  23.检查数据库Job状态"
echo "--23.Check Status of Job" >>$archive/${hostn}_oracle_$CKtime
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_$CKtime
echo "" >>$archive/${hostn}_oracle_$CKtime
#####################################################################

echo "Check completed."
echo "The Collected result saved in $archive/${hostn}_oracle_$CKtime."
echo ""

执行过程:

[[email protected] checkdir]$ sh ORA_check.sh 

ORAWatcher Version:1.0.1

Please input system passwd: ipii314
Starting ...

########################  1.数据库版本
########################  2.控制文件
########################  3.pfile、spfile
########################  4.字符集
########################  5.归档状态
########################  6.参数设置
########################  7.回滚段存储位置
########################  8.redolog
########################  9.查看表空间大小及利用率
########################  10.数据文件
########################  11.查看数据文件的扩展方式
########################  12.查看表空间的扩展方式
########################  13.临时表空间
########################  14.用户默认表空间
########################  15.数据库缓冲区高速缓存命中率
########################  16.重写不等待比率
########################  17.库高速缓存命中率
########################  18.数据字典高速缓存Getmisses对gets的目标比例
########################  19.用户对像(表、索引、大小)
########################  20.检查是否有失效的索引
########################  21.检查数据库会话连接占用率
########################  22.检查数据库会话连接历史最高值
########################  23.检查数据库Job状态
Check completed.
The Collected result saved in /home/oracle/checkdir/archive/rac2_oracle_2017-12-14_22:56.log.     //巡检结果保存位置
 
时间: 2024-08-25 16:19:42

Linux上的oracle巡检脚本的相关文章

VM虚拟机下在LINUX上安装ORACLE 11G单实例数据库

VM虚拟机下在LINUX上安装ORACLE 11G单实例数据库 1.环境及安装前规划:虚拟机及OS如下 环境:VMware Wordstation ACE版 6.0.2 操作系统:OracleLinux-R5-U8-Server-i386-dvd    3.2G 安装操作系统,这里需要注意的是磁盘空间要预留足够. 我的规划是: 虚拟机分配1024M内存,当然如果主机内存足够,安装时内存设置2048M可以更快. 虚拟机分配一块磁盘,30G磁盘空间. /boot 100M ext3 /    20G

如何手动的干净的删除linux上的ORACLE数据库

最近在用VMWARE虚拟机做ORACLE的数据库实验,我们都知道在WINDOWS上,我可以到添加删除程序里去自动删除已经安装的所有的应用程序,但是在LINUX上没有这个服务可以进行自动的删除,于是尝试了下手动的删除ORACLE数据库.具体步骤如下: 1,先查下ORACLE_SID,ORACLE_HOME.ORACLE_BASE的信息: [[email protected] dbs]$ echo $ORACLE_SID PROD [[email protected] dbs]$ echo $ORA

linux上备份Oracle时EXP-00091的错误解决方法

unix/linux上备份Oracle时EXP-00091的错误解决方法 unix/linux上备份数据时的错误解决方法 EXP-00091: Exporting questionable statistics.解决方法 今日EXP数据发现如下错误: EXP-00091: Exporting questionable statistics. . . exporting table                     TAXVOU3129    2904185 rows exported EX

DBA_在Linux上安装Oracle 11g数据库(案例)

1 DBA_在Linux上安装Oracle 11g数据库(案例)

在Linux上安装Oracle RAC 12 c(12.1) 虚拟机,一步一步向导

Oracle RAC 12 c(12.1)在Linux上安装虚拟机,一步一步向导 今天我们将看到如何安装 12 c版本1 RAC(真正的应用程序集群)数据库2 Linux 64位的虚拟机 使用VMWare或Oracle VirtualBox. 甲骨文的“c”12 c代表“ 云 ” 有一些重要和有趣的变化时安装12 c相比11 g RAC. 甲骨文似乎增加了很多新的有趣的特性在12摄氏度. 请注意,我们需要2虚拟机各有3 GB内存. 所以如果你有足够的记忆你的笔记本电脑/ PC机或服务器上,那么你

实战:oracle巡检脚本v1

/************************************************************************************************************************* 该脚本仅仅是为了工作方便书写,主要是在shell里整合了OS的系统命令和oracle的常见巡检脚本; 脚本执行过程中需要调用OS的系统命令的权限,如果执行脚本的用户是普通账户需要考虑权限设置的问题! ***************************

怎样手动的干净的删除linux上的ORACLE数据库

近期在用VMWARE虚拟机做ORACLE的数据库实验.我们都知道在WINDOWS上,我能够到加入删除程序里去自己主动删除已经安装的全部的应用程序.可是在LINUX上没有这个服务能够进行自己主动的删除.于是尝试了下手动的删除ORACLE数据库. 详细过程例如以下: 1,先查下ORACLE_SID,ORACLE_HOME.ORACLE_BASE的信息: [[email protected] dbs]$ echo $ORACLE_SID PROD [[email protected] dbs]$ ec

Ubuntu Linux上安装oracle jdk

说明:由于很多系统不支持使用OpenJDK,因此在ubuntu下会需要安装Oracle JDK.而Oracle JDK的安装貌似没有提供apt方式,因此安装Oracle JDK的方式相对麻烦一些,我经常安装,为了方便别人同时方便自己查看,把它记下来. 第一步:区分32位还是64位操作系统 先确定你的ubuntu linux是32位还是64位的,方法很多,这里介绍一种即可. $uname -a 第二步:卸载OpenJDK 先执行如下命令看是否安装了OpenJDK,如果已经安装,会显示java的信息

在linux 上安装oracle database 对 32bit rpm 和64bit rpm的要求

摘自: Requirements for Installing Oracle 11gR2 RDBMS on RHEL (and OEL) 5 on AMD64/EM64T (文档 ID 880989.1) NOTE: Starting with Oracle Database 11g Release 2 (11.2.0.2), all the 32-bit packages, except for gcc-32bit-4.3, listed in the following sections a