本鲨单实列日常巡检脚本涉及部分DG 代码超长.

来源:互联网 发布:新版淘宝购物评级在哪 编辑:程序博客网 时间:2024/04/30 15:59

只要修改部分就可以 开头部分

#修改export ORACLE_BASE=/u01/app/oracleexport ORACLE_SID=orclexport SERVICE_NAMES=orcl_pdexport DBUNAME=orcl_pdexport HOST_NAME=oraclemainexport ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1export TNS_ADMIN=$ORACLE_HOME/network/adminexport TRACE=$ORACLE_BASE/diag/rdbms/$DBUNAME/$ORACLE_SID/tracelisnter_log=$ORACLE_BASE/diag/tnslsnr/$HOST_NAME/listenerdiag_log=$ORACLE_BASE/diag/rdbmsdump_log=$ORACLE_BASE/admin/$ORACLE_SID/dpdumpaudit_log=$ORACLE_BASE/admin/$ORACLE_SID/adumparchive_log=/u01/archiveThreadID=1flash_dir=backup_dir=/u01/backup/user='shark'archivelog_backup_set='/u01/backup/orcl_archivelog_*'Rman_backup_set='/u01/backup/orcl_datafile_level_*'#修改截止

和结尾部分 收邮件人地址. 当然要保证你的LINUX服务器上能用MAIL 命令发生出邮件.

 mail  -s `date +%Y%m%d%H`'-'`hostname`_DayCheck shark@139.com  < $LOGFILE

#!/bin/bash#11.2.0.1 #修改export ORACLE_BASE=/u01/app/oracleexport ORACLE_SID=orclexport SERVICE_NAMES=orcl_pdexport DBUNAME=orcl_pdexport HOST_NAME=oraclemainexport ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1export TNS_ADMIN=$ORACLE_HOME/network/adminexport TRACE=$ORACLE_BASE/diag/rdbms/$DBUNAME/$ORACLE_SID/tracelisnter_log=$ORACLE_BASE/diag/tnslsnr/$HOST_NAME/listenerdiag_log=$ORACLE_BASE/diag/rdbmsdump_log=$ORACLE_BASE/admin/$ORACLE_SID/dpdumpaudit_log=$ORACLE_BASE/admin/$ORACLE_SID/adumparchive_log=/u01/archiveThreadID=1flash_dir=backup_dir=/u01/backup/user='shark'archivelog_backup_set='/u01/backup/orcl_archivelog_*'Rman_backup_set='/u01/backup/orcl_datafile_level_*'#修改截止LogName="/var/log/sa/sa`date --date='yesterday' +%d`"export LANG=zh_CN.UTF-8export NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK"LOGFILE=/home/oracle/dbscripts/logs/ORACLE_MAIN_`date +%F_%H_%M`.txt
#http://blog.csdn.net/zengmuanshaexec >> $LOGFILEecho "ORACLE_MAIN EVERY DAY CHECK:"dateecho " "echo "All Process Number:" ps -ef | wc -lecho "System Process Number: " ps -ef| awk '{print $1}'|grep root | grep -v grep |wc -lecho "Grid RAC Process Number:" ps -ef |awk '{print $1}'|grep grid | grep -v grep |wc -lecho "Oracle User Procuess Number:"ps -ef |awk '{print $1}'|grep oracle | grep -v grep |wc -lecho "Oracle DB BackGround Process Number:" ps -ef| grep ora_ |grep -v grep | wc -lecho "Oracle DB Client Process Link Number:"ps -ef |grep LOCAL=NO | grep -v grep | wc -lecho "Oracle User NO DB Procuess Number:"ps -ef|grep oracle|grep -v root|grep -v LOCAL=NO|grep -v ora_|wc -lecho "Other User Process Number: " ps -ef| awk '{print $1}'|grep -v root | grep -v oracle| grep -v grid| grep -v grep |wc -lecho "检查结论: 正常"echo -eecho "系统运行了时间:"uptime | awk '{print($2,$3,$4,$5)}'echo -eecho "当前连接用户数:"uptime | awk '{print($6,$7)}'echo -eecho "当前系统负载情况 一分钟,五分钟,十五分钟:"echo "比如1.73 说明超负荷73%"uptime | awk '{print($9,$10,$11,$12,$13)}'echo -eecho "NUMA:"numactl --showecho -enumactl --hardwareecho " " echo "数据库重要进程是否存在?" ps -ef|grep -E ora_ckpt_\|ora_smon_\|ora_cjq\|ora_dbrm_\|ora_lgwr\|asm_pmon\|ora_pmon|grep -v grepecho "检查结论:正常" echo " " echo "监听进程状态如何?"$ORACLE_HOME/bin/lsnrctl statusecho "检查结论:正常"echo " "echo "系统挂接点容量大小"df  -hecho "检查结论:正常"echo -eecho " "echo "诊断跟踪LOG大小"du -h --max-depth=1 $diag_logecho "检查结论:正常"echo " "       echo "监听跟踪LOG大小"  du -h --max-depth=1 $lisnter_logecho "检查结论:正常"echo " "echo "审计LOG大小"du -h --max-depth=1 $audit_logecho "检查结论:正常"echo " "echo "DUMP LOG大小"du -h --max-depth=1 $dump_logecho "检查结论:正常"echo " "echo "系统内存大小,剩余量"free -mecho "检查结论:正常"echo -eecho "共享段"ipcs -lipcs -a echo -eecho " "echo "检查备份脚本执行是否成功"ls -htrl $Rman_backup_set |tail -1echo "检查结论:正常"echo -eecho " "echo "归档日志备份是否成功"ls -htrl $archivelog_backup_set|tail -1echo "检查结论:正常"source /home/oracle/.bash_profileexport LANG=zh_CN.UTF-8export NLS_LANG="SIMPLIFIED CHINESE_CHINA.AL32UTF8"sqlplus -s / as sysdba <<EOFset sqlprompt ''set heading onset wrap onset pagesize 1000set linesize 250set echo offset feedback offset timing  offset colsep ' 'set autot offcol NAME format a6col LOG_MODE format a10col OPEN_MODE format a10col PROTECTION_MODE format a20col DATABASE_ROLE format a13col SWITCHOVER_STATUS format a15col SUPPLEMENTAL_LOG_DATA_MIN format a15col FORCE_LOGGING format a10col CURRENT_SCN format 9999999999999set tab offset head offselect chr(10) from dual;set head onprompt "List Rman Backup Detail"col input format a12col output format a12col status format a9col week format a15SELECT start_time,end_time,to_char(start_time,'day') as week,input,output,status,input_type,zip_ratioFROM(  SELECT START_TIME,         END_TIME,         INPUT_BYTES_DISPLAY as input,         OUTPUT_BYTES_DISPLAY as output,         STATUS,         INPUT_TYPE,         ROUND(COMPRESSION_RATIO*100,2) as zip_ratio    FROM V\$RMAN_BACKUP_SUBJOB_DETAILS   ORDER BY START_TIME DESC) WHERE ROWNUM<35;set head offselect chr(10) from dual;set head onprompt "检查结论:正常"col name format a30prompt "Rman Config Info"col value format a70SELECT * FROM V\$RMAN_CONFIGURATION;set head offselect chr(10) from dual;set head onprompt "检查数据库状态"col name format a20col log_mode format a12COL OPEN_MODE FORMAT A30SELECT NAME,       LOG_MODE,       OPEN_MODE,       PROTECTION_MODE,       DATABASE_ROLE,       SWITCHOVER_STATUS,       FORCE_LOGGING,       CURRENT_SCN  FROM V\$DATABASE;col db_unique_name format a30col flashback_on format a12SELECT DB_UNIQUE_NAME,       ARCHIVELOG_COMPRESSION,       DATAGUARD_BROKER,       GUARD_STATUS,       FLASHBACK_ONFROM V\$DATABASE;set head offselect chr(10) from dual;set head onprompt "检查结论:正常"  set head offselect chr(10) from dual;set head onprompt "归档日志目的状态"col DEST_NAME format a20col STATUS format a8col TYPE format a10col DATABASE_MODE format a15col RECOVERY_MODE format a23col PROTECTION_MODE format a20col DESTINATION format a15col SYNCHRONIZED format a15col GAP_STATUS format a10SELECT        DEST_NAME,       STATUS,       TYPE,       DATABASE_MODE,       RECOVERY_MODE,       PROTECTION_MODE,       DESTINATION,       SYNCHRONIZED,       GAP_STATUS  FROM V\$ARCHIVE_DEST_STATUS A WHERE A.DEST_ID < 3;set head offselect chr(10) from dual;set head onprompt "检查结论:正常" set head offselect chr(10) from dual;set head onprompt "灾备日志应用差异数"select m.max_sequenc,a.max_applied,d.max_deleted,r.max_archive,m.max_sequenc-a.max_applied from(select max(sequence#)  as max_sequenc   from v\$archived_log where thread#=$ThreadID ) m,(select max(sequence#)  as max_applied   from v\$archived_log where applied='YES'  and  thread#=$ThreadID) a,(select max(sequence#)  as max_deleted   from v\$archived_log where deleted='YES'  and  thread#=$ThreadID) d,(select max(sequence#)  as max_archive   from v\$archived_log where archived='YES' and  thread#=$ThreadID) r;set head offselect chr(10) from dual;set head onprompt "检查结论:正常" set head offselect chr(10) from dual;set head onprompt "检查无效索引"SELECT OWNER,       INDEX_NAME,       TABLE_NAME,       STATUS  FROM DBA_INDEXES WHERE STATUS = ('INVALID')       AND OWNER = upper('$user')UNION ALLSELECT INDEX_OWNER    AS OWNER,       INDEX_NAME,       PARTITION_NAME AS TABLE_NAME,       STATUS  FROM DBA_IND_PARTITIONS WHERE SUBPARTITION_COUNT = 0       AND STATUS = 'UNUSABLE'       AND INDEX_OWNER =  upper('$user')UNION ALLSELECT INDEX_OWNER       AS OWNER,       INDEX_NAME,       SUBPARTITION_NAME AS TABLE_NAME,       STATUS STATUS   FROM DBA_IND_SUBPARTITIONS WHERE STATUS = 'UNUSABLE'       AND INDEX_OWNER =  upper('$user');set head offselect chr(10) from dual;set head onprompt "检查结论:正常"     set head offselect chr(10) from dual;set head onprompt "检查无效对象"col object_name format a30col owner format a10SELECT OWNER,OBJECT_NAME, OBJECT_TYPE, LAST_DDL_TIME, STATUS  FROM DBA_OBJECTS WHERE OWNER NOT IN ('ANONYMOUS','APEX_030200', 'SHARK', 'APE_PUBLIC_USER','APPQOSSYS')   AND OWNER NOT IN ('CTXSYS','DBSNMP','DIP','EXFSYS','FLOWS_FILES','MDDATA','MGMT_VIEW')   AND OWNER NOT IN ('OLAPSYS','ORACLE_OCM','ORDDATA','ORDPLUGINS','ORDSYS','OUTLN','OWBSYS')      AND OWNER NOT IN ('OWBSYS_AUDIT','PDEONE','PUBLIC','SCOTT','SI_INFORMTN_SCHEMA','SPATITAL_CSW_ADMIN_USER')      AND OWNER NOT IN ('SPATITAL_WFS_ADMIN_USR','SYS','SYSTEM','SYSMAN','WMSYS','XDB','XS$NULL')      AND STATUS <> 'VALID'   AND OBJECT_NAME NOT IN('PDTYPES','P_CHECK_BATCH','P_DUP_FEE_CFG','P_TRANS_IN','P_TRANS_OUT') ORDER BY LAST_DDL_TIME ASC;set head offselect chr(10) from dual;set head onprompt "检查结论:正常" set head offselect chr(10) from dual;set head onprompt "表空间大小,使用率,剩余量" SELECT          TABLESPACE_NAME as  Space_Name,         TOTAL_SPACE     as  Max_GB,         FILE_MAX_SPACE  as  File_GB,         TOTAL_USED_SPACE as Used_GB,         MAX_USED_RATE   as  Used_Rate     FROM (SELECT D.TABLESPACE_NAME,               TOTAL_SPACE-FREE_SPACE AS TOTAL_USED_SPACE,                 TOTAL_SPACE,               FILE_MAX_SPACE,               ROUND(((TOTAL_SPACE - FREE_SPACE) / FILE_MAX_SPACE) * 100, 2) MAX_USED_RATE          FROM (               SELECT TABLESPACE_NAME,                       ROUND(SUM(BYTES) / (1024 * 1024 * 1024), 2) TOTAL_SPACE,                       ROUND(SUM(MAXBYTES) / (1024 * 1024 * 1024), 2) FILE_MAX_SPACE                  FROM DBA_DATA_FILES                 GROUP BY TABLESPACE_NAME                 ) D,               (                SELECT TABLESPACE_NAME,                       ROUND(SUM(BYTES) / (1024 * 1024 * 1024), 2) FREE_SPACE                  FROM DBA_FREE_SPACE                 GROUP BY TABLESPACE_NAME                ) F         WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME(+)       UNION ALL        SELECT D.TABLESPACE_NAME,               USED_SPACE AS TOTAL_USED_SPACE,                TOTAL_SPACE,               FILE_MAX_SPACE,               ROUND(NVL(USED_SPACE, 1) / NVL(FILE_MAX_SPACE, 1) * 100, 2) MAX_USED_RATE          FROM (SELECT TABLESPACE_NAME,                       ROUND(SUM(BYTES) / (1024 * 1024 * 1024), 2) TOTAL_SPACE,                       ROUND(SUM(MAXBYTES) / (1024 * 1024 * 1024), 2) FILE_MAX_SPACE                  FROM DBA_TEMP_FILES                 GROUP BY TABLESPACE_NAME) D,               (SELECT TABLESPACE_NAME,                       ROUND(SUM(BYTES_USED) / (1024 * 1024 * 1024), 2) USED_SPACE                  FROM V\$TEMP_SPACE_HEADER                 GROUP BY TABLESPACE_NAME) F         WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME(+)         ) WHERE MAX_USED_RATE > 5 ORDER BY MAX_USED_RATE DESC;set head offselect chr(10) from dual;set head onprompt "检查结论:正常" set head offselect chr(10) from dual;set head onprompt "检查 运行的JOB"col job_name format a30col job_action format a30SELECT JOB_NAME,JOB_ACTION,RUN_COUNT,FAILURE_COUNT FROM DBA_SCHEDULER_JOBS WHERE owner= upper('$user');prompt "检查结论:正常"col what format a45col instance format 99col log_user format a6col broken format a6col next_sec format a10select job,INSTANCE,log_user,what,total_time,broken,failures next_date,next_sec from dba_jobs;prompt "检查结论:正常"col job_name format a25col cpu_used format a20col owner    format a10col status   format a10col run_date format a20SELECT LOG_ID,               TO_CHAR(LOG_DATE, 'YYYY-MM-DD HH24:MI:SS') RUN_DATE,               OWNER,               JOB_NAME,               STATUS,               CPU_USED          FROM DBA_SCHEDULER_JOB_RUN_DETAILS         WHERE OWNER IN ( UPPER('$user'),UPPER('$user'))         AND LOG_DATE > TRUNC(SYSDATE)         ORDER BY 2 ASC; set head offselect chr(10) from dual;set head onprompt "检查结论:正常" set head offselect chr(10) from dual; set head onprompt "自动任务情况:"alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';alter session set nls_timestamp_tz_format='yyyy-mm-dd hh24:mi:ss:ff';alter session set NLS_TIMESTAMP_FORMAT='YYYY-MM-DD HH24:MI:SS:FF';col client_name format a32col consumer_group format a30col window_group format a32col servICE_name format a15col attributes format a55SELECT CLIENT_NAME,STATUS,CONSUMER_GROUP,WINDOW_GROUP,SERVICE_NAME,ATTRIBUTES FROM DBA_AUTOTASK_CLIENT; col window_next_time format a26col WINDOW_ACTIVE format a13SELECT * FROM DBA_AUTOTASK_WINDOW_CLIENTS;col job_info format a50col job_name format a30col window_name format a17col job_status format a11col job_duration format a13col window_start_time format a26col job_start_time format a26SELECT CLIENT_NAME,WINDOW_NAME,WINDOW_START_TIME,JOB_NAME,JOB_STATUS,JOB_START_TIME,JOB_DURATION,JOB_ERROR,JOB_INFO  FROM (          SELECT CLIENT_NAME,                 WINDOW_NAME,                 WINDOW_START_TIME,                 JOB_NAME,                 JOB_STATUS,                 JOB_START_TIME,                 JOB_DURATION,                 JOB_ERROR,                 JOB_INFO,                 ROW_NUMBER() OVER(PARTITION BY CLIENT_NAME ORDER BY JOB_START_TIME DESC) AS RN            FROM DBA_AUTOTASK_JOB_HISTORY          ) TWHERE RN <= 10;set head offselect chr(10) from dual;set head onprompt "检查结论:正常"  set head off select chr(10) from dual; set head on prompt "内存动态组件分配情况:"col component for a25SELECT COMPONENT,       CURRENT_SIZE / 1024 / 1024 / 1024 AS CURRENT_GB,       MIN_SIZE / 1024 / 1024 / 1024 AS MINGB,       MAX_SIZE / 1024 / 1024 / 1024 AS MAXGB,       USER_SPECIFIED_SIZE / 1024 / 1024 / 1024 AS SPECIFIEDMB,       OPER_COUNT,       LAST_OPER_TYPE,       LAST_OPER_MODE,       LAST_OPER_TIME,       GRANULE_SIZE / 1024 / 1024 as GRANULE_MB  FROM V\$MEMORY_DYNAMIC_COMPONENTS; set head off select chr(10) from dual; prompt "检查结论:正常" set head offselect chr(10) from dual; set head onprompt "PGA内存分配释放:"col name format a40col value format 9999,9999,9999,9999.99col unit format a10select name, value, unit,(case         when unit = 'bytes' then          trunc(value / 1024 / 1024 / 1024, 3)         else          NULL       end) as UNIT_GB  from V\$PGASTAT;set head offselect chr(10) from dual; set head on  prompt "检查PGA工作区执行情况:"select name, value, round(100 * (value / decode(                         (select sum(value)                           from v\$sysstat                           where name like 'workarea execution%'),                            0, null, (select sum(value)                                        from v\$sysstat                                       where name like                                             'workarea execution%'))), 4) as Rate  from v\$sysstat where name like 'workarea executions%';set head offselect chr(10) from dual; set head onprompt "工作区域命中次数:"SELECT LOW_OPTIMAL_SIZE / 1024 LOW_KB, (HIGH_OPTIMAL_SIZE + 1) / 1024 HIGH_KB, OPTIMAL_EXECUTIONS,  ONEPASS_EXECUTIONS,  MULTIPASSES_EXECUTIONS  FROM V\$SQL_WORKAREA_HISTOGRAM WHERE TOTAL_EXECUTIONS != 0;set head offselect chr(10) from dual; set head on prompt "检查PGA内存使用情况:"SELECT A.PROGRAM,COUNT(PID),ROUND(SUM(PGA_USED_MEM / 1024 / 1024),3)AS PGA_USE_MB,ROUND(SUM(PGA_ALLOC_MEM / 1024 / 1024),3)AS PGA_ALLOC_MB,ROUND(SUM(PGA_FREEABLE_MEM / 1024 / 1024),3)AS PGA_FREE_MB,ROUND(SUM(PGA_MAX_MEM / 1024 / 1024),3)AS PGA_MAX_MBFROM V\$PROCESS AINNER JOIN V\$SESSION BON A.ADDR = B.PADDRGROUP BY A.PROGRAMORDER BY PGA_MAX_MB DESC;set head offselect chr(10) from dual;prompt "检查结论:正常" col NEWTEXT format a100col SQL_ID FORMAT A15COL EXE   FormAT 9999,9999,9999col ms format 999,999set head offselect chr(10) from dual;set head onprompt "执行次数最多的SQL:"SELECT SQL_ID,RPAD(TEXT,100,' ') AS NEWTEXT,EXE,MS  FROM (         SELECT SQL_ID,               SUBSTR(SQL_TEXT, 1, 100) AS TEXT,               SUM(EXECUTIONS) EXE,               ROUND(SUM(ELAPSED_TIME)/SUM(DECODE(EXECUTIONS,0,1,EXECUTIONS))/1000) AS MS          FROM V\$SQL         GROUP BY SQL_ID,                  SUBSTR(SQL_TEXT, 1, 100)         ORDER BY EXE DESC         ) WHERE ROWNUM < 11;set head offselect chr(10) from dual;prompt "检查结论:正常" set head offselect chr(10) from dual;set head onprompt "内存读取最多的"col memory_get_mb format 999,999,999SELECT SQL_ID,RPAD(TEXT,100,' ') AS NEWTEXT,EXE,MEMORY_GET_MB  FROM (         SELECT SQL_ID,               SUBSTR(SQL_TEXT, 1, 100) AS TEXT,               SUM(EXECUTIONS) EXE,               ROUND(SUM(BUFFER_GETS)/SUM(DECODE(EXECUTIONS,0,1,EXECUTIONS))*8/1024) AS MEMORY_GET_MB          FROM V\$SQL         GROUP BY SQL_ID,                  SUBSTR(SQL_TEXT, 1, 100)         ORDER BY MEMORY_GET_MB DESC         ) WHERE ROWNUM < 11; set head offselect chr(10) from dual;prompt "检查结论:正常"  set head offselect chr(10) from dual;set head onprompt "硬盘读取最多的"col disk_reads_mb format 999,999SELECT SQL_ID,RPAD(TEXT,100,' ') AS NEWTEXT,EXE,DISK_READS_MB  FROM (         SELECT SQL_ID,               SUBSTR(SQL_TEXT, 1, 100) AS TEXT,               SUM(EXECUTIONS) EXE,               ROUND(SUM(DISK_READS)/SUM(DECODE(EXECUTIONS,0,1,EXECUTIONS))*8/1024) AS DISK_READS_MB          FROM V\$SQL         GROUP BY SQL_ID,                  SUBSTR(SQL_TEXT, 1, 100)         ORDER BY DISK_READS_MB DESC         ) WHERE ROWNUM < 11; set head offselect chr(10) from dual;prompt "检查结论:正常" set head offselect chr(10) from dual;set head onprompt "整体时间最多的"col elapsed_time_second format 999,999SELECT SQL_ID,RPAD(TEXT,100,' ') AS NEWTEXT,EXE,ELAPSED_TIME_SECOND  FROM (         SELECT SQL_ID,               SUBSTR(SQL_TEXT, 1, 100) AS TEXT,               SUM(EXECUTIONS) EXE,               ROUND(SUM(ELAPSED_TIME)/SUM(DECODE(EXECUTIONS,0,1,EXECUTIONS))/1000/1000) AS ELAPSED_TIME_SECOND          FROM V\$SQL         GROUP BY SQL_ID,                  SUBSTR(SQL_TEXT, 1, 100)         ORDER BY ELAPSED_TIME_SECOND DESC         ) WHERE ROWNUM < 11; set head offselect chr(10) from dual;prompt "检查结论:正常" set head offselect chr(10) from dual;set head onprompt "CPU时间最多的"col cpu_time_second format 999,999SELECT SQL_ID,RPAD(TEXT,100,' ') AS NEWTEXT,EXE,CPU_TIME_SECOND  FROM (         SELECT SQL_ID,               SUBSTR(SQL_TEXT, 1, 100) AS TEXT,               SUM(EXECUTIONS) EXE,               ROUND(SUM(CPU_TIME)/SUM(DECODE(EXECUTIONS,0,1,EXECUTIONS))/1000/1000) AS CPU_TIME_SECOND          FROM V\$SQL         GROUP BY SQL_ID,                  SUBSTR(SQL_TEXT, 1, 100)         ORDER BY CPU_TIME_SECOND DESC         ) WHERE ROWNUM < 11; set head offselect chr(10) from dual;prompt "检查结论:正常" set head offselect chr(10) from dual;set head onprompt "排序最多的"col sorts format 9999,9999,9999SELECT SQL_ID,RPAD(TEXT,100,' ') AS NEWTEXT,EXE,SORTS  FROM (         SELECT SQL_ID,               SUBSTR(SQL_TEXT, 1, 100) AS TEXT,               SUM(EXECUTIONS) EXE,               ROUND(SUM(sorts)/SUM(DECODE(EXECUTIONS,0,1,EXECUTIONS))) AS sorts          FROM V\$SQL         GROUP BY SQL_ID,                  SUBSTR(SQL_TEXT, 1, 100)         ORDER BY sorts DESC         ) WHERE ROWNUM < 11; set head offselect chr(10) from dual;prompt "检查结论:正常" set head offselect chr(10) from dual;set head on prompt "解析最多的"col parse_calls format 9999,9999,9999SELECT SQL_ID,RPAD(TEXT,100,' ') AS NEWTEXT,EXE,PARSE_CALLS  FROM (         SELECT SQL_ID,               SUBSTR(SQL_TEXT, 1, 100) AS TEXT,               SUM(EXECUTIONS) EXE,               ROUND(SUM(PARSE_CALLS)) AS PARSE_CALLS          FROM V\$SQL         GROUP BY SQL_ID,                  SUBSTR(SQL_TEXT, 1, 100)         ORDER BY PARSE_CALLS DESC         ) WHERE ROWNUM < 11; set head offselect chr(10) from dual;prompt "检查结论:正常"  set head offselect chr(10) from dual;set head onprompt "用户IO等待最多的"col user_io_waite_seconds format 999,999SELECT SQL_ID,RPAD(TEXT,100,' ') AS NEWTEXT,EXE,USER_IO_WAITE_SECONDS  FROM (         SELECT SQL_ID,               SUBSTR(SQL_TEXT, 1, 100) AS TEXT,               SUM(EXECUTIONS) EXE,               ROUND(SUM(USER_IO_WAIT_TIME)/SUM(DECODE(EXECUTIONS,0,1,EXECUTIONS))/1000000) AS USER_IO_WAITE_SECONDS          FROM V\$SQL         GROUP BY SQL_ID,                  SUBSTR(SQL_TEXT, 1, 100)         ORDER BY USER_IO_WAITE_SECONDS DESC         ) WHERE ROWNUM < 11;set head offselect chr(10) from dual;prompt "检查结论:正常" set head offselect chr(10) from dual;set head on col rows_processed format 9999,9999,9999prompt "处理数据最多的"SELECT SQL_ID,RPAD(TEXT,100,' ') AS NEWTEXT,EXE,ROWS_PROCESSED  FROM (         SELECT SQL_ID,               SUBSTR(SQL_TEXT, 1, 100) AS TEXT,               SUM(EXECUTIONS) EXE,               ROUND(SUM(ROWS_PROCESSED)/SUM(DECODE(EXECUTIONS,0,1,EXECUTIONS))) AS ROWS_PROCESSED          FROM V\$SQL         GROUP BY SQL_ID,                  SUBSTR(SQL_TEXT, 1, 100)         ORDER BY ROWS_PROCESSED DESC         ) WHERE ROWNUM < 11;set head offselect chr(10) from dual;prompt "检查结论:正常" set head offselect chr(10) from dual;set head on col concurrency_wait_time_ms format 999,999prompt "并发等待最多的"SELECT SQL_ID,RPAD(TEXT,100,' ') AS NEWTEXT,EXE,CONCURRENCY_WAIT_TIME_MS  FROM (         SELECT SQL_ID,               SUBSTR(SQL_TEXT, 1, 100) AS TEXT,               SUM(EXECUTIONS) EXE,               ROUND(SUM(CONCURRENCY_WAIT_TIME)/SUM(DECODE(EXECUTIONS,0,1,EXECUTIONS))/1000) AS CONCURRENCY_WAIT_TIME_MS          FROM V\$SQL         GROUP BY SQL_ID,                  SUBSTR(SQL_TEXT, 1, 100)         ORDER BY CONCURRENCY_WAIT_TIME_MS DESC         ) WHERE ROWNUM < 11;    set head offselect chr(10) from dual;prompt "检查结论:正常"  set head offselect chr(10) from dual;set head on  col "整体微妙" format 999,999prompt "重要性SQL" SELECT SQL_ID,RPAD(TEXT,100,' ') AS NEWTEXT,EXE,"整体微妙"FROM( SELECT SQL_ID,       SUBSTR(SQL_TEXT, 1, 100) AS TEXT,       SUM(EXECUTIONS) EXE,       ROUND(SUM(ELAPSED_TIME) / SUM(DECODE(EXECUTIONS, 0, 1, EXECUTIONS))) AS "整体微妙"  FROM V\$SQL WHERE SQL_ID IN ('3g84r6ptyfq6q', '76pns091r3a50', '94vfur4vk6d9y', 'fnjwsvqu2ubc4', '96j8mqktg8awc', '7s23b7adgdsva', 'dkzqdzhbyn0c0',                  'gg1g9grybw7vu', '5fhy27g21ck59', 'fhmbn8154sy95', 'fsthx933ucyfm', 'fu4v11a2n93ak', '1gwj0ash8t2zv', '5b5bmcaa75f3b',                  '8c7qpyaphxp49', '80zarxz2hdp7t', 'c6wqsac2jtsrh', '4xtu0gkggdz73', '0c3awf5jwu04d', '1q8xmykg0ukbz', '2ggwubyc8fqat',                  'ctsqvum2vqvrr', '60dng3n4vaw8b', '588r0474qz0n9', '4zm7zpfgwr39g', '0sjfvqqsav8nr', '65xw638ka0r0u', '6ht9zsgs5m8cq','2vq4wtk4szgs5') GROUP BY SQL_ID,          SUBSTR(SQL_TEXT, 1, 100) ORDER BY 4 DESC);set head offselect chr(10) from dual;prompt "检查结论:正常"  set head offselect chr(10) from dual;set head on  prompt "超过30分钟被取消的SQL"COL USERNAME FORMAT A10COL MODULE FORMAT A20SELECT        USERNAME,       MODULE,       SQL_ID,       SQL_EXEC_START,              ROUND(ELAPSED_TIME / 1000000) AS SECONDS,       ROUND(CPU_TIME/1000000) AS "CPU_SECOND",       ROUND(BUFFER_GETS*8/1024) AS "MEM_MB",       ROUND(PHYSICAL_READ_BYTES/1024/1024) AS "DISK_MB",       ROUND(CONCURRENCY_WAIT_TIME/1000000) AS "CON_WAIT_SEC",       ROUND(CLUSTER_WAIT_TIME/1000000) AS "RAC_WAIT_SEC",       ROUND(USER_IO_WAIT_TIME/1000000) AS "IO_WAIT_SEC"       --BINDS_XML  FROM V\$SQL_MONITOR M WHERE MODULE = 'JDBC Thin Client'   AND STATUS = 'DONE (ERROR)'   ORDER BY SQL_EXEC_START ASC;set head offselect chr(10) from dual;prompt "检查结论:正常"   set head offselect chr(10) from dual;set head on col xvalue format 9999,9999,9999PROMPT "XVALUE 累积总次数"prompt "逻辑读最多的段"SELECT * FROM(SELECT OBJECT_NAME,OBJECT_TYPE,       SUBOBJECT_NAME,       SUM(VALUE) xvalue  FROM V\$SEGMENT_STATISTICS WHERE STATISTIC_NAME = LOWER('LOGICAL READS') GROUP BY OBJECT_NAME,OBJECT_TYPE,          SUBOBJECT_NAME ORDER BY 4 DESC          )WHERE ROWNUM <11;set head offselect chr(10) from dual;prompt "检查结论:正常" set head offselect chr(10) from dual;set head on prompt "物理读最多的段"SELECT * FROM(SELECT  OBJECT_NAME,OBJECT_TYPE,       SUBOBJECT_NAME,       SUM(VALUE) xvalue  FROM V\$SEGMENT_STATISTICS WHERE STATISTIC_NAME = LOWER('physical reads') GROUP BY OBJECT_NAME,OBJECT_TYPE,          SUBOBJECT_NAME ORDER BY 4 DESC          )WHERE ROWNUM <11;set head offselect chr(10) from dual;prompt "检查结论:正常" set head offselect chr(10) from dual;set head on prompt "直接路径读最多的段"SELECT * FROM(SELECT  OBJECT_NAME,OBJECT_TYPE,       SUBOBJECT_NAME,       SUM(VALUE) xvalue  FROM V\$SEGMENT_STATISTICS WHERE STATISTIC_NAME = LOWER('physical reads direct') GROUP BY OBJECT_NAME,OBJECT_TYPE,          SUBOBJECT_NAME ORDER BY 4 DESC          )WHERE ROWNUM <11;set head offselect chr(10) from dual;prompt "检查结论:正常" set head offselect chr(10) from dual;set head on prompt "段扫描最多的段"SELECT * FROM(SELECT  OBJECT_NAME,OBJECT_TYPE,       SUBOBJECT_NAME,       SUM(VALUE) xvalue  FROM V\$SEGMENT_STATISTICS WHERE STATISTIC_NAME = LOWER('segment scans') GROUP BY OBJECT_NAME,OBJECT_TYPE,          SUBOBJECT_NAME ORDER BY 4 DESC          )WHERE ROWNUM <11;set head offselect chr(10) from dual;prompt "检查结论:正常" set head offselect chr(10) from dual;set head on prompt "行锁等待最多的段"SELECT * FROM(SELECT  OBJECT_NAME,OBJECT_TYPE,       SUBOBJECT_NAME,       SUM(VALUE) xvalue  FROM V\$SEGMENT_STATISTICS WHERE STATISTIC_NAME = LOWER('row lock waits') GROUP BY OBJECT_NAME,OBJECT_TYPE,          SUBOBJECT_NAME ORDER BY 4 DESC          )WHERE ROWNUM <11;set head offselect chr(10) from dual;prompt "检查结论:正常" set head offselect chr(10) from dual;set head onprompt "缓冲等待最多的段" SELECT * FROM(SELECT  OBJECT_NAME,OBJECT_TYPE,       SUBOBJECT_NAME,       SUM(VALUE) xvalue  FROM V\$SEGMENT_STATISTICS WHERE STATISTIC_NAME = LOWER('buffer busy waits') GROUP BY OBJECT_NAME,OBJECT_TYPE,          SUBOBJECT_NAME ORDER BY 4 DESC          )WHERE ROWNUM <11;set head offselect chr(10) from dual;prompt "检查结论:正常" set head offselect chr(10) from dual;set head on prompt "事务等待最多的段"SELECT * FROM(SELECT  OBJECT_NAME,OBJECT_TYPE,       SUBOBJECT_NAME,       SUM(VALUE) xvalue   FROM V\$SEGMENT_STATISTICS WHERE STATISTIC_NAME = ('ITL waits') GROUP BY OBJECT_NAME,OBJECT_TYPE,          SUBOBJECT_NAME ORDER BY 4 DESC          )WHERE ROWNUM <11;set head offselect chr(10) from dual;prompt "检查结论:正常" set head offselect chr(10) from dual;set head on prompt "审计表大小和表空间"COL SEGMENT_NAME FORMAT A30SELECT SEGMENT_NAME,TABLESPACE_NAME,BYTES/1024 AS KB FROM DBA_SEGMENTS WHERE SEGMENT_NAME LIKE 'AUD%' ; set head offselect chr(10) from dual;prompt "检查结论:正常" set head offselect chr(10) from dual;set head on prompt "$user 模式大小"SELECT ROUND(SUM(BYTES)/1024/1024/1024)  AS GB FROM DBA_SEGMENTS WHERE OWNER=upper('$user');set head offselect chr(10) from dual;prompt "检查结论:正常" set head offselect chr(10) from dual;set head on prompt "$user 索引和表大小"SELECT SEGMENT_TYPE,ROUND(SUM(BYTES)/1024/1024/1024)  AS GB FROM DBA_SEGMENTS WHERE OWNER=upper('$user') GROUP BY SEGMENT_TYPE order by segment_type,gb desc;set head offselect chr(10) from dual;prompt "检查结论:正常" set head offselect chr(10) from dual;set head on prompt "$user 普通索引大小TOP10"SELECT * FROM (SELECT SEGMENT_NAME,ROUND(SUM(BYTES)/1024/1024/1024)  AS GB FROM DBA_SEGMENTS WHERE OWNER=upper('$user')AND SEGMENT_TYPE='INDEX' GROUP BY SEGMENT_NAME  ORDER BY GB DESC) WHERE ROWNUM<11 ;set head offselect chr(10) from dual;prompt "检查结论:正常" set head offselect chr(10) from dual;set head on prompt "$user 分区索引大小TOP10"SELECT * FROM (SELECT SEGMENT_NAME,PARTITION_NAME,ROUND(SUM(BYTES)/1024/1024/1024)  AS GB FROM DBA_SEGMENTS WHERE OWNER=upper('$user') AND SEGMENT_TYPE='INDEX PARTITION' GROUP BY SEGMENT_NAME,PARTITION_NAME  ORDER BY GB DESC) WHERE ROWNUM<11 ;set head offselect chr(10) from dual;prompt "检查结论:正常" set head offselect chr(10) from dual;set head on prompt "$user 子分区索引大小TOP10"SELECT * FROM (SELECT SEGMENT_NAME,PARTITION_NAME,ROUND(SUM(BYTES)/1024/1024/1024)  AS GB FROM DBA_SEGMENTS WHERE OWNER=upper('$user') AND SEGMENT_TYPE='INDEX SUBPARTITION' GROUP BY SEGMENT_NAME,PARTITION_NAME  ORDER BY GB DESC) WHERE ROWNUM<11 ;set head offselect chr(10) from dual;prompt "检查结论:正常" set head offselect chr(10) from dual;set head on prompt "$user 普通表大小TOP10"SELECT * FROM (SELECT SEGMENT_NAME,ROUND(SUM(BYTES)/1024/1024/1024)  AS GB FROM DBA_SEGMENTS WHERE OWNER=upper('$user') AND SEGMENT_TYPE='TABLE' GROUP BY SEGMENT_NAME  ORDER BY GB DESC) WHERE ROWNUM<11 ;set head offselect chr(10) from dual;prompt "检查结论:正常" set head offselect chr(10) from dual;set head on prompt "$user 分区表大小TOP10"SELECT * FROM (SELECT SEGMENT_NAME,PARTITION_NAME,ROUND(SUM(BYTES)/1024/1024/1024)  AS GB FROM DBA_SEGMENTS WHERE OWNER=upper('$user')AND SEGMENT_TYPE='TABLE PARTITION' GROUP BY SEGMENT_NAME,PARTITION_NAME    ORDER BY GB DESC) WHERE ROWNUM<11 ;set head offselect chr(10) from dual;prompt "检查结论:正常" set head offselect chr(10) from dual;set head on prompt "$user 子分区表大小TOP10"SELECT * FROM (SELECT SEGMENT_NAME,PARTITION_NAME,ROUND(SUM(BYTES)/1024/1024/1024)  AS GB FROM DBA_SEGMENTS WHERE OWNER=upper('$user') AND SEGMENT_TYPE='TABLE SUBPARTITION' GROUP BY SEGMENT_NAME,PARTITION_NAME  ORDER BY GB DESC) WHERE ROWNUM<11 ;set head offselect chr(10) from dual;prompt "检查结论:正常" set head offselect chr(10) from dual;set head on prompt "$user 表总行数"col NUM_ROWS format 9999,9999,9999SELECT SUM(NUM_ROWS) NUM_ROWS FROM DBA_TABLES WHERE OWNER=upper('$user');set head offselect chr(10) from dual;prompt "检查结论:正常" set head offselect chr(10) from dual;set head on prompt "$user 表行数TOP10"col NUM_ROWS format 9999,9999,9999SELECT * FROM (SELECT TABLE_NAME,SUM(NUM_ROWS) AS NUM_ROWS FROM DBA_TABLES WHERE OWNER=upper('$user') AND NUM_ROWS>0 GROUP BY  TABLE_NAME ORDER BY 2 DESC) WHERE ROWNUM<11;set head offselect chr(10) from dual;prompt "检查结论:正常" set head offselect chr(10) from dual;set head on prompt "归档数和大小"SELECT TO_CHAR(FIRST_TIME, 'YYYY-MM-DD') AS FDATA,       COUNT(*) AS ARCHIVE_NUM,       ROUND(SUM(BLOCKS * BLOCK_SIZE / 1024 / 1024 / 1024), 0) AS SIZE_GB  FROM V\$ARCHIVED_LOG X WHERE X.NAME IS NULL GROUP BY TO_CHAR(FIRST_TIME, 'YYYY-MM-DD')ORDER BY FDATA ASC; set head offselect chr(10) from dual;prompt "检查结论:正常"set head offselect chr(10) from dual; set head onprompt "每小时日志切换:"col week format a6col date_d format a10col  h0    format 999col  h1    format 999col  h2    format 999col  h3    format 999col  h4    format 999col  h5    format 999col  h6    format 999col  h7    format 999col  h8    format 999col  h9    format 999col  h10   format 999col  h11   format 999col  h12   format 999col  h13   format 999col  h14   format 999col  h15   format 999col  h16   format 999col  h17   format 999col  h18   format 999col  h19   format 999col  h20   format 999col  h21   format 999col  h22   format 999col  h23   format 999SELECT to_char(TRUNC(FIRST_TIME),'YYYY-MM-DD') DATE_D,TO_CHAR(FIRST_TIME, 'Dy') WEEK,COUNT(1) TOTAL,ROUND(24*60/COUNT(1), 2) AVG_SWITH_MINUTE,SUM(DECODE(TO_CHAR(FIRST_TIME, 'hh24'), '00', 1, 0)) h0,SUM(DECODE(TO_CHAR(FIRST_TIME, 'hh24'), '01', 1, 0)) h1,SUM(DECODE(TO_CHAR(FIRST_TIME, 'hh24'), '02', 1, 0)) h2,SUM(DECODE(TO_CHAR(FIRST_TIME, 'hh24'), '03', 1, 0)) h3,SUM(DECODE(TO_CHAR(FIRST_TIME, 'hh24'), '04', 1, 0)) h4,SUM(DECODE(TO_CHAR(FIRST_TIME, 'hh24'), '05', 1, 0)) h5,SUM(DECODE(TO_CHAR(FIRST_TIME, 'hh24'), '06', 1, 0)) h6,SUM(DECODE(TO_CHAR(FIRST_TIME, 'hh24'), '07', 1, 0)) h7,SUM(DECODE(TO_CHAR(FIRST_TIME, 'hh24'), '08', 1, 0)) h8,SUM(DECODE(TO_CHAR(FIRST_TIME, 'hh24'), '09', 1, 0)) h9,SUM(DECODE(TO_CHAR(FIRST_TIME, 'hh24'), '10', 1, 0)) h10,SUM(DECODE(TO_CHAR(FIRST_TIME, 'hh24'), '11', 1, 0)) h11,SUM(DECODE(TO_CHAR(FIRST_TIME, 'hh24'), '12', 1, 0)) h12,SUM(DECODE(TO_CHAR(FIRST_TIME, 'hh24'), '13', 1, 0)) h13,SUM(DECODE(TO_CHAR(FIRST_TIME, 'hh24'), '14', 1, 0)) h14,SUM(DECODE(TO_CHAR(FIRST_TIME, 'hh24'), '15', 1, 0)) h15,SUM(DECODE(TO_CHAR(FIRST_TIME, 'hh24'), '16', 1, 0)) h16,SUM(DECODE(TO_CHAR(FIRST_TIME, 'hh24'), '17', 1, 0)) h17,SUM(DECODE(TO_CHAR(FIRST_TIME, 'hh24'), '18', 1, 0)) h18,SUM(DECODE(TO_CHAR(FIRST_TIME, 'hh24'), '19', 1, 0)) h19,SUM(DECODE(TO_CHAR(FIRST_TIME, 'hh24'), '20', 1, 0)) h20,SUM(DECODE(TO_CHAR(FIRST_TIME, 'hh24'), '21', 1, 0)) h21,SUM(DECODE(TO_CHAR(FIRST_TIME, 'hh24'), '22', 1, 0)) h22,SUM(DECODE(TO_CHAR(FIRST_TIME, 'hh24'), '23', 1, 0)) h23FROM V\$LOG_HISTORYGROUP BY TRUNC(FIRST_TIME), TO_CHAR(FIRST_TIME, 'Dy')ORDER BY 1 DESC; set head offselect chr(10) from dual;set head onprompt "检查结论:正常" set head offselect chr(10) from dual;set head onprompt "每日各种操作量统计"col fdate for a12col instance_number for 99col command_name for a15col fetches_num for a20col sorts_num for a20col exec_num for a20col parse_num for a20col buffergets_num for a20col diskread_num for a20SELECT TO_CHAR(BEGIN_INTERVAL_TIME,'YYYY-MM-DD') AS FDATE ,      A.INSTANCE_NUMBER,      N.COMMAND_NAME,      TO_CHAR(SUM(FETCHES_DELTA),'9,9999,9999,9999') AS FETCHES_NUM,      TO_CHAR(SUM(SORTS_DELTA),'9,9999,9999,9999') AS SORTS_NUM,      TO_CHAR(SUM(EXECUTIONS_DELTA),'9,9999,9999,9999') AS EXEC_NUM,      TO_CHAR(SUM(PARSE_CALLS_DELTA),'9,9999,9999,9999') AS PARSE_NUM,      TO_CHAR(SUM(ROWS_PROCESSED_DELTA),'9,9999,9999,9999') AS ROWS_NUM,      TO_CHAR(SUM(DISK_READS_DELTA),'9,9999,9999,9999') AS DISKREAD_NUM,      TO_CHAR(SUM(BUFFER_GETS_DELTA),'9,9999,9999,9999') AS BUFFERGETS_NUM  FROM DBA_HIST_SQLSTAT A INNER JOIN DBA_HIST_SNAPSHOT B    ON A.SNAP_ID = B.SNAP_ID INNER JOIN DBA_HIST_SQLTEXT C    ON A.SQL_ID = C.SQL_ID INNER JOIN DBA_HIST_SQLCOMMAND_NAME N    ON C.COMMAND_TYPE = N.COMMAND_TYPE WHERE B.BEGIN_INTERVAL_TIME >= trunc(sysdate-1)   and B.END_INTERVAL_TIME <    trunc(sysdate)GROUP BY  TO_CHAR(BEGIN_INTERVAL_TIME,'YYYY-MM-DD') , A.INSTANCE_NUMBER,N.COMMAND_NAMEORDER BY A.INSTANCE_NUMBER,EXEC_NUM DESC; set head offselect chr(10) from dual; set head oncol week format a6col fdate format a12col f_sel_rate format a10col f_upd_rate format a10col f_inse_rate format a10col f_del_rate format a9col f_plsql_rate format a11col f_meth_rate format a10col f_locktable_rate format a9col f_upsert_rate format a9col f_creatable_rate format a5      SELECT FDATE,TO_CHAR(TO_DATE(FDATE,'YYYY-MM-DD'),'DAY') AS WEEK,      SUM(TOTAL_EXEC) AS TOTAL_EXEC,      SUM(F_SELECT) AS F_SELECT ,      ROUND(SUM(F_SELECT)/SUM(TOTAL_EXEC)*100,2)||'%'        AS F_SEL_RATE,            SUM(F_UPDATE) AS F_UPDATE ,      ROUND(SUM(F_UPDATE)/SUM(TOTAL_EXEC)*100,2)||'%'             AS F_UPD_RATE,            SUM(F_INSERT) AS F_INSERT ,      ROUND(SUM(F_INSERT)/SUM(TOTAL_EXEC)*100,2)||'%'             AS F_INSE_RATE,            SUM(F_DELETE) AS F_DELETE ,      ROUND(SUM(F_DELETE)/SUM(TOTAL_EXEC)*100,2)||'%'             AS F_DEL_RATE,            SUM(F_PL_SQL_EXECUTE) AS F_PL_SQL_EXECUTE ,      ROUND(SUM(F_PL_SQL_EXECUTE)/SUM(TOTAL_EXEC)*100,2)||'%'     AS F_PLSQL_RATE,            SUM(F_CALL_METHOD) AS F_CALL_METHOD ,      ROUND(SUM(F_CALL_METHOD)/SUM(TOTAL_EXEC)*100,2)||'%'        AS F_METH_RATE,                  SUM(F_LOCK_TABLE) AS F_LOCK_TABLE ,      ROUND(SUM(F_LOCK_TABLE)/SUM(TOTAL_EXEC)*100,2)||'%'         AS F_LOCKTABLE_RATE,            SUM(F_UPSERT) AS F_UPSERT ,      ROUND(SUM(F_UPSERT)/SUM(TOTAL_EXEC)*100,2)||'%'             AS F_UPSERT_RATE,            SUM(NVL(F_CREATE_TABLE,0)) AS F_CREATE_TABLE,           ROUND(SUM(NVL(F_CREATE_TABLE,0))/SUM(TOTAL_EXEC)*100,2)||'%'       AS F_CREATABLE_RATE      FROM(          SELECT FDATE,              (CASE WHEN COMMAND_NAME ='SELECT' THEN REPLACE(EXEC_NUM,',',NULL) END) AS F_SELECT,              (CASE WHEN COMMAND_NAME ='UPDATE' THEN REPLACE(EXEC_NUM,',',NULL) END) AS F_UPDATE,              (CASE WHEN COMMAND_NAME ='INSERT' THEN REPLACE(EXEC_NUM,',',NULL) END) AS F_INSERT,              (CASE WHEN COMMAND_NAME ='DELETE' THEN REPLACE(EXEC_NUM,',',NULL) END) AS F_DELETE,              (CASE WHEN COMMAND_NAME ='PL/SQL EXECUTE' THEN REPLACE(EXEC_NUM,',',NULL) END) AS F_PL_SQL_EXECUTE,              (CASE WHEN COMMAND_NAME ='CALL METHOD'    THEN REPLACE(EXEC_NUM,',',NULL) END) AS F_CALL_METHOD,              (CASE WHEN COMMAND_NAME ='LOCK TABLE'     THEN REPLACE(EXEC_NUM,',',NULL) END) AS F_LOCK_TABLE,              (CASE WHEN COMMAND_NAME ='UPSERT'         THEN REPLACE(EXEC_NUM,',',NULL) END) AS F_UPSERT,              (CASE WHEN COMMAND_NAME ='CREATE TABLE'   THEN REPLACE(EXEC_NUM,',',NULL) END) AS F_CREATE_TABLE,              SUM(REPLACE(EXEC_NUM,',',NULL))           AS TOTAL_EXEC        FROM (                SELECT TO_CHAR(BEGIN_INTERVAL_TIME,'YYYY-MM-DD') AS FDATE ,                      A.INSTANCE_NUMBER,                      N.COMMAND_NAME,                      SUM(FETCHES_DELTA) AS FETCHES_NUM,                      SUM(SORTS_DELTA) AS SORTS_NUM,                      SUM(EXECUTIONS_DELTA) AS EXEC_NUM,                      SUM(PARSE_CALLS_DELTA) AS PARSE_NUM,                      SUM(ROWS_PROCESSED_DELTA) AS ROWS_NUM,                      SUM(DISK_READS_DELTA) AS DISKREAD_NUM,                      SUM(BUFFER_GETS_DELTA) AS BUFFERGETS_NUM                  FROM DBA_HIST_SQLSTAT A                 INNER JOIN DBA_HIST_SNAPSHOT B      ON A.SNAP_ID = B.SNAP_ID                 INNER JOIN DBA_HIST_SQLTEXT C        ON A.SQL_ID = C.SQL_ID                 INNER JOIN DBA_HIST_SQLCOMMAND_NAME N                    ON C.COMMAND_TYPE = N.COMMAND_TYPE                 WHERE B.BEGIN_INTERVAL_TIME >= TRUNC(SYSDATE-35)                   AND B.END_INTERVAL_TIME <    TRUNC(SYSDATE)                GROUP BY  TO_CHAR(BEGIN_INTERVAL_TIME,'YYYY-MM-DD') , A.INSTANCE_NUMBER,N.COMMAND_NAME                ) T        GROUP BY FDATE,COMMAND_NAME,EXEC_NUM        )        GROUP BY FDATE,TO_CHAR(TO_DATE(FDATE,'YYYY-MM-DD'),'DAY')        ORDER BY 1 DESC;set head offselect chr(10) from dual; set head onprompt "游标:"col parameter format a30col value format 999999col usage format a10SELECT 'session_cached_cursors' PARAMETER,LPAD(VALUE,5) VALUE,DECODE(VALUE,0,' n/a',TO_CHAR(100*USED /VALUE,'990')||'%') USAGEFROM (SELECT MAX(S.VALUE) USED       FROM V\$STATNAME N,V\$SESSTAT S        WHERE N.NAME='session cursor cache count'          AND S.STATISTIC#=N.STATISTIC#),          (SELECT VALUE FROM V\$PARAMETER WHERE NAME='session_cached_cursors')         UNION ALL         SELECT 'open_cursors',         LPAD(VALUE,5),         TO_CHAR(100 * USED/VALUE,'990')||'%'  FROM (SELECT MAX(SUM(S.VALUE)) USED                FROM V\$STATNAME N, V\$SESSTAT S                WHERE N.NAME IN ('opened cursors current','session cursor cache cunt')   AND S.STATISTIC#=N.STATISTIC#   GROUP BY S.SID),   (SELECT VALUE FROM V\$PARAMETER WHERE NAME='open_cursors');set head offselect chr(10) from dual;set head onprompt "检查结论:正常" set head offselect chr(10) from dual; set head onprompt "外键没有建索引:"COL 外键表 FORMAT A31COL 外键名 FORMAT A31COL 关联表 FORMAT A31COL 关联表字段 FORMAT A31SELECT    C.TABLE_NAME "外键表",    C.CONSTRAINT_NAME "外键名",    T.TABLE_NAME "关联表",         ACC.COLUMN_NAME "关联表字段"FROM   ALL_CONSTRAINTS T,       ALL_CONSTRAINTS C,       ALL_CONS_COLUMNS ACCWHERE  C.R_CONSTRAINT_NAME = T.CONSTRAINT_NAMEAND    C.TABLE_NAME        = ACC.TABLE_NAMEAND    C.CONSTRAINT_NAME   = ACC.CONSTRAINT_NAMEAND    ACC.OWNER='OSSC'AND    NOT EXISTS (SELECT '1'                    FROM  ALL_IND_COLUMNS AID                   WHERE AID.TABLE_NAME  = ACC.TABLE_NAME                   AND   AID.COLUMN_NAME = ACC.COLUMN_NAME)ORDER BY C.TABLE_NAME;set head offselect chr(10) from dual;set head onprompt "检查结论:正常" set head offselect chr(10) from dual; set head onprompt "索引超过200M的碎化度:"SELECT IDX.OWNER OWNER,       IDX.TABLE_NAME TABLENAME,        IDX.INDEX_NAME INDEX_NAME,       COL_LEN,       AVG_ROW_LEN,       ROUND(IDX.COL_LEN/TBL.AVG_ROW_LEN*100,4) AS  IND_TAB_LEN_RATE,       IND_SIZE_MB,       TAB_SIZE_MB,       ROUND(IDX.IND_SIZE_MB/TBL.TAB_SIZE_MB*100,4) AS  IND_TAB_SIZE_RATE,       ROUND((IDX.IND_SIZE_MB/TBL.TAB_SIZE_MB)/(IDX.COL_LEN/TBL.AVG_ROW_LEN)*100,4) AS IND_SIZE_LEN_RATE_RATEFROM  (     SELECT I.OWNER OWNER,I.INDEX_NAME INDEX_NAME,I.TABLE_OWNER TABLE_OWNER,I.TABLE_NAME TABLE_NAME,S1.BYTES/1024/1024 AS IND_SIZE_MB,            SUM(S1.BLOCKS) BLOCKS,SUM(C.COLUMN_LENGTH) AS COL_LEN       FROM DBA_SEGMENTS S1,DBA_INDEXES I,DBA_IND_COLUMNS C      WHERE S1.OWNER=I.OWNER         AND S1.SEGMENT_NAME=I.INDEX_NAME         AND I.index_name=C.INDEX_NAME        AND C.COLUMN_LENGTH > 0        AND I.OWNER ='OSSC'      GROUP BY  I.OWNER,I.INDEX_NAME,I.TABLE_OWNER,I.TABLE_NAME,S1.BYTES  ) IDX,  (    SELECT T.OWNER OWNER,T.TABLE_NAME,T.AVG_ROW_LEN,S2.BYTES/1024/1024 AS TAB_SIZE_MB,SUM(S2.BLOCKS) BLOCKS     FROM DBA_SEGMENTS S2,DBA_TABLES T    WHERE S2.OWNER=T.OWNER       AND S2.SEGMENT_NAME=T.TABLE_NAME      AND T.AVG_ROW_LEN > 0      AND T.OWNER =upper('$user')    GROUP BY T.OWNER,T.TABLE_NAME,T.AVG_ROW_LEN,S2.BYTES   ) TBL  WHERE IDX.TABLE_OWNER=TBL.OWNER    AND IDX.TABLE_NAME=TBL.TABLE_NAME    AND IDX.IND_SIZE_MB/TBL.TAB_SIZE_MB > IDX.COL_LEN/TBL.AVG_ROW_LEN    AND IDX.IND_SIZE_MB > 100  ORDER BY 7 DESC;set head offselect chr(10) from dual;set head onprompt "检查结论:正常" set head offselect chr(10) from dual; set head onprompt "低选择率的索引:"SELECT I.TABLE_NAME,       I.INDEX_NAME,       I.DISTINCT_KEYS,       t.num_rows,       ROUND(I.DISTINCT_KEYS / T.NUM_ROWS*100,5)||'%' AS SELECT_RATE  FROM DBA_INDEXES I,       DBA_TABLES  T WHERE I.TABLE_NAME = T.TABLE_NAME   AND t.OWNER=upper('$user')   AND  T.NUM_ROWS>0   and I.DISTINCT_KEYS / T.NUM_ROWS <0.5 ORDER BY  SELECT_RATE ASC;set head offselect chr(10) from dual;set head onprompt "检查结论:正常" exit;EOFecho " "echo "告警文件的告警内容"OLDLANG=$LANGexport LANG=en_US.UTF-8cat $TRACE/alert_$ORACLE_SID.log | grep -E  ^ORA-\|Reconfig\|.trc\|abort\|Shut\|^Start\|error\|Instance\|Suspend\|Resuming\|Deadlock\|Global\|"`date "+%b %d"`"\|"`date -d last-day "+%b %d"`"|grep -v Starting|grep -v Auto-tuning|grep -v Fatal|grep -v Tnsexport LANG=$OLDLANGecho "检查结论:正常"#echo " "#export LANG=en_US.UTF-8#echo "ASM LOG"#cat $ASMTRACE/alert_+ASM1.log | grep -E ^ORA-\|"`date "+%b %d"`"\|"`date -d last-day "+%b %d"`"#echo "检查结论:正常"echo -eecho "系统内存信息"cat /proc/meminfoecho "检查结论:正常"echo -eecho "系统内存区域信息"cat /proc/zoneinfoecho "检查结论:正常"export LANG=$OLDLANGecho -eecho "系统中进程使用内存TOP30"ps auxw|head -1;ps auxw|sort -rn -k4|head -30echo "检查结论:正常"echo -eecho "系统中进程使用虚拟内存TOP30"COUNT=30printf "%$(tput cols)s\n" | tr ' ' '=';printf "Memory%-6sPID%-5sUser%-7sCommand\n";printf "%$(tput cols)s\n" | tr ' ' '-';ps -eo size,pid,user,command | sed "1 d" | sort -rn | if [[ -n $COUNT ]]; then head -n $COUNT; else cat; fi | \awk '  {    units[1024**2] = "GB";    units[1024]    = "MB";    units[1]           = "KB";    for (x = 1024**3; x >= 1; x /= 1024) {      if ($1 >= x) {        if (x < 1024) {          printf ("%-6.0f %-4s ", $1/x, units[x]);        }        else {          printf ("%-6.2f %-4s ", $1/x, units[x]);        }        break;      }    }  }  {    printf ("%-7s %-10s ", $2, $3);  }  {    for (x = 4; x <= NF; x++) {      printf ("%s ", $x);    }  print ("\r");  }';printf "%$(tput cols)s\n"|tr ' ' '=';echo -eecho "进程实际独占物理内存大小:"#!/bin/bash# Get current swap usage for all running processes# writted by zengfankunfunction GetProcRam {SUM=0OVERALL=0for DIR in `find /proc/ -maxdepth 1 -type d | egrep "^/proc/[0-9]"` ; doPID=`echo $DIR | cut -d / -f 3`if [  -d $DIR ]; thenPROGNAME=`ps -p $PID -o cmd --no-headers`RAM_PAGES=`cat $DIR/statm | awk '{print $2}'`SHARD_PAGES=`cat $DIR/statm | awk '{print $3}'`let REAL_PAGES=$RAM_PAGES-$SHARD_PAGESREAL_RAM=$(expr $REAL_PAGES \* 4 )if [ $REAL_RAM -gt 0 ] ; thenecho -e "$PID\0011$REAL_RAM\0011$PROGNAME"filet SUM=$SUM+$REAL_RAMfidoneecho "TOTAL RAM USED:$(expr $SUM / 1024) MB"}echo -e "PID\0011REAL_RAM_USED(KB)\0011PROGNAME"GetProcRam |sort -rn -k2#!/bin/bash# Get current swap usage for all running processes# writted by zengfankun http://blog.csdn.net/zengmuanshaecho -eecho "SWAP磁盘上的进程和占用大小:"function getswap {SUM=0OVERALL=0for DIR in `find /proc/ -maxdepth 1 -type d | egrep "^/proc/[0-9]"` ; doPID=`echo $DIR | cut -d / -f 3`PROGNAME=`ps -p $PID -o comm --no-headers`for SWAP in `grep Swap $DIR/smaps 2>/dev/null| awk '{ print $2 }'`dolet SUM=$SUM+$SWAPdoneif [ $SUM -gt 0 ]; then echo -e "$PID\0011$SUM\0011$PROGNAME"filet OVERALL=$OVERALL+$SUMSUM=0doneecho "Overall swap used: $OVERALL"}echo -e "PID\0011SWAP USED (BYTES)\0011PROGNAME"getswap |sort -rn -k2 date#发送邮件 mail  -s `date +%Y%m%d%H`'-'`hostname`_DayCheck shark@paymentbillsservice.com < $LOGFILE


0 0
原创粉丝点击