监控Oracle数据库的常用shell脚本.docx_第1页
监控Oracle数据库的常用shell脚本.docx_第2页
监控Oracle数据库的常用shell脚本.docx_第3页
监控Oracle数据库的常用shell脚本.docx_第4页
监控Oracle数据库的常用shell脚本.docx_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

监控Oracle数据库的常用shell脚本 我会陆陆续续搜集好的脚本共享到群上。这次是8个。一脚本来监控Oracle数据库: 1.检查实例的可用性 2.检查监听器的可用性 3.检查alert日志文件中的错误信息 4.在存放log文件的地方满以前清空旧的log文件 5.分析table和index以获得更好的性能 6.检查表空间的使用情况 7.找出无效的对象 8.监控用户和事务 二DBA需要的Unix基本知识 基本的UNIX命令,以下是一些常用的Unix命令: ps-显示进程 grep-搜索文件中的某种文本模式 mailx-读取或者发送mail cat-连接文件或者显示它们 cut-选择显示的列 awk-模式匹配语言 df-显示剩余的磁盘空间 以下是DBA如何使用这些命令的一些例子: 1. 显示服务器上的可用实例: $ ps ef | grep smon oracle 22086 10 02:32:24 ?0:04 ora_smon_PPRD10 oracle5215 289720 08:10:19 pts/40:00 grep smon 2. 显示服务器上的可用监听器: $ ps -ef | grep listener grep -v grep (grep命令应该加上-i参数,即grep -i listener,该参数的作用是忽略大小写,因为有些时候listener是大写的,这时就会看不到结果) $ ps ef |grep -i listener oracle9655 10 Mar 12 ?0:01 /data/app/oracle/9.2.0/bin/tnslsnr LISTENER -inherit oracle 22610 10 02:45:02 ?0:02 /data/app/oracle/10.2.0/bin/tnslsnr LISTENER -inherit oracle5268 289720 08:13:02 pts/40:00 grep -i listener 3. 查看Oracle存档目录的文件系统使用情况 $ df -k | grep /data /dev/md/dsk/d50104977675 88610542 1531735786%/data 4. 统计alter.log文件中的行数: $ cat alert_PPRD10.log | wc -l 13124 $ more alert_PPRD10.log | wc -l 13124 5. 列出alert.log文件中的全部Oracle错误信息: $ grep ORA-* alert.log ORA-00600: internal error code, arguments: kcrrrfswda.1, , , , , ORA-00600: internal error code, arguments: 1881, 25860496, 25857716, 6. CRONTAB基本 一个crontab文件中包含有六个字段: 分钟 0-59 小时 0-23 月中的第几天 1-31 月份 1 - 12 星期几 0 - 6, with 0 = Sunday 7. Unix命令或者Shell脚本 要编辑一个crontab文件,输入: Crontab -e 要查看一个crontab文件,输入: Crontab -l 0 4 * * 5 /dba/admin/analyze_table.ksh 30 3 * * 3,6 /dba/admin/hotbackup.ksh /dev/null 2&1 在上面的例子中,第一行显示了一个分析表的脚本在每个星期5的4:00am运行。第二行显示了一个执行热备份的脚本在每个周三和周六的3:00a.m.运行。 三监控数据库的常用Shell脚本 以下提供的8个shell脚本覆盖了DBA每日监控工作的90%,你可能还需要修改UNIX的环境变量。 1. 检查Oracle实例的可用性 oratab文件中列出了服务器上的所有数据库 $ cat /var/opt/oracle/oratab # # This file is used by ORACLE utilities.It is created by root.sh # and updated by the Database Configuration Assistant when creating # a database. # A colon, :, is used as the field terminator.A new line terminates # the entry.Lines beginning with a pound sign, #, are comments. # # Entries are of the form: # $ORACLE_SID:$ORACLE_HOME: # # The first and second fields are the system identifier and home # directory of the database respectively.The third filed indicates # to the dbstart utility that the database should , Y, or should not, # N, be brought up at system boot time. # # Multiple entries with the same $ORACLE_SID are not allowed. # # # *:/data/app/oracle/9.2.0:N TRNG:/data/app/oracle/9.2.0:Y *:/data/app/oracle/9.2.0:N PPRD:/data/app/oracle/10.2.0:Y PPRD10:/data/app/oracle/10.2.0:N 以下的脚本检查oratab文件中列出的所有数据库,并且找出该数据库的状态(启动还是关闭) # # ckinstance.ksh # # ORATAB=/var/opt/oracle/oratab echo date echo Oracle Database(s) Status hostname :/n db=egrep -i :Y|:N $ORATAB | cut -d: -f1 | grep -v /# | grep -v /* pslist=ps -ef | grep pmon for i in $db ; do echo $pslist | grep ora_pmon_$i /dev/null 2$1 if ( $? ); then echo Oracle Instance - $i: Down else echo Oracle Instance - $i: Up fi done 和县招聘/post/job/使用以下的命令来确认该脚本是可以执行的: $ chmod 744 ckinstance.ksh $ ls -l ckinstance.ksh -rwxr-r- 1 oracle dba 657 Mar 5 22:59 ckinstance.ksh 以下是实例可用性的报表: $ sh ckinstance.ksh Wed May 13 12:51:20 PDT 2009 Oracle Database(s) Status gambels : Oracle Instance - PPRD: Up Oracle Instance - PPRD10: Up 2. 检查Oracle监听器的可用性 以下有一个类似的脚本检查Oracle监听器。假如监听器停了,该脚本将会重新启动监听器: # # cklsnr.sh # # #!/bin/ksh TNS_ADMIN=/var/opt/oracle; export TNS_ADMIN ORACLE_SID= PPRD10; export ORACLE_SID ORAENV_ASK=NO; export ORAENV_ASK PATH=$PATH:/bin:/usr/local/bin; export PATH . oraenv DBALIST=,;export DBALIST cd /var/opt/oracle rm -f lsnr.exist ps -ef | grep PPRD10 | grep -v grep lsnr.exist if -s lsnr.exist then echo else echo Alert | mailx -s Listener PPRD10 on hostname is down $DBALIST lsnrctl start PPRD10 fi 3. 检查Alert日志(ORA-XXXXX) # # ckalertlog.sh # # #!/bin/ksh EDITOR=vi; export EDITOR ORACLE_SID=PPRD10; export ORACLE_SID ORACLE_BASE=/data/app/oracle; export ORACLE_BASE ORACLE_HOME=$ORACLE_BASE/10.2.0; export ORACLE_HOME LD_LIBRARY_PATH=$ORACLE_HOME/lib; export LD_LIBRARY_PATH TNS_ADMIN=/var/opt/oracle;export TNS_ADMIN NLS_LANG=american; export NLS_LANG NLS_DATE_FORMAT=Mon DD YYYY HH24:MI:SS; export NLS_DATE_FORMAT ORATAB=/var/opt/oracle/oratab;export ORATAB PATH=$PATH:$ORACLE_HOME:$ORACLE_HOME/bin:/usr/ccs/bin:/bin:/usr/bin:/usr/sbin:/sbin:/usr/openwin/bin:/opt/bin:.; export PATH DBALIST=,;export DBALIST cd $ORACLE_BASE/admin/PPRD10/bdump if -f alert_PPRD10.log then mv alert_PPRD10.log alert_work.log touch alert_PPRD10.log cat alert_work.log alert_PPRD10.hist grep ORA- alert_work.log alert.err fi if cat alert.err | wc -l -gt 0 then mailx -s PPRD10ORACLEALERTERRORS $DBALIST dfk.result archive_filesystem=awk -F print $6 dfk.result archive_capacity=awk -F print $5 dfk.result if $archive_capacity 90% then echo Filesystem $archive_filesystem is $archive_capacity filled # try one of the following option depend on your need find $archive_filesystem -type f -mtime +2 -exec rm -r ; tar rman fi 5. 分析表和索引(以得到更好的性能) 以下我将展示假如传送参数到一个脚本中: # # analyze_table.sh # # #!/bin/ksh # input parameter: 1: passWord # 2: SID if ($#1) then echo Please enter oracle user password as the first parameter ! exit 0 fi if ($#2) then echo Please enter instance name as the second parameter! exit 0 fi 要传入参数以执行该脚本,输入: $ analyze_table.sh manager oradb1 脚本的第一部分产生了一个analyze.sql文件,里面包含了分析表用的语句。脚本的第二部分分析全部的表: # # analyze_table.sh # # sqlplus -s / as sysdba EOF set heading off set feed off set pagesize 200 set linesize 100 spool analyze_table.sql select ANALYZE TABLE | owner | . | segment_name | ESTIMATE STATISTICS SAMPLE 10 PERCENT; from dba_segments where segment_type = TABLE and owner not in (SYS, SYSTEM); spool off exit EOF sqlplus -s / as sysdba EOF ./analyze_table.sql exit EOF 以下是analyze.sql的一个例子: $ cat analyze.sql ANALYZE TABLE HIRWIN.JANUSAGE_SUMMARY ESTIMATE STATISTICS SAMPLE 10 PERCENT; ANALYZE TABLE HIRWIN.JANUSER_PROFILE ESTIMATE STATISTICS SAMPLE 10 PERCENT; ANALYZE TABLE APPSSYS.HIST_SYSTEM_ACTIVITY ESTIMATE STATISTICS SAMPLE 10 PERCENT; ANALYZE TABLE HTOMEH.QUEST_IM_VERSION ESTIMATE STATISTICS SAMPLE 10 PERCENT; ANALYZE TABLE JSTENZEL.HIST_SYS_ACT_0615 ESTIMATE STATISTICS SAMPLE 10 PERCENT; 6. 检查表空间的使用 以下的脚本检测表空间的使用。假如表空间只剩下10%,它将会发送一个警告email。 # # ck_tbsp.sh # # #!/bin/ksh EDITOR=vi; export EDITOR ORACLE_SID=PPRD10; export ORACLE_SID ORACLE_BASE=/data/app/oracle; export ORACLE_BASE ORACLE_HOME=$ORACLE_BASE/10.2.0; export ORACLE_HOME LD_LIBRARY_PATH=$ORACLE_HOME/lib; export LD_LIBRARY_PATH TNS_ADMIN=/var/opt/oracle;export TNS_ADMIN NLS_LANG=american; export NLS_LANG NLS_DATE_FORMAT=Mon DD YYYY HH24:MI:SS; export NLS_DATE_FORMAT ORATAB=/var/opt/oracle/oratab;export ORATAB PATH=$PATH:$ORACLE_HOME:$ORACLE_HOME/bin:/usr/ccs/bin:/bin:/usr/bin:/usr/sbin:/sbin:/usr/openwin/bin:/opt/bin:.; export PATH DBALIST=,;export DBALIST sqlplus -s / as sysdba EOF set feed off set linesize 100 set pagesize 200 column USED (MB) format a10 column FREE (MB) format a10 column TOTAL (MB) format a10 column PER_FREE format a10 spool tablespace.alert SELECT F.TABLESPACE_NAME, TO_CHAR (T.TOTAL_SPACE - F.FREE_SPACE),999,999) USED (MB), TO_CHAR (F.FREE_SPACE, 999,999) FREE (MB), TO_CHAR (T.TOTAL_SPACE, 999,999) TOTAL (MB), TO_CHAR (ROUND (F.FREE_SPACE/T.TOTAL_SPACE)*100),999)| % PER_FREE FROM ( SELECT TABLESPACE_NAME, ROUND (SUM (BLOCKS*(SELECT VALUE/1024 FROM V/$PARAMETER WHERE NAME = db_block_size)/1024) ) FREE_SPACE FROM DBA_FREE_SPACE GROUP BY TABLESPACE_NAME ) F, ( SELECT TABLESPACE_NAME, ROUND (SUM (BYTES/1048576) TOTAL_SPACE FROM DBA_DATA_FILES GROUP BY TABLESPACE_NAME ) T WHERE F.TABLESPACE_NAME = T.TABLESPACE_NAME AND (ROUND (F.FREE_SPACE/T.TOTAL_SPACE)*100) tablespace.tmp mailx -s TABLESPACEALERTforPPRD10 $DBALIST tablespace.tmp fi 警告email输出的例子如下: TABLESPACE_NAMEUSED (MB)FREE (MB)TOTAL (MB) PER_FREE - - - - - SYSTEM519401920 44 % MILLDATA5594411,000 44 % SYSAUX331609940 65 % MILLREPORTS 146254400 64 % 7. 查找出无效的数据库对象 以下查找出无效的数据库对象: # #invalid_object_alert.sh # #!/bin/ksh EDITOR=vi; export EDITOR ORACLE_SID=PPRD10; export ORACLE_SID ORACLE_BASE=/data/app/oracle; export ORACLE_BASE ORACLE_HOME=$ORACLE_BASE/10.2.0; export ORACLE_HOME LD_LIBRARY_PATH=$ORACLE_HOME/lib; export LD_LIBRARY_PATH TNS_ADMIN=/var/opt/oracle;export TNS_ADMIN NLS_LANG=american; export NLS_LANG NLS_DATE_FORMAT=Mon DD YYYY HH24:MI:SS; export NLS_DATE_FORMAT ORATAB=/var/opt/oracle/oratab;export ORATAB PATH=$PATH:$ORACLE_HOME:$ORACLE_HOME/bin:/usr/ccs/bin:/bin:/usr/bin:/usr/sbin:/sbin:/usr/openwin/bin:/opt/bin:.; export PATH DBALIST=,;export DBALIST sqlplus -s / as sysdba EOF set feed off set heading off column OWNER format a10 column OBJECT_NAME format a35 column OBJECT_TYPE format a10 column STATUS format a10 spool invalid_object.alert SELECT OWNER, OBJECT_NAME, OBJECT_TYPE, STATUS FROM DBA_OBJECTS WHERE STATUS = INVALID ORDER BY OWNER, OBJECT_TYPE, OBJECT_NAME; spool off exit EOF if cat invalid_object.alert | wc -l -gt 0 then mailx -s INVALID OBJECTS for PPRD10 $DBALIST invalid_object.alert fi $ more invalid_object.alert PUBLIC ALL_WM_LOCKED_TABLESSYNONYMINVALID PUBLIC ALL_WM_VERSIONED_TABLES SYNONYMINVALID PUBLIC DBA_WM_VERSIONED_TABLES SYNONYMINVALID PUBLIC SDO_CART_TEXT SYNONYMINVALID PUBLIC SDO_GEOMETRYSYNONYMINVALID PUBLIC SDO_REGAGGR SYNONYMINVALID PUBLIC SDO_REGAGGRSETSYNONYMINVALID PUBLIC SDO_REGIONSYNONYMINVALID PUBLIC SDO_REGIONSET SYNONYMINVALID PUBLIC USER_WM_LOCKED_TABLES SYNONYMINVALID PUBLIC USER_WM_VERSIONED_TABLESSYNONYMINVALID PUBLIC WM_COMPRESS_BATCH_SIZES SYNONYMINVALID 8. 监视用户和事务(死锁等) 以下的脚本在死锁发生的时候发送一个警告e-mail: # # deadlock_alert.sh # # #!/bin/ksh EDITOR=vi; export EDITOR ORACLE_SID=PPRD10; export ORACLE_SID ORACLE_BASE=/data/app/oracle; export ORACLE_BASE ORACLE_HOME=$ORACLE_BASE/

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论