zoukankan      html  css  js  c++  java
  • [ORACLE]管理方面的脚本收集

    -----------------------------Cryking原创------------------------------
    -----------------------转载请注明出处,谢谢!------------------------ 

    1.查询AWR相关的视图名称

    SELECT table_name
      FROM dba_tables t
     WHERE table_name LIKE 'WRH$%'
           AND NOT EXISTS (SELECT 'x'
              FROM dba_tab_columns c
             WHERE c.column_name = 'SNAP_ID'
                   AND c.table_name = t.table_name);


    2. CPU耗时查询

    with AASSTAT as (
               select
                     decode(n.wait_class,'User I/O','User I/O',
                                         'Commit','Commit',
                                         'Wait')                               CLASS,
                     sum(round(m.time_waited/m.INTSIZE_CSEC,3))                AAS,
                     BEGIN_TIME ,
                     END_TIME
               from  v$waitclassmetric  m,
                     v$system_wait_class n
               where m.wait_class_id=n.wait_class_id
                 and n.wait_class != 'Idle'
               group by  decode(n.wait_class,'User I/O','User I/O', 'Commit','Commit', 'Wait'), BEGIN_TIME, END_TIME
              union
                 select 'CPU_ORA_CONSUMED'                                     CLASS,
                        round(value/100,3)                                     AAS,
                     BEGIN_TIME ,
                     END_TIME
                 from v$sysmetric
                 where metric_name='CPU Usage Per Sec'
                   and group_id=2
              union
                select 'CPU_OS'                                                CLASS ,
                        round((prcnt.busy*parameter.cpu_count)/100,3)          AAS,
                     BEGIN_TIME ,
                     END_TIME
                from
                  ( select value busy, BEGIN_TIME,END_TIME from v$sysmetric where metric_name='Host CPU Utilization (%)' and group_id=2 ) prcnt,
                  ( select value cpu_count from v$parameter where name='cpu_count' )  parameter
              union
                 select
                   'CPU_ORA_DEMAND'                                            CLASS,
                   nvl(round( sum(decode(session_state,'ON CPU',1,0))/60,2),0) AAS,
                   cast(min(SAMPLE_TIME) as date) BEGIN_TIME ,
                   cast(max(SAMPLE_TIME) as date) END_TIME
                 from v$active_session_history ash
                  where SAMPLE_TIME >= (select BEGIN_TIME from v$sysmetric where metric_name='CPU Usage Per Sec' and group_id=2 )
                   and SAMPLE_TIME < (select END_TIME from v$sysmetric where metric_name='CPU Usage Per Sec' and group_id=2 )
    )
    select
           to_char(BEGIN_TIME,'HH:MI:SS') BEGIN_TIME,
           to_char(END_TIME,'HH:MI:SS') END_TIME,
           ( decode(sign(CPU_OS-CPU_ORA_CONSUMED), -1, 0, (CPU_OS - CPU_ORA_CONSUMED )) +
           CPU_ORA_CONSUMED +
            decode(sign(CPU_ORA_DEMAND-CPU_ORA_CONSUMED), -1, 0, (CPU_ORA_DEMAND - CPU_ORA_CONSUMED ))) CPU_TOTAL,
           decode(sign(CPU_OS-CPU_ORA_CONSUMED), -1, 0, (CPU_OS - CPU_ORA_CONSUMED )) CPU_OS,
           CPU_ORA_CONSUMED CPU_ORA,
           decode(sign(CPU_ORA_DEMAND-CPU_ORA_CONSUMED), -1, 0, (CPU_ORA_DEMAND - CPU_ORA_CONSUMED )) CPU_ORA_WAIT,
           COMMIT,
           READIO,
           WAIT
    from (
    select
           min(BEGIN_TIME) BEGIN_TIME,
           max(END_TIME) END_TIME,
           sum(decode(CLASS,'CPU_ORA_CONSUMED',AAS,0)) CPU_ORA_CONSUMED,
           sum(decode(CLASS,'CPU_ORA_DEMAND'  ,AAS,0)) CPU_ORA_DEMAND,
           sum(decode(CLASS,'CPU_OS'          ,AAS,0)) CPU_OS,
           sum(decode(CLASS,'Commit'          ,AAS,0)) COMMIT,
           sum(decode(CLASS,'User I/O'        ,AAS,0)) READIO,
           sum(decode(CLASS,'Wait'            ,AAS,0)) WAIT
    from AASSTAT)


    3.  等待事件信息

    select 
        sid sw_sid, 
        CASE WHEN state != 'WAITING' THEN 'WORKING'
             ELSE 'WAITING'
        END AS state, 
        CASE WHEN state != 'WAITING' THEN 'On CPU / runqueue'
             ELSE event
        END AS sw_event, 
        seq#, 
        seconds_in_wait sec_in_wait, 
        CASE state WHEN 'WAITING' THEN NVL2(p1text,p1text||'= ',null)||CASE WHEN P1 < 536870912 THEN to_char(P1) ELSE '0x'||rawtohex(P1RAW) END ELSE null END SW_P1,
        CASE state WHEN 'WAITING' THEN NVL2(p2text,p2text||'= ',null)||CASE WHEN P2 < 536870912 THEN to_char(P2) ELSE '0x'||rawtohex(P2RAW) END ELSE null END SW_P2,
        CASE state WHEN 'WAITING' THEN NVL2(p3text,p3text||'= ',null)||CASE WHEN P3 < 536870912 THEN to_char(P3) ELSE '0x'||rawtohex(P3RAW) END ELSE null END SW_P3,
        CASE state WHEN 'WAITING' THEN 
            CASE 
                WHEN event like 'cursor:%' THEN
                    '0x'||trim(to_char(p1, 'XXXXXXXXXXXXXXXX'))
                        WHEN (event like 'enq%' OR event = 'DFS lock handle') AND state = 'WAITING' THEN 
                    '0x'||trim(to_char(p1, 'XXXXXXXXXXXXXXXX'))||': '||
                    chr(bitand(p1, -16777216)/16777215)||
                    chr(bitand(p1,16711680)/65535)||
                    ' mode '||bitand(p1, power(2,14)-1)
                WHEN event like 'latch%' AND state = 'WAITING' THEN 
                      '0x'||trim(to_char(p1, 'XXXXXXXXXXXXXXXX'))||': '||(
                            select name||'[par' 
                                from v$latch_parent 
                                where addr = hextoraw(trim(to_char(p1,rpad('0',length(rawtohex(addr)),'X'))))
                            union all
                            select name||'[c'||child#||']' 
                                from v$latch_children 
                                where addr = hextoraw(trim(to_char(p1,rpad('0',length(rawtohex(addr)),'X'))))
                      )
                WHEN event like 'library cache pin' THEN
                      '0x'||RAWTOHEX(p1raw)
            ELSE NULL END 
        ELSE NULL END AS sw_p1transl
    FROM 
        v$session_wait 
    ORDER BY
        state,
        sw_event,
        p1,
        p2,
        p3;


    4.  查询当前监听的连接信息

    SELECT host_short || '.' || sid || '=
        (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = ' || hostname || ')(PORT = ' || port || '))
        (CONNECT_DATA =
          (SERVER = DEDICATED)
          ' || CASE
             WHEN instr(service_name, 'XDB') > 0 THEN
              NULL
             ELSE
              '(SERVICE_NAME = ' || service_name || ')'
           END || '(SID = ' || SID || ')
        ))
      '
      FROM (SELECT --target_name,
             UPPER(host_name) hostname
            ,UPPER(SUBSTR(t.host_name, 1, INSTR(t.host_name, '.') - 1)) HOST_SHORT
            ,(SUBSTR(t.host_name
                    ,INSTR(t.host_name, '.') + 1
                    ,LENGTH(t.host_name))) DOMAIN
            ,(SELECT p.property_value
                FROM mgmt$target_properties p
               WHERE p.property_name = 'Port'
                     AND p.target_guid = t.target_guid) port
            ,'sys/anything@' || host_name || ':' ||
             (SELECT p.property_value
                FROM mgmt$target_properties p
               WHERE p.property_name = 'Port'
                     AND p.target_guid = t.target_guid) || '/' ||
             (SELECT p.property_value
                FROM mgmt$target_properties p
               WHERE p.property_name = 'ServiceName'
                     AND p.target_guid = t.target_guid) || ' as sysdba' Connection_string
            ,(SELECT tp.property_value
                FROM mgmt$target_properties tp
               WHERE tp.target_type = 'host'
                     AND tp.property_name = 'IP_address'
                     AND tp.target_name = t.host_name) ip
            ,(SELECT p.property_value
                FROM mgmt$target_properties p
               WHERE p.property_name = 'DBVersion'
                     AND p.target_guid = t.target_guid) DB_Version
            ,(SELECT p.property_value
                FROM mgmt$target_properties p
               WHERE p.property_name = 'OracleHome'
                     AND p.target_guid = t.target_guid) oh
            ,(SELECT p.property_value
                FROM mgmt$target_properties p
               WHERE p.property_name = 'ServiceName'
                     AND p.target_guid = t.target_guid) Service_name
            ,(SELECT p.property_value
                FROM mgmt$target_properties p
               WHERE p.property_name = 'log_archive_mode'
                     AND p.target_guid = t.target_guid) logmode
            ,UPPER((SELECT p.property_value
                     FROM mgmt$target_properties p
                    WHERE p.property_name = 'SID'
                          AND p.target_guid = t.target_guid)) sid
            ,(SELECT p.property_value
                FROM mgmt$target_properties p
               WHERE p.property_name = 'CPUCount'
                     AND p.target_guid = t.target_guid) CPU
            ,ROUND(SYSDATE - TO_DATE((SELECT p.property_value
                                       FROM mgmt$target_properties p
                                      WHERE p.property_name = 'StartTime'
                                            AND p.target_guid = t.target_guid)
                                    ,'YYYY-MM-DD HH24:MI:SS')
                  ,0) Days_Uptime
            ,(SELECT p.property_value
                FROM mgmt$target_properties p
               WHERE p.property_name = 'StartTime'
                     AND p.target_guid = t.target_guid) Uptime
            ,(SELECT p.property_value
                FROM mgmt$target_properties p
               WHERE p.property_name = 'VersionCategory'
                     AND p.target_guid = t.target_guid) VersionCategory
            ,(SELECT p.property_value
                FROM mgmt$target_properties p
               WHERE p.property_name = 'VersionBanner'
                     AND p.target_guid = t.target_guid) VersionBanner
            ,CASE
               WHEN (INSTR((SELECT UPPER(p.property_value)
                             FROM mgmt$target_properties p
                            WHERE p.property_name = 'VersionBanner'
                                  AND p.target_guid = t.target_guid)
                          ,'ENTERPRISE')) > 0 THEN
                'Enterprise'
               ELSE
                'Standard/Standard One'
             END Edition
            ,(SELECT b.VALUE
                FROM MGMT$ECM_VISIBLE_SNAPSHOTS     A
                    ,SYSMAN.MGMT_DB_INIT_PARAMS_ECM B
               WHERE A.ECM_SNAPSHOT_ID = B.ECM_SNAPSHOT_ID
                     AND a.TARGET_TYPE = 'oracle_database'
                     AND b.name = 'control_file_record_keep_time'
                     AND a.target_guid = t.target_guid) control_file_record_keep_time
            ,(SELECT b.VALUE
                FROM MGMT$ECM_VISIBLE_SNAPSHOTS     A
                    ,SYSMAN.MGMT_DB_INIT_PARAMS_ECM B
               WHERE A.ECM_SNAPSHOT_ID = B.ECM_SNAPSHOT_ID
                     AND a.TARGET_TYPE = 'oracle_database'
                     AND b.name = 'optimizer_features_enable'
                     AND a.target_guid = t.target_guid) optimizer_features_enable
            ,(SELECT ROUND(b.VALUE / 1024 / 1024 / 1024, 2)
                FROM MGMT$ECM_VISIBLE_SNAPSHOTS     A
                    ,SYSMAN.MGMT_DB_INIT_PARAMS_ECM B
               WHERE A.ECM_SNAPSHOT_ID = B.ECM_SNAPSHOT_ID
                     AND a.TARGET_TYPE = 'oracle_database'
                     AND b.name = 'memory_target'
                     AND a.target_guid = t.target_guid) memory_target
            ,(SELECT sessions_highwater
                FROM MGMT$ECM_VISIBLE_SNAPSHOTS A
                    ,SYSMAN.MGMT_DB_license_ECM B
               WHERE A.ECM_SNAPSHOT_ID = B.ECM_SNAPSHOT_ID
                     AND TARGET_TYPE = 'oracle_database'
                     AND a.target_guid = t.target_guid) sessions_highwater
            ,(SELECT sessions_current
                FROM MGMT$ECM_VISIBLE_SNAPSHOTS A
                    ,SYSMAN.MGMT_DB_license_ECM B
               WHERE A.ECM_SNAPSHOT_ID = B.ECM_SNAPSHOT_ID
                     AND TARGET_TYPE = 'oracle_database'
                     AND a.target_guid = t.target_guid) sessions_current
              FROM mgmt$target t
             WHERE t.target_type IN ('oracle_database')) Raw_data
     ORDER BY host_short
             ,sid;


     

    很多其它的DBA脚本见一老外的BLOG: http://www.idevelopment.info/cgi/ORACLE_dba_scripts.cgi

  • 相关阅读:
    Devexpress treeList
    sql rowversion
    2015年8月9日 开始 devsxpress 学习
    定时执行任务
    Dexpress 中 grid的使用
    新版 itextsharp pdf code
    jquery ui 中的插件开发
    Centos7下git服务器及gogs部署
    JAVA(TOMCAT)远程调试
    分布式文件系统笔记(慢慢补充)
  • 原文地址:https://www.cnblogs.com/wgwyanfs/p/6771186.html
Copyright © 2011-2022 走看看