zoukankan      html  css  js  c++  java
  • orac

    #!/bin/bash
    # Copyright (c) 2013, 2016, Liang Guojun.  All rights reserved.
    # Program:
    #       Check Oracle Database Command.
    # History:
    #       2013/11/15      Liang Guojun    First Release
    #

    case $1 in

    #==============================================================================
    # -help
    #==============================================================================
    -help)
    echo " "
    echo "Copyright (c) 2013, 2016, Liang Guojun.  All rights reserved."
    echo " "
    echo "Usage:";
    echo "  -help                                      ---Print this help info."
    echo "============================================="
    echo " database general check"                      
    echo "============================================="
    echo "  -log        db <N>                         ---List database alert log last N rows."
    echo "  -active                                    ---List active session."
    echo "  -longops                                   ---List long run query."
    echo "  -tran                                      ---List all the transactions."
    echo "  -param      <pattern>                      ---List Oracle parameters."
    echo "  -param_     <pattern>                      ---List Oracle hidden parameters."
    echo "  -size       <owner> <tabname>              ---List size of tables/indexes."
    echo "  -segment    <size>                         ---List Segment large than given size."
    echo "  -tbs        info                           ---List tablespace basic information."
    echo "  -tbs        rate                           ---List statistics tablespace usage rate."
    echo "  -tbs        file                           ---List datafile."
    echo "  -objlike    <owner> <pattern>              ---List object by name pattern."
    echo "  -tablike    <owner> <pattern>              ---List table by name pattern."
    echo "  -tstat      <owner> <tabname>              ---List table statistics."
    echo "  -tabpart    <owner> <tabname>              ---List table partitions."
    echo "  -istat      <owner> <tabname>              ---List index statistics."
    echo "  -ipstat     <owner> <tabname>              ---List index partition statistics."
    echo "  -idxdesc    <owner> <tabname>              ---List index structure."
    echo "  -ddl        <owner> <object_type> <name>   ---List the create object sql."
    echo "  -flash                                     ---List flashbackup infomation."
    echo "  -lock                                      ---List lock infomation."
    echo "  -lockwait                                  ---List lock wait infomation."
    echo "  -sqltext    <SQL_ID>                       ---List SQL Text by SQL_ID."
    echo "  -sql        spid <SPID>                    ---List SQL_ID/username/SQL_TEXT by OS spid."
    echo "  -sql        plan <SQL_ID> [child_number]   ---List SQL explain plan infomation."
    echo "  -sql        hist <SQL_ID>                  ---List history of SQL explain plan infomation."
    echo "  -topevent                                  ---List top event."
    echo "============================================="
    echo " RAC/ASM check"
    echo "============================================="
    echo "  -asmfree                                   ---List ASM disk user and free space."
    echo "  -adinfo                                    ---List ASM disk comment information."
    echo "============================================="
    echo " Data Guard check"
    echo "============================================="
    echo "  -dgarc                                     ---List Data Guard archivelog applied status."
    echo "  -dgs                                       ---List Data Guard status."
    echo "  -dgp                                       ---List Data Guard process status."
    echo "  -dge                                       ---List Data Guard archive dest error."
    echo "  -dggap                                     ---List Data Guard GAP."
    echo "  -dglag                                     ---List Data Guard lag."
    echo " "
    ;;
    #=====================
    # End of -help
    #=====================


    #==============================================================================
    # -log
    #==============================================================================
    -log)
    case $2 in

    #------------------------------------------------------------
    # db
    #------------------------------------------------------------
    db)
    sqlalert=`sqlplus -S / as sysdba <<EOF  
    col name format a18
    col value format a55
    select value from v\$diag_info where name ='Diag Trace';
    exit;
    EOF`
    alertpath=`echo $sqlalert | cut -d " " -f 3`
    export myoraclesido=$ORACLE_SID
    tail -n $3 $alertpath/alert_$myoraclesido.log
    ;;
    #---------------------
    # End of adb
    #---------------------


    esac
    ;;
    #=====================
    # End of -log
    #=====================


    #==============================================================================
    # -active
    #==============================================================================
    -active)
    sqlplus -S / as sysdba <<EOF
         set linesize 140
         set pagesize 999
             col sid format 9999
             col s# format 99999
             col username format a10
             col event format a30
             col machine format a20
             col p123 format a18
             col wt format 999
             col SQL_ID for a18
             alter session set cursor_sharing=force;
                SELECT /* XJ LEADING(S) FIRST_ROWS */
                 S.SID,
                 S.SERIAL# S#,
                 P.SPID,
                 NVL(S.USERNAME, SUBSTR(P.PROGRAM, LENGTH(P.PROGRAM) - 6)) USERNAME,
                 S.MACHINE,
                 S.EVENT,
                 S.P1 || '/' || S.P2 || '/' || S.P3 P123,
                 S.WAIT_TIME WT,
                 NVL(SQL_ID, S.PREV_SQL_ID) SQL_ID
                  FROM V$PROCESS P, V$SESSION S
                 WHERE P.ADDR = S.PADDR
                   AND S.STATUS = 'ACTIVE'
                   AND P.BACKGROUND IS NULL;
    exit;
    EOF
    ;;
    #=====================
    # End of -active
    #=====================


    #==============================================================================
    # -longops
    #==============================================================================
    -longops)
    sqlplus -S / as sysdba <<EOF
             set linesize 120
         set pagesize 999
             col MESSAGE format a30
             col opname for a20
             col username for a20
             select opname,TIME_REMAINING REMAIN,
                    ELAPSED_SECONDS ELAPSE,MESSAGE,
                    SQL_ID,sid,username
             from v$session_longops where TIME_REMAINING >0;
    exit;
    EOF
    ;;
    #=====================
    # End of -longops
    #=====================


    #==============================================================================
    # -tran
    #==============================================================================
    -tran)
    sqlplus -S / as sysdba <<EOF
             set linesize 120
             col USERNAME format a12
             col rbs format a12
             col BLKS_RECS format a16
             col START_TIME format a17
             col LOGIO format 99999
             col PHY_IO FORMAT 99999
             COL CRGET FORMAT 99999
             COL CRMOD FORMAT 99999
             SELECT /* SHSNC */ /* RULE */ 
                 S.SID,S.SERIAL#,S.USERNAME, R.NAME RBS,
                 T.START_TIME,
                 to_char(T.USED_UBLK)||','||to_char(T.USED_UREC) BLKS_RECS ,
                 T.LOG_IO LOGIO,T.PHY_IO PHYIO,T.CR_GET CRGET,T.CR_CHANGE CRMOD
               FROM V$TRANSACTION T, V$SESSION S,V$ROLLNAME R,
                    V$ROLLSTAT RS
               WHERE T.SES_ADDR(+) = S.SADDR 
                 AND T.XIDUSN = R.USN AND S.USERNAME IS NOT NULL
                 AND R.USN = RS.USN ;
    exit;
    EOF
    ;;
    #=====================
    # End of -tran
    #=====================


    #==============================================================================
    # -param
    #==============================================================================
    -param)
    sqlplus -S / as sysdba <<EOF
             set linesize 120
         set pagesize 999
             col NAME format a40
             COL VALUE FORMAT A40
             SELECT /* SHSNC */ NAME,ISDEFAULT,ISSES_MODIFIABLE SESMOD,
               ISSYS_MODIFIABLE SYSMOD,VALUE
               FROM V$PARAMETER
               WHERE NAME LIKE '%' || LOWER('$2') || '%'
                 AND NAME <> 'control_files'
                 and name <> 'rollback_segments';
    exit;
    EOF
    ;;
    #=====================
    # End of -param
    #=====================


    #==============================================================================
    # -param_
    #==============================================================================
    -param_)
    sqlplus -S / as sysdba <<EOF
             set linesize 120  
         set pagesize 999
             col NAME format a40
             COL VALUE FORMAT A40
             SELECT /* SHSNC */
               P.KSPPINM NAME, V.KSPPSTVL VALUE
             FROM SYS.X$KSPPI P, SYS.X$KSPPSV V
             WHERE P.INDX = V.INDX
               AND V.INST_ID = USERENV('Instance')
               AND SUBSTR(P.KSPPINM,1,1)='_'
               AND ('$2' IS NULL OR P.KSPPINM LIKE '%'||LOWER('$2')||'%');
    exit;
    EOF
    ;;
    #=====================
    # End of -param_
    #=====================


    #==============================================================================
    # -size
    #==============================================================================
    -size)
    sqlplus -S / as sysdba <<EOF
             set linesize 120
         set pagesize 999
             col owner format a10
             col segment_name for a30
             SELECT /*+ SHSNC */ OWNER,SEGMENT_NAME, SEGMENT_TYPE, SUM(BYTES)/1048576 SIZE_MB,
                        MAX(INITIAL_EXTENT) INIEXT, MAX(NEXT_EXTENT) MAXEXT FROM DBA_SEGMENTS
                 WHERE SEGMENT_NAME = upper('$3')
                   AND ('$2' IS NULL OR UPPER(OWNER) = UPPER('$2'))
                   AND SEGMENT_TYPE LIKE 'TABLE%'
                 GROUP BY OWNER, SEGMENT_NAME, SEGMENT_TYPE
               UNION ALL
                 SELECT OWNER, SEGMENT_NAME, SEGMENT_TYPE, SUM(BYTES)/1048576 SIZE_MB,
                        MAX(INITIAL_EXTENT) INIEXT, MAX(NEXT_EXTENT) MAXEXT FROM DBA_SEGMENTS
                 WHERE (OWNER,SEGMENT_NAME) IN (
                    SELECT OWNER,INDEX_NAME FROM DBA_INDEXES WHERE TABLE_NAME=upper('$3') AND
                    ('$2' IS NULL OR UPPER(OWNER) = UPPER('$2'))
                    UNION
                    SELECT OWNER,SEGMENT_NAME FROM DBA_LOBS WHERE TABLE_NAME=upper('$2') AND
                    ('$2' IS NULL OR UPPER(OWNER) = UPPER('$2')))
                 GROUP BY OWNER, SEGMENT_NAME, SEGMENT_TYPE;
    exit;
    EOF
    ;;
    #=====================
    # End of -size
    #=====================


    #==============================================================================
    # -segment
    #==============================================================================
    -segment)
    sqlplus -S / as sysdba <<EOF
             set linesize 120
             col USERNAME format a12
             col MACHINE format a16
             col TABLESPACE format a10
             SELECT /* SHSNC */ /*+ RULE */
                SEGMENT_TYPE,OWNER SEGMENT_OWNER,SEGMENT_NAME,
                        TRUNC(SUM(BYTES)/1024/1024,1) SIZE_MB
                FROM DBA_SEGMENTS WHERE OWNER NOT IN ('SYS','SYSTEM')
                GROUP BY SEGMENT_TYPE,OWNER,SEGMENT_NAME
                HAVING SUM(BYTES) > TO_NUMBER(NVL('$2','100')) * 1048576
                ORDER BY 1,2,3,4 DESC;
    exit;
    EOF
    ;;
    #=====================
    # End of -segment
    #=====================


    #==============================================================================
    # -tbs
    #==============================================================================
    -tbs)
    case $2 in

    #------------------------------------------------------------
    # info
    #------------------------------------------------------------
    info)
    sqlplus -S / as sysdba <<EOF
    set linesize 160
    set pagesize 999
    select a.tablespace_name,
           a.type,
           a.bigfile,
           a.status,
           a.extent_management,
           a.segment_space_management
      from (  select d.tablespace_name,
                     t.contents type,
                     t.status,
                     t.bigfile,
                     t.extent_management,
                     t.segment_space_management
                from dba_data_files d, dba_tablespaces t
               where d.tablespace_name = t.tablespace_name
            group by d.tablespace_name,
                     t.contents,
                     t.status,
                     t.bigfile,
                     t.extent_management,
                     t.segment_space_management) a,
           (  select tablespace_name
                from dba_free_space
            group by tablespace_name) b
     where a.tablespace_name = b.tablespace_name(+)
    union all
    select a.tablespace_name,
           a.type,
           a.bigfile,
           a.status,
           a.extent_management,
           a.segment_space_management
      from (  select d.tablespace_name,
                     t.contents type,
                     t.status,
                     t.bigfile,
                     t.extent_management,
                     t.segment_space_management
                from dba_temp_files d, dba_tablespaces t
               where d.tablespace_name = t.tablespace_name
            group by d.tablespace_name,
                     t.contents,
                     t.status,
                     t.bigfile,
                     t.extent_management,
                     t.segment_space_management) a,
           (  select tablespace_name
                from v$temp_space_header
            group by tablespace_name) b
     where a.tablespace_name = b.tablespace_name(+);
    exit;
    EOF
    ;;
    #---------------------
    # End of info
    #---------------------


    #------------------------------------------------------------
    # rate
    #------------------------------------------------------------
    rate)
    sqlplus -S / as sysdba <<EOF
    set linesize 160
    set pagesize 999
    col TABLESPACE_NAME for a18
    col TBS_TOTAL_MB for 9999999
    col TBS_USED_MB for 9999999
    col TBS_FREE_MB for 9999999
    col TBS_RATE for a11            
    col EXTEND_MAX_MB for 9999999999999
    col EXTEND_FREE_MB for 9999999999999
    col EXTEND_RATE for a11
    select a.tablespace_name,
           round(current_size / 1024 / 1024, 1) TBS_TOTAL_MB,
           round((current_size - b.free_bytes) / 1024 / 1024, 1) TBS_USED_MB,
           round(b.free_bytes / 1024 / 1024, 1) TBS_FREE_MB,
           round(((current_size - b.free_bytes) / current_size) * 100, 1) || '%' TBS_RATE,
           round(a.max_size / 1024 / 1024, 1) EXTEND_MAX_MB,
           round((a.max_size - (current_size - b.free_bytes)) / 1024 / 1024, 1) EXTEND_FREE_MB,
           round(((current_size - b.free_bytes) / a.max_size) * 100, 1) || '%' EXTEND_RATE
      from (select tablespace_name,
                   sum(ddf.bytes) current_size,
                   sum(case
                         when ddf.autoextensible = 'YES' THEN
                          DDF.MAXBYTES
                         ELSE
                          DDF.BYTES
                       END) max_size
              from dba_data_files ddf
             group by tablespace_name
            union
            select tablespace_name,
                   sum(ddf.bytes) current_size,
                   sum(case
                         when ddf.autoextensible = 'YES' THEN
                          DDF.MAXBYTES
                         ELSE
                          DDF.BYTES
                       END) max_size
              from dba_temp_files ddf
             group by tablespace_name) a,
           (select dfs.tablespace_name, sum(dfs.bytes) free_bytes
              from dba_free_space dfs
             group by dfs.tablespace_name
            union
            select tfs.tablespace_name, sum(tfs.BYTES_FREE) free_bytes
              from v$TEMP_SPACE_HEADER tfs
             group by tfs.tablespace_name) b
     where a.tablespace_name = b.tablespace_name(+);
    exit;
    EOF
    ;;
    #---------------------
    # End of rate
    #---------------------


    #------------------------------------------------------------
    # file
    #------------------------------------------------------------
    file)
    sqlplus -S / as sysdba <<EOF
    set linesize 140
    set pagesize 9999
    col file_id for 9999
    col TABLESPACE_NAME for a20      
    col FILE_NAME for a70
    col STATUS for a7
    col FILE_STATUS  for a10
    col "AUTO" for a3
    col "MB" for 999999999
           select d.file_id,
                  d.tablespace_name,
                  t.status "STATUS",
                  d.file_name,
                  d.status FILE_STATUS,
                  d.AUTOEXTENSIBLE "AUTO",
                  d.BYTES / 1024 / 1024 "MB"
             from dba_data_files d, dba_tablespaces t
            where t.tablespace_name = d.tablespace_name
            order by file_id;
    exit;
    EOF
    ;;
    #---------------------
    # End of file
    #---------------------

    #------------------------------------------------------------
    # -tbs *
    #------------------------------------------------------------
    *)
    echo "commond not found!!!"
    ;;

    esac
    ;;

    #=====================
    # End of -tbs
    #=====================


    #==============================================================================
    # -objlike
    #==============================================================================
    -objlike)
    sqlplus -S / as sysdba <<EOF
             set linesize 120
             col type format a16
             col OWNER format a12
             col status format a8
             col CREATED format a10
             col MODIFIED format a19
             col OBJECT_NAME format a30
         SELECT /* SHSNC */ OBJECT_TYPE TYPE,OBJECT_ID ID,OWNER,OBJECT_NAME,
                   TO_CHAR(CREATED,'YYYY/MM/DD') CREATED,
                   TO_CHAR(LAST_DDL_TIME,'YYYY/MM/DD HH24:MI:SS') MODIFIED,STATUS
               FROM DBA_OBJECTS
               WHERE OBJECT_TYPE IN ('CLUSTER','FUNCTION','INDEX',
                    'PACKAGE','PROCEDURE','SEQUENCE','SYNONYM',
                    'TABLE','TRIGGER','TYPE','VIEW')
                 AND ('$2' IS NULL OR UPPER(OWNER) = UPPER('$2'))
                 AND OBJECT_NAME LIKE UPPER('%$3%');
    exit;
    EOF
    ;;
    #=====================
    # End of -objlike
    #=====================


    #==============================================================================
    # -tablike
    #==============================================================================
    -tablike)
    sqlplus -S / as sysdba <<EOF
             set linesize 120
             col OWNER format a12
             col status format a8
             col CREATED format a10
             col MODIFIED format a19
             col OBJECT_NAME format a30
             SELECT /* SHSNC */ OBJECT_ID ID,OWNER,OBJECT_NAME,
                   TO_CHAR(CREATED,'YYYY/MM/DD') CREATED,
                   TO_CHAR(LAST_DDL_TIME,'YYYY/MM/DD HH24:MI:SS') MODIFIED,STATUS
               FROM DBA_OBJECTS
               WHERE OBJECT_TYPE = 'TABLE'
                 AND ('$2' IS NULL OR UPPER(OWNER) = UPPER('$2'))
                 AND OBJECT_NAME LIKE UPPER('%$3%');
    exit;
    EOF
    ;;
    #=====================
    # End of -tablike
    #=====================


    #==============================================================================
    # -tstat
    #==============================================================================
    -tstat)
    sqlplus -S / as sysdba <<EOF
             set linesize 150
             col owner format a10
             col partname format a30
             col INIEXT format 99999
             col nxtext format 99999
             col avgspc format 99999
             col ccnt format 999
             col rowlen format 9999
             col ssize format 9999999
             alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
             SELECT /* SHSNC */
                OWNER,NULL PARTNAME,
                NUM_ROWS NROWS, BLOCKS, AVG_SPACE AVGSPC,CHAIN_CNT CCNT, AVG_ROW_LEN ROWLEN,
                SAMPLE_SIZE SSIZE,LAST_ANALYZED ANADATE
             FROM DBA_TABLES
             WHERE UPPER(OWNER)=NVL(UPPER('$2'),OWNER)  AND TABLE_NAME=UPPER('$3')
             UNION ALL
             SELECT /* SHSNC */
                TABLE_OWNER OWNER,PARTITION_NAME PARTNAME,
                NUM_ROWS NROWS, BLOCKS, AVG_SPACE AVGSPC,CHAIN_CNT CCNT, AVG_ROW_LEN ROWLEN,
                SAMPLE_SIZE SSIZE,LAST_ANALYZED ANADATE
             FROM DBA_TAB_PARTITIONS
             WHERE UPPER(TABLE_OWNER)=NVL(UPPER('$2'),TABLE_OWNER)  AND TABLE_NAME=UPPER('$3');
    exit;
    EOF
    ;;
    #=====================
    # End of -tstat
    #=====================


    #==============================================================================
    # -tabpart
    #==============================================================================
    -tabpart)
    sqlplus -S / as sysdba <<EOF
             set linesize 120
             col USERNAME format a12
             col MACHINE format a16
             col TABLESPACE format a10
             SELECT /* SHSNC */ PARTITION_POSITION NO#,PARTITION_NAME,TABLESPACE_NAME TS_NAME,
                INITIAL_EXTENT/1024 INI_K, NEXT_EXTENT/1024 NEXT_K,PCT_INCREASE PCT,
                FREELISTS FLS, FREELIST_GROUPS FLGS
               FROM DBA_TAB_PARTITIONS
               WHERE ('$2' IS NULL OR UPPER(TABLE_OWNER) = UPPER('$2'))
                 AND TABLE_NAME LIKE UPPER('$3')
               ORDER BY 1;
    exit;
    EOF
    ;;
    #=====================
    # End of -tabpart
    #=====================

    #==============================================================================
    # -istat

    #==============================================================================
    -istat)
    sqlplus -S / as sysdba <<EOF
             set linesize 120
             col OWNER format a10
             col lkey format 999
             col dkey format 999
             col lev format 99
             col anaday format a10
             SELECT /* SHSNC */
                TABLE_OWNER OWNER, INDEX_NAME,
                BLEVEL LEV, LEAF_BLOCKS LBLKS,TRUNC(NUM_ROWS) NROWS,
                DISTINCT_KEYS DROWS,
                CLUSTERING_FACTOR CLSFCT,SAMPLE_SIZE SSIZE,
                TO_CHAR(LAST_ANALYZED,'YYYY/MM/DD') ANADAY,
                PARTITIONED PAR
             FROM DBA_INDEXES
             WHERE UPPER(TABLE_OWNER)=NVL(UPPER('$2'),TABLE_OWNER)
               AND TABLE_NAME=UPPER('$3');
    exit;
    EOF
    ;;
    #=====================
    # End of -istat
    #=====================


    #==============================================================================
    # -ipstat
    #==============================================================================
    -ipstat)
    sqlplus -S / as sysdba <<EOF
             set linesize 120
             col OWNER format a10
             col lkey format 999
             col dkey format 999
             col lev format 99
             col anaday format a10
             SELECT /* SHSNC */
                PARTITION_NAME,
                BLEVEL LEV, LEAF_BLOCKS LBLKS,TRUNC(NUM_ROWS) NROWS,
                DISTINCT_KEYS DROWS,
                CLUSTERING_FACTOR CLSFCT,SAMPLE_SIZE SSIZE,
                TO_CHAR(LAST_ANALYZED,'YYYY/MM/DD') ANADAY
             FROM DBA_IND_PARTITIONS
             WHERE UPPER(INDEX_OWNER)=NVL(UPPER('$2'),INDEX_OWNER)
               AND INDEX_NAME=UPPER('$3');
    exit;
    EOF
    ;;
    #=====================
    # End of -ipstat
    #=====================


    #==============================================================================
    # -idxdesc
    #==============================================================================
    -idxdesc)
    sqlplus -S / as sysdba <<EOF
          SET linesize 500
          set pagesize 999
          col INDEX_COL  FOR a30
          col INDEX_TYPE FOR a22
          col INDEX_NAME FOR a40
          col table_name FOR a32
          SELECT B.OWNER||'.'||B.INDEX_NAME INDEX_NAME,
                 A.INDEX_COL,B.INDEX_TYPE||'-'||B.UNIQUENESS INDEX_TYPE,B.PARTITIONED
            FROM (SELECT TABLE_OWNER,TABLE_NAME,INDEX_NAME, SUBSTR(MAX(SYS_CONNECT_BY_PATH(COLUMN_NAME, ',')), 2) INDEX_COL
                    FROM (SELECT TABLE_OWNER, TABLE_NAME,INDEX_NAME,  COLUMN_NAME,
                                 ROW_NUMBER() OVER(PARTITION BY TABLE_OWNER, TABLE_NAME, INDEX_NAME
                                 ORDER BY TABLE_OWNER, INDEX_NAME, COLUMN_POSITION, COLUMN_NAME) RN
                            FROM DBA_IND_COLUMNS
                           WHERE TABLE_NAME = UPPER('$3')
                             AND TABLE_OWNER = UPPER('$2'))
                   START WITH RN = 1
                  CONNECT BY PRIOR RN = RN - 1
                         AND PRIOR TABLE_NAME = TABLE_NAME
                         AND PRIOR INDEX_NAME = INDEX_NAME
                         AND PRIOR TABLE_OWNER = TABLE_OWNER
                   GROUP BY TABLE_NAME, INDEX_NAME, TABLE_OWNER
                   ORDER BY TABLE_OWNER, TABLE_NAME, INDEX_NAME
                 ) A,
                (SELECT * FROM DBA_INDEXES WHERE TABLE_NAME = UPPER('$3') AND TABLE_OWNER = UPPER('$2')) B
           WHERE A.TABLE_OWNER = B.TABLE_OWNER
             AND A.TABLE_NAME = B.TABLE_NAME
             AND A.INDEX_NAME =B.INDEX_NAME;
    exit;
    EOF
    ;;
    #=====================
    # End of -idxdesc
    #=====================


    #==============================================================================
    # -ddl
    #==============================================================================
    -ddl)
    sqlplus -S / as sysdba <<EOF
             set long 49000
             set longc 9999
             set line 150
             set pagesize 10000
             SELECT   dbms_metadata.get_ddl(upper('$3'),upper('$4'),upper('$2')) from dual;
    exit;
    EOF
    ;;
    #=====================
    # End of -ddl
    #=====================


    #==============================================================================
    # -flash
    #==============================================================================
    -flash)
    sqlplus -S / as sysdba <<EOF
    set linesize 120
    set pagesize 9999
    col "ORDER_ " for 99
    col NAME for a40
    col VALUE for a48
    WITH flashback_database_log AS
     (SELECT ROUND((SYSDATE - oldest_flashback_time) * 24 * 60, 2) oldest_log_minutes,
             retention_target retention_target_minutes,
             flashback_size / 1048576 flashback_size_mb,
             estimated_flashback_size / 1048576 estimated_flashback_size_mb
        FROM v$flashback_database_log),
    flashback_database_logfile AS
     (SELECT COUNT(*) logs,
             SUM(BYTES / 1048576) size_mb,
             MIN(first_time) oldest_log,
             MAX(first_time) latest_log
        FROM v$flashback_database_logfile),
    flashback_usage AS
     (SELECT file_type,
             ROUND(mb_used, 2) mb_used,
             ROUND(mb_reclaimable, 2) mb_reclaimable,
             DECODE(total_mb, 0, 0, ROUND(mb_used * 100 / total_mb, 2)) percent_space_used,
             DECODE(total_mb, 0, 0, ROUND(mb_reclaimable * 100 / total_mb, 2)) percent_space_reclaimable,
             number_of_files,
             total_mb db_recovery_file_dest_mb,
             flashback_retention_target,
             oldest_record,
             ROUND((sysdate - oldest_record) * 24 * 60, 2) oldest_record_age_sec
        FROM (SELECT SUM(DECODE(NAME,
                                'db_recovery_file_dest_size',
                                VALUE / 1048576,
                                0)) total_mb,
                     SUM(DECODE(NAME, 'db_flashback_retention_target', VALUE, 0)) flashback_retention_target
                FROM v$parameter
               WHERE NAME IN ('db_recovery_file_dest_size',
                              'db_flashback_retention_target')),
             (SELECT 'FLASHBACKLOG' file_type,
                     NVL(SUM(BYTES) / 1048576, 0) mb_used,
                     sum(CASE
                           WHEN last_time <= (sysdate - (tgt.value / 1440)) THEN
                            bytes / 1048576
                           ELSE
                            0
                         END) mb_reclaimable,
                     COUNT(*) number_of_files,
                     MIN(first_time) oldest_record
                FROM (select bytes,
                             lead(first_time) over(order by first_time asc) last_time,
                             first_time
                        from v$flashback_database_logfile) fla_log,
                     (SELECT value value
                        FROM v$parameter
                       WHERE name = 'db_flashback_retention_target') tgt
              UNION
              SELECT 'BACKUPPIECE' file_type,
                     NVL(SUM(BYTES / 1048576), 0) mb,
                     SUM(CASE
                           WHEN dl.rectype = 13 THEN
                            (BYTES / 1048576)
                           ELSE
                            0
                         END) reclaimable_mb,
                     COUNT(*) no_of_files,
                     MIN(start_time) oldest_record
                FROM v$backup_piece bp, x$kccagf dl
               WHERE is_recovery_dest_file = 'YES'
                 AND deleted = 'NO'
                 AND bp.recid = dl.recid(+)
                 AND dl.rectype(+) = 13
              UNION
              SELECT 'ARCHIVELOG' file_type,
                     NVL(SUM(blocks * block_size) / 1048576, 0) mb,
                     SUM(CASE
                           WHEN dl.rectype = 11 THEN
                            (LOG.blocks * LOG.block_size / 1048576)
                           ELSE
                            0
                         END) reclaimable_mb,
                     COUNT(*) no_of_files,
                     MIN(first_time) oldest_record
                FROM v$archived_log log, x$kccagf dl
               WHERE deleted = 'NO'
                 AND is_recovery_dest_file = 'YES'
                 AND dl.recid(+) = log.recid
                 AND dl.rectype(+) = 11
              UNION
              SELECT 'ONLINELOG' file_type,
                     SUM(BYTES / 1048576) mb,
                     0 reclaimable,
                     COUNT(*) no_of_files,
                     MIN(first_time) oldest_record
                FROM v$logfile lf,
                     (SELECT group#, BYTES, first_time
                        FROM v$standby_log
                      UNION
                      SELECT group#, BYTES, first_time FROM v$log) l
               WHERE l.group# = lf.group#
                 AND lf.is_recovery_dest_file = 'YES'
              UNION
              SELECT 'IMAGECOPY',
                     NVL(SUM(blocks * (block_size / 1048576)), 0) mb,
                     0 reclaimable_mb,
                     COUNT(*) no_of_files,
                     MIN(creation_time) oldest_record
                FROM v$datafile_copy
               WHERE deleted = 'NO'
                 AND is_recovery_dest_file = 'YES'
              UNION
              SELECT 'CONTROLFILE',
                     NVL(SUM(block_size * file_size_blks) / 1048576, 0) mb,
                     0 reclaimable,
                     COUNT(*) no_of_files,
                     NULL oldest_record
                FROM v$controlfile
               WHERE is_recovery_dest_file = 'YES'))
    SELECT order_, NAME, VALUE
      FROM (SELECT 0 order_, NAME, VALUE
              FROM v$parameter
             WHERE NAME LIKE 'db_recovery_file%'
            UNION
            SELECT 3,
                   'oldest flashback log (minutes)',
                   TO_CHAR(ROUND(oldest_log_minutes, 2))
              FROM flashback_database_log
            UNION
            SELECT 1,
                   'retention target (minutes)',
            UNION
            SELECT 2,
                   'estimated size for flashback logs (MB)',
                   TO_CHAR(ROUND(retention_target_minutes, 2))
              FROM flashback_database_log
                   TO_CHAR(ROUND(estimated_flashback_size_mb, 2))
              FROM flashback_database_log
            UNION
            SELECT 2, 'Current flashback log count', TO_CHAR(logs)
              FROM flashback_database_logfile
            UNION
            SELECT 3,
                   'Most recent flashback log (minutes)',
                   TO_CHAR(ROUND((SYSDATE - latest_log) * 24 * 60, 2))
              FROM flashback_database_logfile
            UNION
            SELECT 4,
                   'Total size of all files in MB',
                   TO_CHAR(ROUND(SUM(mb_used), 2))
              FROM flashback_usage
            UNION
            SELECT 5,
                   'Total size of reclaimable files in MB',
                   TO_CHAR(ROUND(SUM(mb_reclaimable), 2))
              FROM flashback_usage
            UNION
            SELECT 6,
                   'unused space in MB',
                   TO_CHAR(ROUND(MIN(db_recovery_file_dest_mb) - SUM(mb_used)))
              FROM flashback_usage)
     ORDER BY order_, NAME;
    exit;
    EOF
    ;;
    #=====================
    # End of -flash
    #=====================


    #==============================================================================
    # -lock
    #==============================================================================
    -lock)
    sqlplus -S / as sysdba <<EOF       
    set linesize 180
    set pagesize 999
    col OS_USER_NAME for a20
    col USER_NAME for a16
    col LOCK_TYPE for a16
    col OBJECT for a20
    col LOCK_MODE for a16
    col OWNER for a16
    col SID for 999999
    col SERIAL_NUM for 99999
    SELECT /*+ RULE */
     LS.OSUSER OS_USER_NAME,
     LS.USERNAME USER_NAME,
     DECODE(LS.TYPE,
            'RW',
            'Row wait enqueue lock',
            'TM',
            'DML enqueue lock',
            'TX',
            'Transaction enqueue lock',
            'UL',
            'User supplied lock') LOCK_TYPE,
     O.OBJECT_NAME OBJECT,
     DECODE(LS.LMODE,
            1,
            NULL,
            2,
            'Row Share',
            3,
            'Row Exclusive',
            4,
            'Share',
            5,
            'Share Row Exclusive',
            6,
            'Exclusive',
            NULL) LOCK_MODE,
     O.OWNER,
     LS.SID,
     LS.SERIAL# SERIAL_NUM
      FROM SYS.DBA_OBJECTS O,
           (SELECT S.OSUSER,
                   S.USERNAME,
                   L.TYPE,
                   L.LMODE,
                   S.SID,
                   S.SERIAL#,
                   L.ID1,
                   L.ID2
              FROM v$SESSION S, v$LOCK L
             WHERE S.SID = L.SID) LS
     WHERE O.OBJECT_ID = LS.ID1
       AND O.OWNER <> 'SYS'
     ORDER BY O.OWNER, O.OBJECT_NAME;
    exit;
    EOF
    ;;
    #=====================
    # End of -lock
    #=====================


    #==============================================================================
    # -lockwait
    #==============================================================================
    -lockwait)
    sqlplus -S / as sysdba <<EOF
             set linesize 180
         set pagesize 999
             col HOLD_SID format 99999
             col WAIT_SID format 99999
             col type format a20
             col hold format a12
             col request format a12
             SELECT /* SHSNC */ /*+ ORDERED USE_HASH(H,R) */
                H.SID HOLD_SID,
                R.SID WAIT_SID,
                decode(H.type,
                        'MR', 'Media Recovery',
                        'RT', 'Redo Thread',
                        'UN', 'User Name',
                        'TX', 'Transaction',
                        'TM', 'DML',
                        'UL', 'PL/SQL User Lock',
                        'DX', 'Distributed Xaction',
                        'CF', 'Control File',
                        'IS', 'Instance State',
                        'FS', 'File Set',
                        'IR', 'Instance Recovery',
                        'ST', 'Disk Space Transaction',
                        'TS', 'Temp Segment',
                        'IV', 'Library Cache Invalidation',
                        'LS', 'Log Start or Switch',
                        'RW', 'Row Wait',
                        'SQ', 'Sequence Number',
                        'TE', 'Extend Table',
                        'TT', 'Temp Table',
                        'TC', 'Thread Checkpoint',
                                    'SS', 'Sort Segment',
                                    'JQ', 'Job Queue',
                                    'PI', 'Parallel operation',
                                    'PS', 'Parallel operation',
                                    'DL', 'Direct Index Creation',
                        H.type) type,
                decode(H.lmode,
                        0, 'None',         1, 'Null',
                        2, 'Row-S (SS)',   3, 'Row-X (SX)',
                        4, 'Share',        5, 'S/Row-X (SSX)',
                        6, 'Exclusive',    to_char(H.lmode)) hold,
                 decode(r.request,         0, 'None',
                        1, 'Null',         2, 'Row-S (SS)',
                        3, 'Row-X (SX)',   4, 'Share',
                        5, 'S/Row-X (SSX)',6, 'Exclusive',
                        to_char(R.request)) request,
                R.ID1,R.ID2,R.CTIME
              FROM V$LOCK H,V$LOCK R
              WHERE H.BLOCK = 1 AND R.REQUEST > 0 AND H.SID <> R.SID
                and H.TYPE <> 'MR' AND R.TYPE <> 'MR'
                AND H.ID1 = R.ID1 AND H.ID2 = R.ID2 AND H.TYPE=R.TYPE
                AND H.LMODE > 0 AND R.REQUEST > 0 ORDER BY 1,2;
    exit;
    EOF
    ;;
    #=====================
    # End of -lockwait
    #=====================


    #==============================================================================
    # -sqltext
    #==============================================================================
    -sqltext)
    sqlplus -S / as sysdba <<EOF
             set linesize 120  
         set pagesize 999
             SELECT /* SHSNC */ SQL_TEXT FROM V$SQLTEXT
              WHERE SQL_ID = to_char('$2')
              ORDER BY PIECE;
    exit;
    EOF
    ;;
    #=====================
    # End of -sqltext
    #=====================


    #==============================================================================
    # -sql
    #==============================================================================
    -sql)
    case $2 in

    #------------------------------------------------------------
    # spid
    #------------------------------------------------------------
    spid)
    sqlplus -S / as sysdba <<EOF
         set linesize 140
         set pagesize 999
         col username for a18
         col sql_text for a80
         alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
    select ses.username, ses.LOGON_TIME,  sql.sql_text
      from v$session ses, v$process pro, v$sql sql
     where ses.paddr = pro.addr
       and ses.SQL_HASH_VALUE = sql.HASH_VALUE
       and ses.SQL_ADDRESS = sql.address
       and pro.spid = '$3';
    exit;
    EOF
    ;;
    #---------------------
    # End of spid
    #---------------------


    #------------------------------------------------------------
    # plan
    #------------------------------------------------------------
    plan)
    sqlplus -S / as sysdba <<EOF  
    set pagesize 999
    set linesize 180
    alter session set STATISTICS_LEVEL = ALL;
    select * from table(dbms_xplan.display_cursor('$3',$4,'advanced'));
    exit;
    EOF
    ;;
    #---------------------
    # End of plan
    #---------------------


    #------------------------------------------------------------
    # hist
    #------------------------------------------------------------
    hist)
    sqlplus -S / as sysdba <<EOF
    set linesize 120
    set pagesize 999
    set linesize 140
    col plan_hash_value format 9999999999
    col id format 999
    col operation format a16
    col options format a8
    col object_owner format a10
    col object_name format a30
    col optimizer format a10
    col cost format 9999999
    col access_predicates format a10
    col filter_predicates format a10
    SELECT plan_hash_value,
             id,
             LPAD (' ', DEPTH) || operation operation,
             options,
             object_owner,
             object_name,
             optimizer,
             cost,
             access_predicates,
             filter_predicates
        FROM dba_hist_sql_plan
       WHERE sql_id = '$3'
    ORDER BY plan_hash_value, id;
    exit;
    EOF
    ;;
    #---------------------
    # End of hist
    #---------------------


    esac
    ;;
    #=====================
    # End of -sql
    #=====================


    #==============================================================================
    # -topevent
    #==============================================================================
    -topevent)
    sqlplus -S / as sysdba <<EOF
    set linesize 120
    col "Event" for a34
    col "Waits" for 9999999999999
    col "Time" for 9999999999999
    col "Avg" for 999999999
    col pctwa for 999999
    col "Wait Class" for a20
    SELECT event "Event", totwa "Waits", twsec "Time", avgms "Avg",
      ROUND(RATIO_TO_REPORT(twsec) OVER () * 100,1) pctwa , wclas "Wait Class"
      FROM
      (SELECT
            NVL(substr(event,1,30),' ')          event,
           AVG(total_waits)                      totwa,
      ROUND(AVG(time_waited_micro)/1000000, 0)   twsec,
      ROUND(SUM(time_waited_micro)/
           SUM(total_waits)/1000, 2)             avgms,
      NVL(substr(wait_class,1,13),' ')           wclas
      FROM  Gv$SYSTEM_EVENT
      WHERE WAIT_CLASS <> 'Idle'
      GROUP BY event, wait_class
      HAVING SUM(total_waits) > 0
      UNION ALL
      SELECT
           'CPU time'                           event,
           0                                    totwa,
           AVG(icput)                           twsec,
           0                                    avgms,
           ' '                                  wclas
      FROM
      (
      select inst_id, sum(VALUE)/100 icput
      FROM   Gv$SYSSTAT
      WHERE name in ('CPU used when call started',
                    'CPU used by this session')
      group by inst_id) ORDER BY twsec desc) WHERE ROWNUM <6;
    exit;
    EOF
    ;;
    #=====================
    # End of -topevent
    #=====================


    #==============================================================================
    # -adinfo
    #==============================================================================
    -adinfo)
    for i in `asmcmd lsdg |grep -v Name | awk -F' ' '{print $NF}'|cut -d/ -f1`; do echo "";echo "Diskgroup : $i";asmcmd lsattr -l -G $i ;done
    ;;
    #=====================
    # End of -adinfo
    #=====================


    #==============================================================================
    # -asmfree
    #==============================================================================
    -asmfree)
    sqlplus -S / as sysdba <<EOF
    set linesize 120
    set pagesize 999
    col name for a20
    col total_mb for 9999999999999
    col free_mb for 9999999999999
    col pct_used for  999999999
    select name, total_mb/1024, free_mb/1024, ROUND((1- (free_mb / total_mb))*100, 2)  pct_used from v$asm_diskgroup;
    exit;
    EOF
    ;;
    #=====================
    # End of -asmfree
    #=====================


    #==============================================================================
    # -dgarc  
    #==============================================================================
    -dgarc)
    sqlplus -S / as sysdba <<EOF
         set linesize 140
         set pagesize 999
         col SEQUENCE# for 999999
         col APPLIED for a10
         col ARCHIVED for a8
         col FIRST_TIME for a20
         col NEXT_TIME for a20
         alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
    select * from (select SEQUENCE#, FIRST_TIME, NEXT_TIME, APPLIED, ARCHIVED from V$ARCHIVED_LOG order by 1 desc) where rownum<40 order by 1;   
    exit;
    EOF
    ;;
    #=====================
    # End of -dgarc
    #=====================

    #==============================================================================
    # -dgs  
    #==============================================================================
    -dgs)
    sqlplus -S / as sysdba <<EOF
         set linesize 140
         set pagesize 999
         col PROCESS for a10
         col DB_UNIQUE_NAME for a12
         col DATABASE_ROLE for a12
         col OPEN_MODE for a12
         col PROTECTION_MODE for a20
         col PROTECTION_LEVEL for a20
         col SWITCHOVER_STATUS for a20
    SELECT DB_UNIQUE_NAME,DATABASE_ROLE , OPEN_MODE,
    PROTECTION_MODE, PROTECTION_LEVEL, SWITCHOVER_STATUS
    FROM V$DATABASE;
         col STATUS for a20
         col CURRENT_TARGET for a20
         col THRESHOLD for 9999999999
         col PRESENT for a20
    SELECT FS_FAILOVER_STATUS STATUS, FS_FAILOVER_CURRENT_TARGET CURRENT_TARGET, FS_FAILOVER_THRESHOLD THRESHOLD,
    FS_FAILOVER_OBSERVER_PRESENT  PRESENT
    FROM V$DATABASE;
    exit;
    EOF
    ;;
    #=====================
    # End of -dgs
    #=====================


    #==============================================================================
    # -dgp 
    #==============================================================================
    -dgp)
    sqlplus -S / as sysdba <<EOF
         set linesize 140
         set pagesize 999
         col PROCESS for a10
         col CLIENT_PROCESS for a10
         col SEQUENCE# for 999999999
         col STATUS for a15
         SELECT PROCESS, CLIENT_PROCESS, SEQUENCE#, STATUS FROM V$MANAGED_STANDBY;
    exit;
    EOF
    ;;
    #=====================
    # End of -dgp
    #=====================


    #==============================================================================
    # -dge
    #==============================================================================
    -dge)
    sqlplus -S / as sysdba <<EOF
         set linesize 140
         set pagesize 999
         col dest_id for 999
         col error for a80
         SELECT DEST_ID,ERROR FROM V$ARCHIVE_DEST where rownum<3;
    exit;
    EOF
    ;;
    #=====================
    # End of -dge
    #=====================


    #==============================================================================
    # -dggap
    #==============================================================================
    -dggap)
    sqlplus -S / as sysdba <<EOF
    set lines 200 pages 100
    column db_name           format a9
    column database_role     format a13
    column thread#           format 9999
    break on thread# skip 1

    select db_name,thread#,database_role,sequence# from
    (select name db_name from v$database),
    (select 'Primary' database_role,thread#,sequence# from (select unique thread#, max(sequence#) over (partition by thread#) as sequence# from v$archived_log where standby_dest='NO' and archived='YES'))
    union all
    select db_name,thread#,database_role,sequence# from
    (select name db_name from v$database),
    (select 'Standby' database_role,thread#,sequence# from (select unique thread#, max(sequence#) over (partition by thread#) as sequence# from v$archived_log where standby_dest='YES' and archived='YES'))
    order by thread#,database_role;
    exit;
    EOF
    ;;
    #=====================
    # End of -dggap
    #=====================


    #==============================================================================
    # -dglag
    #==============================================================================
    -dglag)
    sqlplus -S / as sysdba <<EOF
    set lines 200 pages 100
    column value format a26
    select value from v$dataguard_stats where name='apply lag';
    exit;
    EOF
    ;;
    #=====================
    # End of -dglag
    #=====================


    #==============================================================================
    # $1 *
    #==============================================================================
    *)
    echo " "
    echo "commond not found!!!"
    echo "use 'orac -help' learn more about usage"
    echo " "
    ;;
     
    esac


  • 相关阅读:
    【狼】狼的unity3d脚本学习
    [转]关于Unity中文件读取
    【狼】unity3d 安卓播放视频替代视频纹理
    SpringMVC异常处理
    springboot 热启动
    旅游网dao层
    MyBatisPlus快速入门
    旅游网dao层
    MySQL8 修改密码验证插件
    Zookeeper环境搭建
  • 原文地址:https://www.cnblogs.com/liang545621/p/9410607.html
Copyright © 2011-2022 走看看