• Linux上的oracle巡检脚本


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

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

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

    开始介绍:

    1.环境sentos67、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 ""

     执行过程:

    [oracle@rac2 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.     //巡检结果保存位置
     
  • 相关阅读:
    78. Subsets
    [LintCode] 447 Search in a Big Sorted Array
    [LintCode] 585 Maximum Number in Mountain Sequence
    [LintCode] Search a 2D Matrix
    [LintCode] 459 Closest Number in Sorted Array
    [z]Google SPDY介绍
    Python Snippet
    python学习[二]
    [转]总结的几大驭下法宝
    python学习[一]
  • 原文地址:https://www.cnblogs.com/-abm/p/8040462.html
Copyright © 2020-2023  润新知