[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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Oracle数据库巡视脚本是一种用于检查和评估数据库健康状况的工具。它可以通过 自动化的脚本程序来执行各种检查和分析,以确保数据库的稳定性和性能。 这些巡视脚本通常会包括以下几个方面的检查: 1. 数据库配置检查:检查数据库的配置参数是否符合最佳实践和建议。例如,检查SGA和PGA的大小、Buffer Cache的配置等。 2. 性能检查:检查数据库的性能瓶颈和潜在问题。例如,检查SQL执行计划、索引使用情况、等待事件等,以找出可能影响数据库性能的因素。 3. 数据库对象检查:检查数据库中的对象,如表、索引、聚簇等是否有效和正确。例如,检查对象的状态、表空间的使用情况、表和索引的统计信息等。 4. 高可用性检查:检查数据库的高可用性方案是否正常工作和配置正确。例如,检查Data Guard配置、RAC集群配置等。 5. 安全检查:检查数据库的安全设置是否符合最佳实践和安全要求。例如,检查用户权限、密码策略、审计配置等。 巡视脚本的好处是可以帮助数据库管理员及时发现和解决数据库问题,提高数据库的可用性和性能。此外,巡视脚本还可以自动化进行检查,节省人力和时间成本。 总之,Oracle数据库巡视脚本是一个重要的工具,它可以帮助数据库管理员有效地管理和维护数据库,确保数据库的稳定性和性能。 ### 回答2: Oracle数据库巡视脚本是一种自动化工具,用于检查和监控Oracle数据库的健康状态和性能。它可以帮助数据库管理员和运维人员发现潜在的问题,并提供相应的解决方案。 巡视脚本可以检查数据库的各个方面,包括实例设置、表空间使用情况、文件和目录权限、用户权限、数据库对象状态等。通过执行一系列的SQL查询和系统指令,它能够收集数据库的相关信息,如系统配置参数、SQL语句执行计划、性能指标等。然后,它会分析这些数据,并生成详细的巡视报告,以便用户了解数据库的整体情况。 在巡视脚本中,常见的一些功能包括: 1. 检查数据库的基本设置,如字符集、时区、日志模式等,确保它们与应用的要求相符。 2. 检查表空间的使用情况,包括空间占用、增长趋势等,以避免空间不足导致的问题。 3. 检查数据库对象的状态,如索引是否坏掉、表是否需要统计信息更新等,以优化查询性能。 4. 检查数据库的性能指标,如响应时间、并发连接数、IO瓶颈等,以发现性能瓶颈并作出相应的调整。 5. 检查备份和恢复策略,确保数据库的可用性和完整性。 通过使用巡视脚本,数据库管理员可以定期检查数据库的健康状态,及时发现并解决潜在的问题,提高数据库的可靠性和性能。同时,它也可以作为数据库维护和优化的参考工具,帮助管理员了解数据库的内部结构和运行情况。总之,巡视脚本是数据库管理工作中的重要辅助工具,能够提供数据库的综合性分析和监控。 ### 回答3: Oracle数据库巡视脚本是用来监控和评估数据库性能、安全性及可用性的工具。通过运行这个脚本,可以检查数据库的各个方面,发现潜在的问题,并提供相应的解决方案。 这个巡视脚本通常包括以下方面的检查: 1. 数据库性能:检查数据库的运行情况,包括性能指标、系统负载、网络延迟等。通过分析这些数据,可以找到数据库性能的瓶颈以及可能的优化点。 2. 数据库安全性:检查数据库的安全设置,包括用户权限、密码策略、访问控制等。通过分析这些设置,可以发现潜在的安全风险,并提供相应的修复建议。 3. 数据库备份与恢复:检查数据库的备份策略和恢复能力,确保数据库的数据可以及时恢复,并且备份策略合理有效。 4. 数据库对象健康:检查数据库对象的状态和健康情况,包括表空间使用情况、索引状态、存储结构等。通过分析这些数据,可以发现可能存在的问题,并提供相应的优化建议。 5. 数据库版本和补丁:检查数据库的版本和已应用的补丁,确保数据库的安全性和稳定性。如果存在漏洞或者问题,提供相应的解决方案。 通过运行这个巡视脚本,可以及时发现数据库的问题,并提供相应的解决方案和优化建议,从而提高数据库的性能、安全性和可用性。这样可以有效地保证业务的正常运行,提高数据库管理的效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值