Oracle 10g 数据库巡检服务

prompt 数据库巡检服务 
prompt 说明:
prompt 用于检查Oracle 10g数据库各项指标(不支持DG备库运行)。
prompt 包括数据库主要参数、数据库主要对象情况、存储空间配置、数据库性能、RMAN备份情况等。
prompt 巡检脚本必须以sys用户执行。

prompt +----------------------------------------------------------------------------+
prompt 巡检脚本执行过程将持续数分钟。
prompt 开始执行......
prompt +----------------------------------------------------------------------------+


define reportHeader="<font size=+3 color=darkgreen><b>数据库巡检报告</b></font><hr>巡检人员:  "


-- +----------------------------------------------------------------------------+
-- |                           SCRIPT SETTINGS                                  |
-- +----------------------------------------------------------------------------+

set termout       off
set echo          off
set feedback      off
set heading       off
set verify        off
set wrap          on
set trimspool     on
set serveroutput  on
set escape        on

set pagesize 50000
set linesize 175
set long     2000000000

clear buffer computes columns breaks

set termout on
prompt 输入客户名称简写,赋值于参数cust_name。
define _cust_name=&cust_name

prompt 请等待......

set termout off


-- +----------------------------------------------------------------------------+
-- |                   GATHER DATABASE REPORT INFORMATION                       |
-- +----------------------------------------------------------------------------+

COLUMN tdate NEW_VALUE _date NOPRINT
SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD') tdate FROM dual;

COLUMN time NEW_VALUE _time NOPRINT
SELECT TO_CHAR(SYSDATE,'HH24:MI:SS') time FROM dual;

COLUMN date_time NEW_VALUE _date_time NOPRINT
SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MI:SS') date_time FROM dual;

COLUMN date_time_timezone NEW_VALUE _date_time_timezone NOPRINT
SELECT TO_CHAR(systimestamp, 'YYYY-MM-DD  (') || TRIM(TO_CHAR(systimestamp, 'Day')) || TO_CHAR(systimestamp, ') HH24:MI:SS AM') || TO_CHAR(systimestamp, ' "时区" TZR') date_time_timezone FROM dual;

COLUMN spool_time NEW_VALUE _spool_time NOPRINT
SELECT TO_CHAR(SYSDATE,'YYYYMMDD') spool_time FROM dual;

COLUMN dbname NEW_VALUE _dbname NOPRINT
SELECT name dbname FROM v$database;

COLUMN dbid NEW_VALUE _dbid NOPRINT
SELECT dbid dbid FROM v$database;

COLUMN platform_id NEW_VALUE _platform_id NOPRINT
SELECT platform_id platform_id FROM v$database;

COLUMN platform_name NEW_VALUE _platform_name NOPRINT
SELECT platform_name platform_name FROM v$database;

COLUMN global_name NEW_VALUE _global_name NOPRINT
SELECT global_name global_name FROM global_name;

COLUMN blocksize NEW_VALUE _blocksize NOPRINT
SELECT value blocksize FROM v$parameter WHERE name='db_block_size';

COLUMN startup_time NEW_VALUE _startup_time NOPRINT
SELECT TO_CHAR(startup_time, 'YYYY-MM-DD HH24:MI:SS') startup_time FROM v$instance;

COLUMN creation_date NEW_VALUE _creation_date NOPRINT
SELECT TO_CHAR(created, 'YYYY-MM-DD HH24:MI:SS') creation_date FROM v$database;

COLUMN log_mode NEW_VALUE _log_mode NOPRINT
SELECT log_mode log_mode FROM v$database;

COLUMN characterset NEW_VALUE _characterset NOPRINT
SELECT value$ characterset from sys.props$ where name='NLS_CHARACTERSET';

COLUMN host_name NEW_VALUE _host_name NOPRINT
SELECT host_name host_name FROM v$instance;

COLUMN instance_name NEW_VALUE _instance_name NOPRINT
SELECT instance_name instance_name FROM v$instance;

COLUMN instance_number NEW_VALUE _instance_number NOPRINT
SELECT instance_number instance_number FROM v$instance;

COLUMN thread_number NEW_VALUE _thread_number NOPRINT
SELECT thread# thread_number FROM v$instance;

COLUMN cluster_database NEW_VALUE _cluster_database NOPRINT
SELECT value cluster_database FROM v$parameter WHERE name='cluster_database';

COLUMN cluster_database_instances NEW_VALUE _cluster_database_instances NOPRINT
SELECT value cluster_database_instances FROM v$parameter WHERE name='cluster_database_instances';

COLUMN reportRunUser NEW_VALUE _reportRunUser NOPRINT
SELECT user reportRunUser FROM dual;


-- +----------------------------------------------------------------------------+
-- |                   GATHER DATABASE REPORT INFORMATION                       |
-- +----------------------------------------------------------------------------+

set heading on

set markup html on spool on preformat off entmap on -
head ' -
  <title>数据库巡检报告</title> -
  <style type="text/css"> -
    body              {font:9pt Arial,Helvetica,sans-serif; color:black; background:White;} -
    p                 {font:9pt Arial,Helvetica,sans-serif; color:black; background:White;} -
    table,tr,td       {font:9pt Arial,Helvetica,sans-serif; color:Black; background:#C0C0C0; padding:0px 0px 0px 0px; margin:0px 0px 0px 0px;} -
    th                {font:bold 9pt Arial,Helvetica,sans-serif; color:#336699; background:#cccc99; padding:0px 0px 0px 0px;} -
    h1                {font:bold 12pt Arial,Helvetica,Geneva,sans-serif; color:#336699; background-color:White; border-bottom:1px solid #cccc99; margin-top:0pt; margin-bottom:0pt; padding:0px 0px 0px 0px;} -
    h2                {font:bold 10pt Arial,Helvetica,Geneva,sans-serif; color:#336699; background-color:White; margin-top:4pt; margin-bottom:0pt;} -
    a                 {font:9pt Arial,Helvetica,sans-serif; color:#663300; margin-top:0pt; margin-bottom:0pt; vertical-align:top;} -
    a.link            {font:9pt Arial,Helvetica,sans-serif; color:#663300; margin-top:0pt; margin-bottom:0pt; vertical-align:top;} -
    a.noLink          {font:9pt Arial,Helvetica,sans-serif; color:#663300; text-decoration: none; margin-top:0pt; margin-bottom:0pt; vertical-align:top;} -
    a.noLinkBlue      {font:9pt Arial,Helvetica,sans-serif; color:#0000ff; text-decoration: none; margin-top:0pt; margin-bottom:0pt; vertical-align:top;} -
    a.noLinkDarkBlue  {font:9pt Arial,Helvetica,sans-serif; color:#000099; text-decoration: none; margin-top:0pt; margin-bottom:0pt; vertical-align:top;} -
    a.noLinkRed       {font:9pt Arial,Helvetica,sans-serif; color:#ff0000; text-decoration: none; margin-top:0pt; margin-bottom:0pt; vertical-align:top;} -
    a.noLinkDarkRed   {font:9pt Arial,Helvetica,sans-serif; color:#990000; text-decoration: none; margin-top:0pt; margin-bottom:0pt; vertical-align:top;} -
    a.noLinkGreen     {font:9pt Arial,Helvetica,sans-serif; color:#00ff00; text-decoration: none; margin-top:0pt; margin-bottom:0pt; vertical-align:top;} -
    a.noLinkDarkGreen {font:9pt Arial,Helvetica,sans-serif; color:#009900; text-decoration: none; margin-top:0pt; margin-bottom:0pt; vertical-align:top;} -
  </style>' -
body   'BGCOLOR="#C0C0C0"' -
table  'WIDTH="90%" BORDER="1"'

spool &&_cust_name._&_dbname._&_spool_time..html

set markup html on entmap off


-- +----------------------------------------------------------------------------+
-- |                             - REPORT HEADER -                              |
-- +----------------------------------------------------------------------------+

prompt <a name=top></a>
prompt &reportHeader.巡检时间:&_date
prompt <hr>
prompt <p>

prompt <a name="directory"><font size=+2 face="Arial,Helvetica,Geneva,sans-serif" color="#336699"><b>目录</b></font></a>
prompt <hr>
prompt <table width="90%" border="1"> -
<tr><th colspan="5"><a class="link" href="#database_check_overview"><font size=+1 face="Arial,Helvetica,sans-serif" color="#336699"><b>巡检服务概要</b></font></a></th></tr> -
<tr> -
<td nowrap align="center" width="20%"><a class="link" href="#basic_info"><font size=+1 face="Arial,Helvetica,sans-serif" color="#336699">基本信息</font></a></td> -
<td nowrap align="center" width="20%"><a class="link" href="#database_version"><font size=+1 face="Arial,Helvetica,sans-serif" color="#336699">数据库系统版本信息</font></a></td> -
<td nowrap align="center" width="20%"><a class="link" href="#instance_info"><font size=+1 face="Arial,Helvetica,sans-serif" color="#336699">数据库实例状况</font></a></td> -
<td nowrap align="center" width="20%"><a class="link" href="#initial_parameter_info"><font size=+1 face="Arial,Helvetica,sans-serif" color="#336699">关键的初始化参数</font></a></td> -
<td nowrap align="center" width="20%"><a class="link" href="#resource_info"><font size=+1 face="Arial,Helvetica,sans-serif" color="#336699">资源使用情况</font></a></td> -
</tr> -
<tr> -
<td nowrap align="center" width="20%"><a class="link" href="#database_size_info"><font size=+1 face="Arial,Helvetica,sans-serif" color="#336699">数据库大小</font></a></td> -
<td nowrap align="center" width="20%"><a class="link" href="#tablespaces_info"><font size=+1 face="Arial,Helvetica,sans-serif" color="#336699">表空间状况信息</font></a></td> -
<td nowrap align="center" width="20%"><a class="link" href="#rman_backup_info"><font size=+1 face="Arial,Helvetica,sans-serif" color="#336699">RMAN备份运行状况</font></a></td> -
<td nowrap align="center" width="20%"><a class="link" href="#jobs_info"><font size=+1 face="Arial,Helvetica,sans-serif" color="#336699">作业运行状况</font></a></td> -
<td nowrap align="center" width="20%"><a class="link" href="#"><font size=+1 face="Arial,Helvetica,sans-serif" color="#336699"></font></a></td> -
</tr> -
</table>

prompt <br>
prompt <table width="90%" border="1"> -
<tr><th colspan="5"><a class="link" href="#check_detail"><font size=+1 face="Arial,Helvetica,sans-serif" color="#336699"><b>巡检服务明细</b></font></a></th></tr> -
<tr> -
<td nowrap align="center" width="20%"><a class="link" href="#database_overview"><font size=+1 face="Arial,Helvetica,sans-serif" color="#336699">数据库概要</font></a></td> -
<td nowrap align="center" width="20%"><a class="link" href="#initialization_parameters"><font size=+1 face="Arial,Helvetica,sans-serif" color="#336699">所有的初始化参数</font></a></td> -
<td nowrap align="center" width="20%"><a class="link" href="#data_files"><font size=+1 face="Arial,Helvetica,sans-serif" color="#336699">数据文件状况</font></a></td> -
<td nowrap align="center" width="20%"><a class="link" href="#tablespace_extents"><font size=+1 face="Arial,Helvetica,sans-serif" color="#336699">表空间扩展状况</font></a></td> -
<td nowrap align="center" width="20%"><a class="link" href="#tablespace_to_owner"><font size=+1 face="Arial,Helvetica,sans-serif" color="#336699">表空间所有者</font></a></td> -
</tr> 
prompt <tr> -
<td nowrap align="center" width="20%"><a class="link" href="#rman_configuration"><font size=+1 face="Arial,Helvetica,sans-serif" color="#336699">RMAN配置情况</font></a></td> -
<td nowrap align="center" width="20%"><a class="link" href="#rman_backup_sets"><font size=+1 face="Arial,Helvetica,sans-serif" color="#336699">RMAN备份集</font></a></td> -
<td nowrap align="center" width="20%"><a class="link" href="#rman_backup_pieces"><font size=+1 face="Arial,Helvetica,sans-serif" color="#336699">RMAN备份片</font></a></td> -
<td nowrap align="center" width="20%"><a class="link" href="#rman_backup_control_files"><font size=+1 face="Arial,Helvetica,sans-serif" color="#336699">RMAN控制文件备份</font></a></td> -
<td nowrap align="center" width="20%"><a class="link" href="#rman_backup_spfile"><font size=+1 face="Arial,Helvetica,sans-serif" color="#336699">RMAN spfile文件备份</font></a></td> -
</tr> 
prompt <tr> -
<td nowrap align="center" width="20%"><a class="link" href="#archiving_instance_parameters"><font size=+1 face="Arial,Helvetica,sans-serif" color="#336699">归档日志设置</font></a></td> -
<td nowrap align="center" width="20%"><a class="link" href="#archiving_history"><font size=+1 face="Arial,Helvetica,sans-serif" color="#336699">归档日志生成情况</font></a></td> -
<td nowrap align="center" width="20%"><a class="link" href="#"><font size=+1 face="Arial,Helvetica,sans-serif" color="#336699"></font></a></td> -
<td nowrap align="center" width="20%"><a class="link" href="#"><font size=+1 face="Arial,Helvetica,sans-serif" color="#336699"></font></a></td> -
<td nowrap align="center" width="20%"><a class="link" href="#"><font size=+1 face="Arial,Helvetica,sans-serif" color="#336699"></font></a></td> -
</tr> 
prompt <tr> -
<td nowrap align="center" width="20%"><a class="link" href="#sga_information"><font size=+1 face="Arial,Helvetica,sans-serif" color="#336699">SGA配置信息</font></a></td> -
<td nowrap align="center" width="20%"><a class="link" href="#sga_target_advice"><font size=+1 face="Arial,Helvetica,sans-serif" color="#336699">SGA建议配置</font></a></td> -
<td nowrap align="center" width="20%"><a class="link" href="#sga_asmm_dynamic_components"><font size=+1 face="Arial,Helvetica,sans-serif" color="#336699">SGA动态组件</font></a></td> -
<td nowrap align="center" width="20%"><a class="link" href="#pga_target_advice"><font size=+1 face="Arial,Helvetica,sans-serif" color="#336699">PGA TARGET 建议配置</font></a></td> -
<td nowrap align="center" width="20%"><a class="link" href="#"><font size=+1 face="Arial,Helvetica,sans-serif" color="#336699"></font></a></td> -
</tr> 
prompt <tr> -
<td nowrap align="center" width="20%"><a class="link" href="#file_io_statistics"><font size=+1 face="Arial,Helvetica,sans-serif" color="#336699">文件IO分析</font></a></td> -
<td nowrap align="center" width="20%"><a class="link" href="#file_io_timings"><font size=+1 face="Arial,Helvetica,sans-serif" color="#336699">文件IO时间分析</font></a></td> -
<td nowrap align="center" width="20%"><a class="link" href="#full_table_scans"><font size=+1 face="Arial,Helvetica,sans-serif" color="#336699">全表扫描情况</font></a></td> -
<td nowrap align="center" width="20%"><a class="link" href="#sorts"><font size=+1 face="Arial,Helvetica,sans-serif" color="#336699">排序情况</font></a></td> -
<td nowrap align="center" width="20%"><a class="link" href="#"><font size=+1 face="Arial,Helvetica,sans-serif" color="#336699"></font></a></td> -
</tr> 
prompt </table>


prompt <table width="90%" border="1"> -
<tr><td colspan="5"><a class="link" href="#awr_performance_analyze"><font size=+1 face="Arial,Helvetica,sans-serif" color="#336699"><b>数据库性能分析(AWR统计)</b></font></a></th></tr> -
</tr> 
prompt </table>


prompt <a name="database_check_overview"></a>
prompt <font size=+2 color=darkgreen><b>数据库巡检服务概要</b></font><hr>
prompt <p>
prompt <a name="basic_info"></a>
prompt <font size="+2" face="Arial,Helvetica,Geneva,sans-serif" color="#336699"><b>基本信息</b></font><hr align="left" width="460">

prompt <table width="90%" border="1"> -
<tr><th align="left" width="20%">巡检报告文件名称</th><td width="80%"><tt>&&_cust_name._&_dbname._&_spool_time..html</tt></td></tr> -
<tr><th align="left" width="20%">巡检时间</th><td width="80%"><tt>&_date_time_timezone</tt></td></tr> -
<tr><th align="left" width="20%">数据库服务器名称</th><td width="80%"><tt>&_host_name</tt></td></tr> -
<tr><th align="left" width="20%">数据库名称</th><td width="80%"><tt>&_dbname</tt></td></tr> -
<tr><th align="left" width="20%">数据库ID(DBID)</th><td width="80%"><tt>&_dbid</tt></td></tr> -
<tr><th align="left" width="20%">数据库全局名</th><td width="80%"><tt>&_global_name</tt></td></tr> -
<tr><th align="left" width="20%">操作系统信息</th><td width="80%"><tt>&_platform_name / &_platform_id</tt></td></tr> -
<tr><th align="left" width="20%">是否RAC集群模式?</th><td width="80%"><tt>&_cluster_database</tt></td></tr> -
<tr><th align="left" width="20%">RAC实例数目</th><td width="80%"><tt>&_cluster_database_instances</tt></td></tr> -
<tr><th align="left" width="20%">数据库创建时间</th><td width="80%"><tt>&_creation_date</tt></td></tr> -
<tr><th align="left" width="20%">数据库启动时间</th><td width="80%"><tt>&_startup_time</tt></td></tr> -
<tr><th align="left" width="20%">数据库归档模式</th><td width="80%"><tt>&_log_mode</tt></td></tr> -
<tr><th align="left" width="20%">数据库字符集</th><td width="80%"><tt>&_characterset</tt></td></tr> -
</table>

prompt <center>[<a class="noLink" href="#directory">回到目录</a>]</center>

prompt <br/>

prompt <a name="database_version"></a>
prompt <font size="+2" face="Arial,Helvetica,Geneva,sans-serif" color="#336699"><b>数据库系统版本信息</b></font><hr align="left" width="460">

CLEAR COLUMNS BREAKS COMPUTES

COLUMN banner   FORMAT a120   HEADING '数据库系统版本信息'

SELECT banner FROM v$version;

prompt <center>[<a class="noLink" href="#directory">回到目录</a>]</center>

prompt <br/>

prompt <a name="instance_info"></a>

prompt <font size="+2" face="Arial,Helvetica,Geneva,sans-serif" color="#336699"><b>数据库实例状况</b></font><hr align="left" width="460">

CLEAR COLUMNS BREAKS COMPUTES

COLUMN instance_name_print       FORMAT a75    HEADING '数据库实例名称'       ENTMAP off
COLUMN instance_number_print     FORMAT a75    HEADING '数据库实例号'        ENTMAP off
COLUMN thread_number_print                     HEADING '线程号'          ENTMAP off
COLUMN host_name_print           FORMAT a75    HEADING '主机名'           ENTMAP off
COLUMN version                                 HEADING '数据库版本'      ENTMAP off
COLUMN start_time                FORMAT a75    HEADING '实例启动时间'          ENTMAP off
COLUMN uptime                                  HEADING '运行时间(天)'    ENTMAP off
COLUMN parallel                  FORMAT a75    HEADING 'RAC模式'    ENTMAP off
COLUMN instance_status           FORMAT a75    HEADING '实例状态'     ENTMAP off
COLUMN database_status           FORMAT a75    HEADING '数据库状态'     ENTMAP off
COLUMN logins                    FORMAT a75    HEADING '是否可登录'              ENTMAP off
COLUMN archiver                  FORMAT a75    HEADING '是否可归档'            ENTMAP off

SELECT
    '<div align="center"><font color="#336699"><b>' || instance_name || '</b></font></div>'         instance_name_print
  , '<div align="center">' || instance_number || '</div>'                                           instance_number_print
  , '<div align="center">' || thread#         || '</div>'                                           thread_number_print
  , '<div align="center">' || host_name       || '</div>'                                           host_name_print
  , '<div align="center">' || version         || '</div>'                                           version
  , '<div align="center">' || TO_CHAR(startup_time,'yyyy-mm-dd HH24:MI:SS') || '</div>'             start_time
  , ROUND(TO_CHAR(SYSDATE-startup_time), 2)                                                         uptime
  , '<div align="center">' || parallel        || '</div>'                                           parallel
  , '<div align="center">' || status          || '</div>'                                           instance_status
  , '<div align="center">' || logins          || '</div>'                                           logins
  , DECODE(   archiver
            , 'FAILED'
            , '<div align="center"><b><font color="#990000">'   || archiver || '</font></b></div>'
            , '<div align="center"><b><font color="darkgreen">' || archiver || '</font></b></div>') archiver
FROM gv$instance
ORDER BY instance_number;

prompt <center>[<a class="noLink" href="#directory">回到目录</a>]</center>

prompt <br/>
prompt <a name="initial_parameter_info"></a>
prompt <font size="+2" face="Arial,Helvetica,Geneva,sans-serif" color="#336699"><b>关键的初始化参数</b></font><hr align="left" width="460">

CLEAR COLUMNS BREAKS COMPUTES

COLUMN pname                FORMAT a75    HEADING '参数名称'    ENTMAP off
COLUMN instance_name_print  FORMAT a45    HEADING '实例名称'     ENTMAP off
COLUMN value                FORMAT a75    HEADING '参数值'             ENTMAP off

BREAK ON report ON pname

SELECT
    DECODE(   p.isdefault
            , 'FALSE'
            , '<b><font color="#663300">' || SUBSTR(p.name,0,512) || '</font></b>'
            , '<b><font color="#336699">' || SUBSTR(p.name,0,512) || '</font></b>' )    pname
  , DECODE(   p.isdefault
            , 'FALSE'
            , '<font color="#663300"><b>' || i.instance_name || '</b></font>'
            , i.instance_name )                                                         instance_name_print
  , DECODE(   p.isdefault
            , 'FALSE'
            , '<font color="#663300"><b>' || SUBSTR(p.value,0,512) || '</b></font>'
            , SUBSTR(p.value,0,512) ) value
FROM
    gv$parameter p
  , gv$instance  i
WHERE
    p.inst_id = i.inst_id and p.name in ('shared_pool_size','open_cursors','processes','job_queue_processes','sga_max_size','log_archive_dest_1','','sessions','spfile','cpu_count' ,'sga_target','db_cache_size','shared_pool_size','large_pool_size','java_pool_size','log_buffer','pga_aggregate_target','sort_area_size','db_block_size','optimizer_mode','cursor_sharing','open_cursors','optimizer_index_cost_adj','optimizer_index_caching','db_file_multiblock_read_count','hash_join_enabled')
ORDER BY
    p.name
  , i.instance_name;

prompt <center>[<a class="noLink" href="#directory">回到目录</a>]</center>
 
prompt <br/>

prompt <a name="resource_info"></a>
prompt <font size="+2" face="Arial,Helvetica,Geneva,sans-serif" color="#336699"><b>资源使用情况</b></font><hr align="left" width="460">

CLEAR COLUMNS BREAKS COMPUTES


COLUMN RESOURCE_NAME        FORMAT a75            HEADING '资源名称'    ENTMAP off
COLUMN CURRENT_UTILIZATION  FORMAT 999,999,999,999,999    HEADING '当前值'      ENTMAP off
COLUMN MAX_UTILIZATION    FORMAT 999,999,999,999,999    HEADING '最大值'      ENTMAP off
COLUMN INITIAL_ALLOCATION   FORMAT 999,999,999,999,999    HEADING '初始值'      ENTMAP off
COLUMN LIMIT_VALUE          FORMAT 999,999,999,999,999    HEADING '限制值'      ENTMAP off


BREAK ON report ON pname


select trim(RESOURCE_NAME) RESOURCE_NAME,trim(CURRENT_UTILIZATION) CURRENT_UTILIZATION,trim(MAX_UTILIZATION) MAX_UTILIZATION,trim(INITIAL_ALLOCATION) INITIAL_ALLOCATION,trim(LIMIT_VALUE) LIMIT_VALUE from v$resource_limit;


prompt <center>[<a class="noLink" href="#directory">回到目录</a>]</center>

prompt <br/>


prompt <a name="sga_info"></a>
prompt <font size="+2" face="Arial,Helvetica,Geneva,sans-serif" color="#336699"><b>SGA使用情况</b></font><hr align="left" width="460">

CLEAR COLUMNS BREAKS COMPUTES

COLUMN inst_id             FORMAT 999            HEADING '实例名称'    ENTMAP off
COLUMN name             FORMAT a75            HEADING '名称'    ENTMAP off
COLUMN MBytes  FORMAT 999,999,999,999,999    HEADING '值(MB)'      ENTMAP off
COLUMN resizeable    FORMAT a75   HEADING '是否可调'      ENTMAP off


BREAK ON report ON pname

select inst_id,name,round(bytes/1024/1024) MBytes ,resizeable from gv$sgainfo;


prompt <center>[<a class="noLink" href="#directory">回到目录</a>]</center>

prompt <br/>

prompt <a name="database_size_info"></a>

prompt <font size="+2" face="Arial,Helvetica,Geneva,sans-serif" color="#336699"><b>数据库大小</b></font><hr align="left" width="460">

CLEAR COLUMNS BREAKS COMPUTES

COLUMN sum3        FORMAT  999,999,999,999,999                   HEADING 'dmp全备份约(G)'
COLUMN sum1        FORMAT  999,999,999,999,999                   HEADING 'RMAN全备份约(G)'
COLUMN sum2        FORMAT  999,999,999,999,999                   HEADING '数据文件容量(G)'

select '<div align="left"><font color="#336699"><b>' || c.sum3|| '</b></font></div>' sum3,a.sum1 sum1,b.sum2 sum2 from (SELECT ceil(SUM(BYTES)/1024/1024/1024) sum1 FROM DBA_segments) a,(select ceil(sum(bytes)/1024/1024/1024) sum2 from v$datafile) b,(select ceil(sum(bytes)/1024/1024/1024) sum3 from dba_extents where segment_type not like 'INDEX%' and segment_type not in('ROLLBACK','CACHE','LOBINDEX','TYPE2 UNDO')) c ;

prompt <center>[<a class="noLink" href="#directory">回到目录</a>]</center>

prompt <br/>


prompt <a name="tablespaces_info"></a>
prompt <font size="+2" face="Arial,Helvetica,Geneva,sans-serif" color="#336699"><b>表空间状况</b></font><hr align="left" width="460">

CLEAR COLUMNS BREAKS COMPUTES

COLUMN status                                  HEADING '状态'            ENTMAP off
COLUMN name                                    HEADING '表空间名称'   ENTMAP off
COLUMN type        FORMAT a12                  HEADING '表空间类型'           ENTMAP off
COLUMN extent_mgt  FORMAT a10                  HEADING '扩展管理方式'         ENTMAP off
COLUMN segment_mgt FORMAT a9                   HEADING '段管理方式'         ENTMAP off
COLUMN ts_size     FORMAT 999,999,999,999,999  HEADING '表空间大小(MB)'   ENTMAP off
COLUMN free        FORMAT 999,999,999,999,999  HEADING '空闲(MB)'   ENTMAP off
COLUMN used        FORMAT 999,999,999,999,999  HEADING '使用(MB)'   ENTMAP off
COLUMN pct_used                                HEADING 'Pct. Used'         ENTMAP off

BREAK ON report
COMPUTE SUM label '<font color="#990000"><b>Total:</b></font>'   OF ts_size used free ON report

SELECT
    DECODE(   d.status
            , 'OFFLINE'
            , '<div align="center"><b><font color="#990000">'   || d.status || '</font></b></div>'
            , '<div align="center"><b><font color="darkgreen">' || d.status || '</font></b></div>') status
  , '<b><font color="#336699">' || d.tablespace_name || '</font></b>'                               name
  , d.contents                                          type
  , d.extent_management                                 extent_mgt
  , d.segment_space_management                          segment_mgt
  , round(NVL(a.bytes, 0)/1024/1024,2)                                     ts_size
  , round(NVL(f.bytes, 0)/1024/1024,2)                                     free
  , round(NVL(a.bytes - NVL(f.bytes, 0), 0)/1024/1024,2)                   used
  , '<div align="right"><b>' || 
          DECODE (
              (1-SIGN(1-SIGN(TRUNC(NVL((a.bytes - NVL(f.bytes, 0)) / a.bytes * 100, 0)) - 90)))
            , 1
            , '<font color="#990000">'   || TO_CHAR(TRUNC(NVL((a.bytes - NVL(f.bytes, 0)) / a.bytes * 100, 0))) || '</font>'
            , '<font color="darkgreen">' || TO_CHAR(TRUNC(NVL((a.bytes - NVL(f.bytes, 0)) / a.bytes * 100, 0))) || '</font>'
          )
    || '</b> %</div>' pct_used
FROM 
    sys.dba_tablespaces d
  , ( select tablespace_name, sum(bytes) bytes
      from dba_data_files
      group by tablespace_name
    ) a
  , ( select tablespace_name, sum(bytes) bytes
      from dba_free_space
      group by tablespace_name
    ) f
WHERE
      d.tablespace_name = a.tablespace_name(+)
  AND d.tablespace_name = f.tablespace_name(+)
  AND NOT (
    d.extent_management like 'LOCAL'
    AND
    d.contents like 'TEMPORARY'
  )
UNION ALL 
SELECT
    DECODE(   d.status
            , 'OFFLINE'
            , '<div align="center"><b><font color="#990000">'   || d.status || '</font></b></div>'
            , '<div align="center"><b><font color="darkgreen">' || d.status || '</font></b></div>') status
  , '<b><font color="#336699">' || d.tablespace_name  || '</font></b>'                              name
  , d.contents                                   type
  , d.extent_management                          extent_mgt
  , d.segment_space_management                   segment_mgt
  , round(NVL(a.bytes, 0)/1024/1024,2)                              ts_size
  , round(NVL(a.bytes - NVL(t.bytes,0), 0)/1024/1024,2)             free
  , round(NVL(t.bytes, 0)/1024/1024,2)                              used
  , '<div align="right"><b>' || 
          DECODE (
              (1-SIGN(1-SIGN(TRUNC(NVL(t.bytes / a.bytes * 100, 0)) - 90)))
            , 1
            , '<font color="#990000">'   || TO_CHAR(TRUNC(NVL(t.bytes / a.bytes * 100, 0))) || '</font>'
            , '<font color="darkgreen">' || TO_CHAR(TRUNC(NVL(t.bytes / a.bytes * 100, 0))) || '</font>'
          )
    || '</b> %</div>' pct_used
FROM
    sys.dba_tablespaces d
  , ( select tablespace_name, sum(bytes) bytes
      from dba_temp_files
      group by tablespace_name
    ) a
  , ( select tablespace_name, sum(bytes_cached) bytes
      from v$temp_extent_pool
      group by tablespace_name
    ) t
WHERE
      d.tablespace_name = a.tablespace_name(+)
  AND d.tablespace_name = t.tablespace_name(+)
  AND d.extent_management like 'LOCAL'
  AND d.contents like 'TEMPORARY'
ORDER BY 2;

prompt <center>[<a class="noLink" href="#directory">回到目录</a>]</center>

prompt <br/>


prompt <a name="rman_backup_info"></a>
prompt <font size="+2" face="Arial,Helvetica,Geneva,sans-serif" color="#336699"><b>RMAN备份状况</b></font><hr align="left" width="460">


CLEAR COLUMNS BREAKS COMPUTES

COLUMN backup_name           FORMAT a130   HEADING '备份名称'          ENTMAP off
COLUMN start_time            FORMAT a75    HEADING '开始时间'           ENTMAP off
COLUMN elapsed_time          FORMAT a75    HEADING '所用使用'         ENTMAP off
COLUMN status                              HEADING '状态'               ENTMAP off
COLUMN input_type                          HEADING '输入类型'           ENTMAP off
COLUMN output_device_type                  HEADING '输出设备'       ENTMAP off
COLUMN input_size                          HEADING '输入大小'           ENTMAP off
COLUMN output_size                         HEADING '输出大小'          ENTMAP off
COLUMN output_rate_per_sec                 HEADING '每秒钟输出率'  ENTMAP off

SELECT
    '<div nowrap><b><font color="#336699">' || r.command_id                                   || '</font></b></div>'  backup_name
  , '<div nowrap align="right">'            || TO_CHAR(r.start_time, 'yyyy-mm-dd HH24:MI:SS') || '</div>'             start_time
  , '<div nowrap align="right">'            || r.time_taken_display                           || '</div>'             elapsed_time
  , DECODE(   r.status
            , 'COMPLETED'
            , '<div align="center"><b><font color="darkgreen">' || r.status || '</font></b></div>'
            , 'RUNNING'
            , '<div align="center"><b><font color="#000099">'   || r.status || '</font></b></div>'
            , 'FAILED'
            , '<div align="center"><b><font color="#990000">'   || r.status || '</font></b></div>'
            , '<div align="center"><b><font color="#663300">'   || r.status || '</font></b></div>'
    )                                                                                       status
  , r.input_type                                                                            input_type
  , r.output_device_type                                                                    output_device_type
  , '<div nowrap align="right">' || r.input_bytes_display           || '</div>'  input_size
  , '<div nowrap align="right">' || r.output_bytes_display          || '</div>'  output_size
  , '<div nowrap align="right">' || r.output_bytes_per_sec_display  || '</div>'  output_rate_per_sec
FROM
    (select
         command_id
       , start_time
       , time_taken_display
       , status
       , input_type
       , output_device_type
       , input_bytes_display
       , output_bytes_display
       , output_bytes_per_sec_display
     from v$rman_backup_job_details
     order by start_time DESC
    ) r
WHERE
    rownum < 11;

prompt <center>[<a class="noLink" href="#directory">回到目录</a>]</center>

prompt <br/>


prompt <a name="jobs_info"></a>

prompt <font size="+2" face="Arial,Helvetica,Geneva,sans-serif" color="#336699"><b>作业状况</b></font><hr align="left" width="460">

CLEAR COLUMNS BREAKS COMPUTES

COLUMN job_id     FORMAT a75             HEADING '作业ID'           ENTMAP off
COLUMN username   FORMAT a75             HEADING '用户'             ENTMAP off
COLUMN what       FORMAT a175            HEADING '作业内容'             ENTMAP off
COLUMN next_date  FORMAT a110            HEADING '下一次运行时间'    ENTMAP off
COLUMN interval   FORMAT a75             HEADING '间隔'         ENTMAP off
COLUMN last_date  FORMAT a110            HEADING '上一次运行时间'    ENTMAP off
COLUMN failures   FORMAT a75             HEADING '失败次数'         ENTMAP off
COLUMN broken     FORMAT a75             HEADING '是否损坏?'          ENTMAP off

SELECT
    DECODE(   broken
            , 'Y'
            , '<b><font color="#990000"><div align="center">' || job || '</div></font></b>'
            , '<b><font color="#336699"><div align="center">' || job || '</div></font></b>')    job_id
  , DECODE(   broken
            , 'Y'
            , '<b><font color="#990000">' || log_user || '</font></b>'
            , log_user )    username
  , DECODE(   broken
            , 'Y'
            , '<b><font color="#990000">' || what || '</font></b>'
            , what )        what
  , DECODE(   broken
            , 'Y'
            , '<div nowrap align="right"><b><font color="#990000">' || NVL(TO_CHAR(next_date, 'yyyy-mm-dd HH24:MI:SS'), '<br>') || '</font></b></div>'
            , '<div nowrap align="right">'                          || NVL(TO_CHAR(next_date, 'yyyy-mm-dd HH24:MI:SS'), '<br>') || '</div>')      next_date  
  , DECODE(   broken
            , 'Y'
            , '<b><font color="#990000">' || interval || '</font></b>'
            , interval )    interval
  , DECODE(   broken
            , 'Y'
            , '<div nowrap align="right"><b><font color="#990000">' || NVL(TO_CHAR(last_date, 'yyyy-mm-dd HH24:MI:SS'), '<br>') || '</font></b></div>'
            , '<div nowrap align="right">'                          || NVL(TO_CHAR(last_date, 'yyyy-mm-dd HH24:MI:SS'), '<br>') || '</div>')    last_date  
  , DECODE(   broken
            , 'Y'
            , '<b><font color="#990000"><div align="center">' || NVL(failures, 0) || '</div></font></b>'
            , '<div align="center">'                          || NVL(failures, 0) || '</div>')    failures
  , DECODE(   broken
            , 'Y'
            , '<b><font color="#990000"><div align="center">' || broken || '</div></font></b>'
            , '<div align="center">'                          || broken || '</div>')      broken
FROM
    dba_jobs
ORDER BY
    job;

prompt <center>[<a class="noLink" href="#directory">回到目录</a>]</center>

prompt <br/>


prompt <p>
prompt <a name="check_detail"></a>
prompt <font size=+2 color=darkgreen><b>数据库巡检服务</b></font><hr>
prompt <p>


-- +----------------------------------------------------------------------------+
-- |                           - DATABASE OVERVIEW -                            |
-- +----------------------------------------------------------------------------+

prompt <a name="database_overview"></a>
prompt <font size="+2" face="Arial,Helvetica,Geneva,sans-serif" color="#336699"><b>数据库概要</b></font><hr align="left" width="460">

CLEAR COLUMNS BREAKS COMPUTES

COLUMN name                            FORMAT a75     HEADING '数据库名'              ENTMAP off
COLUMN dbid                                           HEADING '数据库ID'                ENTMAP off
COLUMN db_unique_name                                 HEADING '数据库|Unique Name'       ENTMAP off
COLUMN creation_date                                  HEADING '创建时间'              ENTMAP off
COLUMN platform_name_print                            HEADING '平台名称'              ENTMAP off
COLUMN current_scn                                    HEADING '当前SCN'                ENTMAP off
COLUMN log_mode                                       HEADING '日志模式'                   ENTMAP off
COLUMN open_mode                                      HEADING '打开模式'                  ENTMAP off
COLUMN force_logging                                  HEADING '是否强制日志'              ENTMAP off
COLUMN flashback_on                                   HEADING '是否Flashback?'              ENTMAP off
COLUMN controlfile_type                               HEADING '控制文件类型'           ENTMAP off
COLUMN last_open_incarnation_number                   HEADING 'Last Open|Incarnation Num'  ENTMAP off

SELECT
    '<div align="center"><font color="#336699"><b>'  || name  || '</b></font></div>'          name
  , '<div align="center">' || dbid                   || '</div>'                              dbid
  , '<div align="center">' || db_unique_name         || '</div>'                              db_unique_name
  , '<div align="center">' || TO_CHAR(created, 'yyyy-mm-dd HH24:MI:SS') || '</div>'           creation_date
  , '<div align="center">' || platform_name          || '</div>'                              platform_name_print
  , '<div align="center">' || current_scn            || '</div>'                              current_scn
  , '<div align="center">' || log_mode               || '</div>'                              log_mode
  , '<div align="center">' || open_mode              || '</div>'                              open_mode
  , '<div align="center">' || force_logging          || '</div>'                              force_logging
  , '<div align="center">' || flashback_on           || '</div>'                              flashback_on
  , '<div align="center">' || controlfile_type       || '</div>'                              controlfile_type
  , '<div align="center">' || last_open_incarnation# || '</div>'                              last_open_incarnation_number
FROM v$database;

prompt <center>[<a class="noLink" href="#directory">回到目录</a>]</center><p>


-- +----------------------------------------------------------------------------+
-- |                       - INITIALIZATION PARAMETERS -                        |
-- +----------------------------------------------------------------------------+

prompt <a name="initialization_parameters"></a>
prompt <font size="+2" face="Arial,Helvetica,Geneva,sans-serif" color="#336699"><b>所有的初始化参数</b></font><hr align="left" width="460">

CLEAR COLUMNS BREAKS COMPUTES

COLUMN spfile  HEADING 'SPFILE Usage'

SELECT
  'This database '||
  DECODE(   (1-SIGN(1-SIGN(count(*) - 0)))
          , 1
          , '<font color="#663300"><b>IS</b></font>'
          , '<font color="#990000"><b>IS NOT</b></font>') ||
  ' using an SPFILE.'spfile
FROM v$spparameter
WHERE value IS NOT null;


COLUMN pname                FORMAT a75    HEADING 'Parameter Name'    ENTMAP off
COLUMN instance_name_print  FORMAT a45    HEADING 'Instance Name'     ENTMAP off
COLUMN value                FORMAT a75    HEADING 'Value'             ENTMAP off
COLUMN isdefault            FORMAT a75    HEADING 'Is Default?'       ENTMAP off
COLUMN issys_modifiable     FORMAT a75    HEADING 'Is Dynamic?'       ENTMAP off

BREAK ON report ON pname

SELECT
    DECODE(   p.isdefault
            , 'FALSE'
            , '<b><font color="#336699">' || SUBSTR(p.name,0,512) || '</font></b>'
            , '<b><font color="#336699">' || SUBSTR(p.name,0,512) || '</font></b>' )    pname
  , DECODE(   p.isdefault
            , 'FALSE'
            , '<font color="#663300"><b>' || i.instance_name || '</b></font>'
            , i.instance_name )                                                         instance_name_print
  , DECODE(   p.isdefault
            , 'FALSE'
            , '<font color="#663300"><b>' || SUBSTR(p.value,0,512) || '</b></font>'
            , SUBSTR(p.value,0,512) ) value
  , DECODE(   p.isdefault
            , 'FALSE'
            , '<div align="center"><font color="#663300"><b>' || p.isdefault || '</b></font></div>'
            , '<div align="center">'                          || p.isdefault || '</div>')                         isdefault
  , DECODE(   p.isdefault
            , 'FALSE'
            , '<div align="right"><font color="#663300"><b>' || p.issys_modifiable || '</b></font></div>'
            , '<div align="right">'                          || p.issys_modifiable || '</div>')                  issys_modifiable
FROM
    gv$parameter p
  , gv$instance  i
WHERE
    p.inst_id = i.inst_id
ORDER BY
    p.name
  , i.instance_name;

prompt <center>[<a class="noLink" href="#directory">回到目录</a>]</center><p>

-- +============================================================================+
-- |                                                                            |
-- |                      <<<<<     STORAGE    >>>>>                            |
-- |                                                                            |
-- +============================================================================+


prompt
prompt <center><font size="+2" face="Arial,Helvetica,Geneva,sans-serif" color="#663300"><b><u>存储信息</u></b></font></center>


-- +----------------------------------------------------------------------------+
-- |                            - DATA FILES -                                  |
-- +----------------------------------------------------------------------------+

prompt <a name="data_files"></a>
prompt <font size="+2" face="Arial,Helvetica,Geneva,sans-serif" color="#336699"><b>数据文件状况</b></font><hr align="left" width="460">

CLEAR COLUMNS BREAKS COMPUTES

COLUMN tablespace                                   HEADING 'Tablespace Name / File Class'  ENTMAP off
COLUMN filename                                     HEADING 'Filename'                      ENTMAP off
COLUMN filesize        FORMAT 999,999,999,999,999   HEADING 'File Size'                     ENTMAP off
COLUMN autoextensible                               HEADING 'Autoextensible'                ENTMAP off
COLUMN increment_by    FORMAT 999,999,999,999,999   HEADING 'Next'                          ENTMAP off
COLUMN maxbytes        FORMAT 999,999,999,999,999   HEADING 'Max'                           ENTMAP off

BREAK ON report
COMPUTE sum LABEL '<font color="#990000"><b>Total: </b></font>' OF filesize ON report

SELECT /*+ ordered */
    '<font color="#336699"><b>' || d.tablespace_name  || '</b></font>'  tablespace
  , '<tt>' || d.file_name || '</tt>'                                    filename
  , d.bytes                                                             filesize
  , '<div align="center">' || NVL(d.autoextensible, '<br>') || '</div>' autoextensible
  , d.increment_by * e.value                                            increment_by
  , d.maxbytes                                                          maxbytes
FROM
    sys.dba_data_files d
  , v$datafile v
  , (SELECT value
     FROM v$parameter 
     WHERE name = 'db_block_size') e
WHERE
  (d.file_name = v.name)
UNION
SELECT
    '<font color="#336699"><b>' || d.tablespace_name || '</b></font>'   tablespace 
  , '<tt>' || d.file_name  || '</tt>'                                   filename
  , d.bytes                                                             filesize
  , '<div align="center">' || NVL(d.autoextensible, '<br>') || '</div>' autoextensible
  , d.increment_by * e.value                                            increment_by
  , d.maxbytes                                                          maxbytes
FROM
    sys.dba_temp_files d
  , (SELECT value
     FROM v$parameter 
     WHERE name = 'db_block_size') e
UNION
SELECT
    '<font color="#336699"><b>[ ONLINE REDO LOG ]</b></font>'
  , '<tt>' || a.member || '</tt>'
  , b.bytes
  , null
  , null
  , null
FROM
    v$logfile a
  , v$log b
WHERE
    a.group# = b.group#
UNION
SELECT
    '<font color="#336699"><b>[ CONTROL FILE    ]</b></font>'
  , '<tt>' || a.name || '</tt>'
  , null
  , null
  , null
  , null
FROM
    v$controlfile a
ORDER BY
    1
  , 2;

prompt <center>[<a class="noLink" href="#directory">回到目录</a>]</center><p>

-- +----------------------------------------------------------------------------+
-- |                        - TABLESPACE EXTENTS -                              |
-- +----------------------------------------------------------------------------+

prompt <a name="tablespace_extents"></a>
prompt <font size="+2" face="Arial,Helvetica,Geneva,sans-serif" color="#336699"><b>表空间扩展</b></font><hr align="left" width="460">

CLEAR COLUMNS BREAKS COMPUTES

COLUMN tablespace_name                              HEADING 'Tablespace Name'         ENTMAP off
COLUMN largest_ext     FORMAT 999,999,999,999,999   HEADING 'Largest Extent'          ENTMAP off
COLUMN smallest_ext    FORMAT 999,999,999,999,999   HEADING 'Smallest Extent'         ENTMAP off
COLUMN total_free      FORMAT 999,999,999,999,999   HEADING 'Total Free'              ENTMAP off
COLUMN pieces          FORMAT 999,999,999,999,999   HEADING 'Number of Free Extents'  ENTMAP off

break on report
compute sum label '<font color="#990000"><b>Total:</b></font>' of largest_ext smallest_ext total_free pieces on report

SELECT 
    '<b><font color="#336699">' || tablespace_name || '</font></b>' tablespace_name
  , max(bytes)       largest_ext
  , min(bytes)       smallest_ext
  , sum(bytes)       total_free
  , count(*)         pieces
FROM
    dba_free_space
GROUP BY
    tablespace_name
ORDER BY
    tablespace_name;

prompt <center>[<a class="noLink" href="#directory">回到目录</a>]</center><p>


-- +----------------------------------------------------------------------------+
-- |                        - TABLESPACE TO OWNER  -                            |
-- +----------------------------------------------------------------------------+

prompt <a name="tablespace_to_owner"></a>
prompt <font size="+2" face="Arial,Helvetica,Geneva,sans-serif" color="#336699"><b>表空间所有者</b></font><hr align="left" width="460">

CLEAR COLUMNS BREAKS COMPUTES

COLUMN tablespace_name  FORMAT a75                  HEADING 'Tablespace Name'  ENTMAP off
COLUMN owner            FORMAT a75                  HEADING 'Owner'            ENTMAP off
COLUMN segment_type     FORMAT a75                  HEADING 'Segment Type'     ENTMAP off
COLUMN bytes            FORMAT 999,999,999,999,999  HEADING 'Size (in Bytes)'  ENTMAP off
COLUMN seg_count        FORMAT 999,999,999,999      HEADING 'Segment Count'    ENTMAP off

BREAK ON report ON tablespace_name
COMPUTE sum LABEL '<font color="#990000"><b>Total: </b></font>' of seg_count bytes ON report

SELECT
    '<font color="#336699"><b>' || tablespace_name || '</b></font>'  tablespace_name
  , '<div align="right">'       || owner           || '</div>'       owner
  , '<div align="right">'       || segment_type    || '</div>'       segment_type
  , sum(bytes)                                                       bytes
  , count(*)                                                         seg_count
FROM
    dba_segments
GROUP BY
    tablespace_name
  , owner
  , segment_type
ORDER BY
    tablespace_name
  , owner
  , segment_type;

prompt <center>[<a class="noLink" href="#directory">回到目录</a>]</center><p>


-- +============================================================================+
-- |                                                                            |
-- |                      <<<<<     BACKUPS     >>>>>                           |
-- |                                                                            |
-- +============================================================================+


-- +----------------------------------------------------------------------------+
-- |                           - RMAN CONFIGURATION -                           |
-- +----------------------------------------------------------------------------+

prompt <a name="rman_configuration"></a>
prompt <font size="+2" face="Arial,Helvetica,Geneva,sans-serif" color="#336699"><b>RMAN 配置</b></font><hr align="left" width="460">

prompt <b>All non-default RMAN configuration settings</b>

CLEAR COLUMNS BREAKS COMPUTES

COLUMN name     FORMAT a130   HEADING 'Name'   ENTMAP off
COLUMN value                  HEADING 'Value'  ENTMAP off

SELECT
    '<div nowrap><b><font color="#336699">' || name || '</font></b></div>'   name
  , value
FROM
    v$rman_configuration
ORDER BY
    name;

prompt <center>[<a class="noLink" href="#directory">回到目录</a>]</center><p>


-- +----------------------------------------------------------------------------+
-- |                           - RMAN BACKUP SETS -                             |
-- +----------------------------------------------------------------------------+

prompt <a name="rman_backup_sets"></a>
prompt <font size="+2" face="Arial,Helvetica,Geneva,sans-serif" color="#336699"><b>RMAN备份集</b></font><hr align="left" width="460">

CLEAR COLUMNS BREAKS COMPUTES

COLUMN bs_key                 FORMAT a75                    HEADING 'BS Key'                 ENTMAP off
COLUMN backup_type            FORMAT a70                    HEADING 'Backup Type'            ENTMAP off
COLUMN device_type                                          HEADING 'Device Type'            ENTMAP off
COLUMN controlfile_included   FORMAT a30                    HEADING 'Controlfile Included?'  ENTMAP off
COLUMN spfile_included        FORMAT a30                    HEADING 'SPFILE Included?'       ENTMAP off
COLUMN incremental_level                                    HEADING 'Incremental Level'      ENTMAP off
COLUMN pieces                 FORMAT 999,999,999,999        HEADING '# of Pieces'            ENTMAP off
COLUMN start_time             FORMAT a75                    HEADING 'Start Time'             ENTMAP off
COLUMN completion_time        FORMAT a75                    HEADING 'End Time'               ENTMAP off
COLUMN elapsed_seconds        FORMAT 999,999,999,999,999    HEADING 'Elapsed Seconds'        ENTMAP off
COLUMN tag                                                  HEADING 'Tag'                    ENTMAP off
COLUMN block_size             FORMAT 999,999,999,999,999    HEADING 'Block Size'             ENTMAP off
COLUMN keep                   FORMAT a40                    HEADING 'Keep?'                  ENTMAP off
COLUMN keep_until             FORMAT a75                    HEADING 'Keep Until'             ENTMAP off
COLUMN keep_options           FORMAT a15                    HEADING 'Keep Options'           ENTMAP off

BREAK ON report
COMPUTE sum LABEL '<font color="#990000"><b>Total:</b></font>' OF pieces elapsed_seconds ON report

SELECT
    '<div align="center"><font color="#336699"><b>' || bs.recid || '</b></font></div>'                        bs_key
  , DECODE(backup_type
           , 'L', '<div nowrap><font color="#990000">Archived Redo Logs</font></div>'
           , 'D', '<div nowrap><font color="#000099">Datafile Full Backup</font></div>'
           , 'I', '<div nowrap><font color="darkgreen">Incremental Backup</font></div>')                      backup_type
  , '<div nowrap align="right">' || device_type || '</div>'                                                   device_type
  , '<div align="center">' ||
    DECODE(bs.controlfile_included, 'NO', '-', bs.controlfile_included) || '</div>'                           controlfile_included
  , '<div align="center">' || NVL(sp.spfile_included, '-') || '</div>'                                        spfile_included
  , bs.incremental_level                                                                                      incremental_level
  , bs.pieces                                                                                                 pieces
  , '<div nowrap align="right">' || TO_CHAR(bs.start_time, 'yyyy-mm-dd HH24:MI:SS')      || '</div>'          start_time
  , '<div nowrap align="right">' || TO_CHAR(bs.completion_time, 'yyyy-mm-dd HH24:MI:SS') || '</div>'          completion_time
  , bs.elapsed_seconds                                                                                        elapsed_seconds
  , bp.tag                                                                                                    tag
  , bs.block_size                                                                                             block_size
  , '<div align="center">' || bs.keep || '</div>'                                                             keep
  , '<div nowrap align="right">' || NVL(TO_CHAR(bs.keep_until, 'yyyy-mm-dd HH24:MI:SS'), '<br>') || '</div>'  keep_until
  , bs.keep_options                                                                                           keep_options
FROM
    v$backup_set                           bs
  , (select distinct
         set_stamp
       , set_count
       , tag
       , device_type
     from v$backup_piece
     where status in ('A', 'X'))           bp
 ,  (select distinct set_stamp, set_count, 'YES' spfile_included
     from v$backup_spfile)                 sp
WHERE
      bs.set_stamp = bp.set_stamp
  AND bs.set_count = bp.set_count
  AND bs.set_stamp = sp.set_stamp (+)
  AND bs.set_count = sp.set_count (+)
ORDER BY
    bs.recid;

prompt <center>[<a class="noLink" href="#directory">回到目录</a>]</center><p>


-- +----------------------------------------------------------------------------+
-- |                          - RMAN BACKUP PIECES -                            |
-- +----------------------------------------------------------------------------+

prompt <a name="rman_backup_pieces"></a>
prompt <font size="+2" face="Arial,Helvetica,Geneva,sans-serif" color="#336699"><b>RMAN备份片</b></font><hr align="left" width="460">

CLEAR COLUMNS BREAKS COMPUTES

COLUMN bs_key              FORMAT a75                     HEADING 'BS Key'            ENTMAP off
COLUMN piece#                                             HEADING 'Piece #'           ENTMAP off
COLUMN copy#                                              HEADING 'Copy #'            ENTMAP off
COLUMN bp_key                                             HEADING 'BP Key'            ENTMAP off
COLUMN status                                             HEADING 'Status'            ENTMAP off
COLUMN handle                                             HEADING 'Handle'            ENTMAP off
COLUMN start_time          FORMAT a75                     HEADING 'Start Time'        ENTMAP off
COLUMN completion_time     FORMAT a75                     HEADING 'End Time'          ENTMAP off
COLUMN elapsed_seconds     FORMAT 999,999,999,999,999     HEADING 'Elapsed Seconds'   ENTMAP off
COLUMN deleted             FORMAT a10                     HEADING 'Deleted?'          ENTMAP off

BREAK ON bs_key

SELECT
    '<div align="center"><font color="#336699"><b>' || bs.recid  || '</b></font></div>'                bs_key
  , bp.piece#                                                                                          piece#
  , bp.copy#                                                                                           copy#
  , bp.recid                                                                                           bp_key
  , DECODE(   status
            , 'A', '<div nowrap align="center"><font color="darkgreen"><b>Available</b></font></div>'
            , 'D', '<div nowrap align="center"><font color="#000099"><b>Deleted</b></font></div>'
            , 'X', '<div nowrap align="center"><font color="#990000"><b>Expired</b></font></div>')     status
  , handle                                                                                             handle
  , '<div nowrap align="right">' || TO_CHAR(bp.start_time, 'yyyy-mm-dd HH24:MI:SS')      || '</div>'   start_time
  , '<div nowrap align="right">' || TO_CHAR(bp.completion_time, 'yyyy-mm-dd HH24:MI:SS') || '</div>'   completion_time
  , bp.elapsed_seconds                                                                                 elapsed_seconds
FROM
    v$backup_set    bs
  , v$backup_piece  bp
WHERE
      bs.set_stamp = bp.set_stamp
  AND bs.set_count = bp.set_count
  AND bp.status IN ('A', 'X')
ORDER BY
    bs.recid
  , piece#;

prompt <center>[<a class="noLink" href="#directory">回到目录</a>]</center><p>


-- +----------------------------------------------------------------------------+
-- |                       - RMAN BACKUP CONTROL FILES -                        |
-- +----------------------------------------------------------------------------+

prompt <a name="rman_backup_control_files"></a>
prompt <font size="+2" face="Arial,Helvetica,Geneva,sans-serif" color="#336699"><b>RMAN控制文件备份</b></font><hr align="left" width="460">

prompt <b>Available automatic control files within all available (and expired) backup sets</b>

CLEAR COLUMNS BREAKS COMPUTES

COLUMN bs_key                 FORMAT a75                     HEADING 'BS Key'                 ENTMAP off
COLUMN piece#                                                HEADING 'Piece #'                ENTMAP off
COLUMN copy#                                                 HEADING 'Copy #'                 ENTMAP off
COLUMN bp_key                                                HEADING 'BP Key'                 ENTMAP off
COLUMN controlfile_included   FORMAT a75                     HEADING 'Controlfile Included?'  ENTMAP off
COLUMN status                                                HEADING 'Status'                 ENTMAP off
COLUMN handle                                                HEADING 'Handle'                 ENTMAP off
COLUMN start_time             FORMAT a40                     HEADING 'Start Time'             ENTMAP off
COLUMN completion_time        FORMAT a40                     HEADING 'End Time'               ENTMAP off
COLUMN elapsed_seconds        FORMAT 999,999,999,999,999     HEADING 'Elapsed Seconds'        ENTMAP off
COLUMN deleted                FORMAT a10                     HEADING 'Deleted?'               ENTMAP off

BREAK ON bs_key

SELECT
    '<div align="center"><font color="#336699"><b>' || bs.recid  || '</b></font></div>'             bs_key
  , bp.piece#                                                                                       piece#
  , bp.copy#                                                                                        copy#
  , bp.recid                                                                                        bp_key
  , '<div align="center"><font color="#663300"><b>'                      ||
    DECODE(bs.controlfile_included, 'NO', '-', bs.controlfile_included)  ||
    '</b></font></div>'                                                                             controlfile_included
  , DECODE(   status
            , 'A', '<div nowrap align="center"><font color="darkgreen"><b>Available</b></font></div>'
            , 'D', '<div nowrap align="center"><font color="#000099"><b>Deleted</b></font></div>'
            , 'X', '<div nowrap align="center"><font color="#990000"><b>Expired</b></font></div>')  status
  , handle                                                                                          handle
FROM
    v$backup_set    bs
  , v$backup_piece  bp
WHERE
      bs.set_stamp = bp.set_stamp
  AND bs.set_count = bp.set_count
  AND bp.status IN ('A', 'X')
  AND bs.controlfile_included != 'NO'
ORDER BY
    bs.recid
  , piece#;

prompt <center>[<a class="noLink" href="#directory">回到目录</a>]</center><p>


-- +----------------------------------------------------------------------------+
-- |                           - RMAN BACKUP SPFILE -                           |
-- +----------------------------------------------------------------------------+

prompt <a name="rman_backup_spfile"></a>
prompt <font size="+2" face="Arial,Helvetica,Geneva,sans-serif" color="#336699"><b>RMAN SPFILE备份</b></font><hr align="left" width="460">

prompt <b>Available automatic SPFILE backups within all available (and expired) backup sets</b>

CLEAR COLUMNS BREAKS COMPUTES

COLUMN bs_key                 FORMAT a75                     HEADING 'BS Key'                 ENTMAP off
COLUMN piece#                                                HEADING 'Piece #'                ENTMAP off
COLUMN copy#                                                 HEADING 'Copy #'                 ENTMAP off
COLUMN bp_key                                                HEADING 'BP Key'                 ENTMAP off
COLUMN spfile_included        FORMAT a75                     HEADING 'SPFILE Included?'       ENTMAP off
COLUMN status                                                HEADING 'Status'                 ENTMAP off
COLUMN handle                                                HEADING 'Handle'                 ENTMAP off
COLUMN start_time             FORMAT a40                     HEADING 'Start Time'             ENTMAP off
COLUMN completion_time        FORMAT a40                     HEADING 'End Time'               ENTMAP off
COLUMN elapsed_seconds        FORMAT 999,999,999,999,999     HEADING 'Elapsed Seconds'        ENTMAP off
COLUMN deleted                FORMAT a10                     HEADING 'Deleted?'               ENTMAP off

BREAK ON bs_key

SELECT
    '<div align="center"><font color="#336699"><b>' || bs.recid  || '</b></font></div>'             bs_key
  , bp.piece#                                                                                       piece#
  , bp.copy#                                                                                        copy#
  , bp.recid                                                                                        bp_key
  , '<div align="center"><font color="#663300"><b>'  ||
    NVL(sp.spfile_included, '-')                     ||
    '</b></font></div>'                                                                             spfile_included
  , DECODE(   status
            , 'A', '<div nowrap align="center"><font color="darkgreen"><b>Available</b></font></div>'
            , 'D', '<div nowrap align="center"><font color="#000099"><b>Deleted</b></font></div>'
            , 'X', '<div nowrap align="center"><font color="#990000"><b>Expired</b></font></div>')  status
  , handle                                                                                          handle
FROM
    v$backup_set                            bs
  , v$backup_piece                          bp
  ,  (select distinct set_stamp, set_count, 'YES' spfile_included
      from v$backup_spfile)                 sp
WHERE
      bs.set_stamp = bp.set_stamp
  AND bs.set_count = bp.set_count
  AND bp.status IN ('A', 'X')
  AND bs.set_stamp = sp.set_stamp
  AND bs.set_count = sp.set_count
ORDER BY
    bs.recid
  , piece#;

prompt <center>[<a class="noLink" href="#directory">回到目录</a>]</center><p>


-- +----------------------------------------------------------------------------+
-- |                             - ARCHIVING MODE -                             |
-- +----------------------------------------------------------------------------+


prompt <a name="archiving_instance_parameters"></a>
prompt <font size="+2" face="Arial,Helvetica,Geneva,sans-serif" color="#336699"><b>归档参数配置情况</b></font><hr align="left" width="460">

CLEAR COLUMNS BREAKS COMPUTES

COLUMN name      HEADING 'Parameter Name'   ENTMAP off
COLUMN value     HEADING 'Parameter Value'  ENTMAP off

SELECT
    '<b><font color="#336699">' || a.name || '</font></b>'    name
  , a.value                                                   value
FROM
    v$parameter a
WHERE
    a.name like 'log_%'
ORDER BY
    a.name;

prompt <center>[<a class="noLink" href="#directory">回到目录</a>]</center><p>


-- +----------------------------------------------------------------------------+
-- |                           - ARCHIVING HISTORY -                            |
-- +----------------------------------------------------------------------------+

prompt <a name="archiving_history"></a>
prompt <font size="+2" face="Arial,Helvetica,Geneva,sans-serif" color="#336699"><b>归档日志生成情况</b></font><hr align="left" width="460">

CLEAR COLUMNS BREAKS COMPUTES

COLUMN thread#          FORMAT a79                   HEADING '实例名称'           ENTMAP off
COLUMN f_time           FORMAT a75                   HEADING '归档日期'           ENTMAP off
COLUMN day_arch         FORMAT 999,999,999,999,999   HEADING '每天归档日志量(MB)'   ENTMAP off
COLUMN hour_arch         FORMAT 999,999,999,999,999   HEADING '每小时平均归档日志量(MB)'   ENTMAP off

BREAK ON report ON thread#

 
select '<div align="center"><b><font color="#336699">' || a.thread#   || '</font></b></div>'  thread#,
       '<div align="center"><b><font color="#336699">' || a.f_time   || '</font></b></div>'  f_time,
       '<div align="right" nowrap>' ||  round(sum(a.blocks * a.block_size) / 1024 / 1024 )  || '</div>'  day_arch,
       '<div align="right" nowrap>' ||  round(sum(a.blocks * a.block_size) / 1024 /1024 / 24,2)  || '</div>'  hour_arch
  from (select distinct sequence#,
                        thread#,
                        blocks,
                        block_size,
                        to_char(first_time, 'yyyy-mm-dd') f_time
          from gv$archived_log) a
 group by a.f_time, a.thread#
 order by 1,2 desc;

prompt <center>[<a class="noLink" href="#directory">回到目录</a>]</center><p>

-- +============================================================================+
-- |                                                                            |
-- |                    <<<<<     PERFORMANCE     >>>>>                         |
-- |                                                                            |
-- +============================================================================+


-- +----------------------------------------------------------------------------+
-- |                             - SGA INFORMATION -                            |
-- +----------------------------------------------------------------------------+

prompt <a name="sga_information"></a>
prompt <font size="+2" face="Arial,Helvetica,Geneva,sans-serif" color="#336699"><b>SGA 配置信息</b></font><hr align="left" width="460">

CLEAR COLUMNS BREAKS COMPUTES

COLUMN instance_name FORMAT a79                 HEADING 'Instance Name'    ENTMAP off
COLUMN name          FORMAT a150                HEADING 'Pool Name'        ENTMAP off
COLUMN value         FORMAT 999,999,999,999,999 HEADING 'Bytes'            ENTMAP off

BREAK ON report ON instance_name
COMPUTE sum LABEL '<font color="#990000"><b>Total:</b></font>' OF value ON instance_name

SELECT
    '<div align="left"><font color="#336699"><b>' || i.instance_name || '</b></font></div>'  instance_name
  , '<div align="left"><font color="#336699"><b>' || s.name          || '</b></font></div>'  name
  , s.value                                                                                  value
FROM
    gv$sga       s
  , gv$instance  i
WHERE
    s.inst_id = i.inst_id
ORDER BY
    i.instance_name
  , s.value DESC;

prompt <center>[<a class="noLink" href="#directory">回到目录</a>]</center><p>


-- +----------------------------------------------------------------------------+
-- |                           - SGA TARGET ADVICE -                            |
-- +----------------------------------------------------------------------------+

prompt <a name="sga_target_advice"></a>
prompt <font size="+2" face="Arial,Helvetica,Geneva,sans-serif" color="#336699"><b>SGA Target Advice</b></font><hr align="left" width="460">


CLEAR COLUMNS BREAKS COMPUTES

COLUMN instance_name FORMAT a79     HEADING 'Instance Name'    ENTMAP off
COLUMN name          FORMAT a79     HEADING 'Parameter Name'   ENTMAP off
COLUMN value         FORMAT a79     HEADING 'Value'            ENTMAP off

BREAK ON report ON instance_name

SELECT
    '<div align="left"><font color="#336699"><b>' || i.instance_name || '</b></font></div>'  instance_name
  , p.name    name
  , (CASE p.name
         WHEN 'sga_max_size' THEN '<div align="right">' || TO_CHAR(p.value, '999,999,999,999,999') || '</div>'
         WHEN 'sga_target'   THEN '<div align="right">' || TO_CHAR(p.value, '999,999,999,999,999') || '</div>'
     ELSE
         '<div align="right">' || p.value || '</div>'
     END) value
FROM
    gv$parameter p
  , gv$instance  i
WHERE
      p.inst_id = i.inst_id
  AND p.name IN ('sga_max_size', 'sga_target')
ORDER BY
    i.instance_name
  , p.name;

CLEAR COLUMNS BREAKS COMPUTES

COLUMN instance_name         FORMAT a79                   HEADING 'Instance Name'              ENTMAP off
COLUMN sga_size              FORMAT 999,999,999,999,999   HEADING 'SGA Size'                   ENTMAP off
COLUMN sga_size_factor       FORMAT 999,999,999,999,999   HEADING 'SGA Size Factor'            ENTMAP off
COLUMN estd_db_time          FORMAT 999,999,999,999,999   HEADING 'Estimated DB Time'          ENTMAP off
COLUMN estd_db_time_factor   FORMAT 999,999,999,999,999   HEADING 'Estimated DB Time Factor'   ENTMAP off
COLUMN estd_physical_reads   FORMAT 999,999,999,999,999   HEADING 'Estimated Physical Reads'   ENTMAP off

BREAK ON report ON instance_name

SELECT
    '<div align="left"><font color="#336699"><b>' || i.instance_name || '</b></font></div>'  instance_name
  , s.sga_size
  , s.sga_size_factor
  , s.estd_db_time
  , s.estd_db_time_factor
  , s.estd_physical_reads
FROM
    gv$sga_target_advice s
  , gv$instance  i
WHERE
    s.inst_id = i.inst_id
ORDER BY
    i.instance_name
  , s.sga_size_factor;

prompt <center>[<a class="noLink" href="#directory">回到目录</a>]</center><p>


-- +----------------------------------------------------------------------------+
-- |                      - SGA (ASMM) DYNAMIC COMPONENTS -                     |
-- +----------------------------------------------------------------------------+

prompt <a name="sga_asmm_dynamic_components"></a>
prompt <font size="+2" face="Arial,Helvetica,Geneva,sans-serif" color="#336699"><b>SGA (ASMM) 动态组件</b></font><hr align="left" width="460">

CLEAR COLUMNS BREAKS COMPUTES

COLUMN instance_name         FORMAT a79                HEADING 'Instance Name'        ENTMAP off
COLUMN component             FORMAT a79                HEADING 'Component Name'       ENTMAP off
COLUMN current_size          FORMAT 999,999,999,999    HEADING 'Current Size'         ENTMAP off
COLUMN min_size              FORMAT 999,999,999,999    HEADING 'Min Size'             ENTMAP off
COLUMN max_size              FORMAT 999,999,999,999    HEADING 'Max Size'             ENTMAP off
COLUMN user_specified_size   FORMAT 999,999,999,999    HEADING 'User Specified|Size'  ENTMAP off
COLUMN oper_count            FORMAT 999,999,999,999    HEADING 'Oper.|Count'          ENTMAP off
COLUMN last_oper_type        FORMAT a75                HEADING 'Last Oper.|Type'      ENTMAP off
COLUMN last_oper_mode        FORMAT a75                HEADING 'Last Oper.|Mode'      ENTMAP off
COLUMN last_oper_time        FORMAT a75                HEADING 'Last Oper.|Time'      ENTMAP off
COLUMN granule_size          FORMAT 999,999,999,999    HEADING 'Granule Size'         ENTMAP off

BREAK ON report ON instance_name

SELECT
    '<div align="left"><font color="#336699"><b>' || i.instance_name || '</b></font></div>'  instance_name
  , sdc.component
  , sdc.current_size
  , sdc.min_size
  , sdc.max_size
  , sdc.user_specified_size
  , sdc.oper_count
  , sdc.last_oper_type
  , sdc.last_oper_mode
  , '<div align="right">' || NVL(TO_CHAR(sdc.last_oper_time, 'yyyy-mm-dd HH24:MI:SS'), '<br>') || '</div>'   last_oper_time
  , sdc.granule_size
FROM
    gv$sga_dynamic_components sdc
  , gv$instance  i
ORDER BY
    i.instance_name
  , sdc.component DESC;

prompt <center>[<a class="noLink" href="#directory">回到目录</a>]</center><p>


-- +----------------------------------------------------------------------------+
-- |                           - PGA TARGET ADVICE -                            |
-- +----------------------------------------------------------------------------+

prompt <a name="pga_target_advice"></a>
prompt <font size="+2" face="Arial,Helvetica,Geneva,sans-serif" color="#336699"><b>PGA Target 建议</b></font><hr align="left" width="460">

CLEAR COLUMNS BREAKS COMPUTES

COLUMN instance_name FORMAT a79     HEADING 'Instance Name'    ENTMAP off
COLUMN name          FORMAT a79     HEADING 'Parameter Name'   ENTMAP off
COLUMN value         FORMAT a79     HEADING 'Value'            ENTMAP off

BREAK ON report ON instance_name

SELECT
    '<div align="left"><font color="#336699"><b>' || i.instance_name || '</b></font></div>'  instance_name
  , p.name    name
  , (CASE p.name
         WHEN 'pga_aggregate_target' THEN '<div align="right">' || TO_CHAR(p.value, '999,999,999,999,999') || '</div>'
     ELSE
         '<div align="right">' || p.value || '</div>'
     END) value
FROM
    gv$parameter p
  , gv$instance  i
WHERE
      p.inst_id = i.inst_id
  AND p.name IN ('pga_aggregate_target', 'workarea_size_policy')
ORDER BY
    i.instance_name
  , p.name;

CLEAR COLUMNS BREAKS COMPUTES

COLUMN instance_name                  FORMAT a79                   HEADING 'Instance Name'               ENTMAP off
COLUMN pga_target_for_estimate        FORMAT 999,999,999,999,999   HEADING 'PGA Target for Estimate'     ENTMAP off
COLUMN estd_extra_bytes_rw            FORMAT 999,999,999,999,999   HEADING 'Estimated Extra Bytes R/W'   ENTMAP off
COLUMN estd_pga_cache_hit_percentage  FORMAT 999,999,999,999,999   HEADING 'Estimated PGA Cache Hit %'   ENTMAP off
COLUMN estd_overalloc_count           FORMAT 999,999,999,999,999   HEADING 'ESTD_OVERALLOC_COUNT'        ENTMAP off

BREAK ON report ON instance_name

SELECT
    '<div align="left"><font color="#336699"><b>' || i.instance_name || '</b></font></div>'  instance_name
  , p.pga_target_for_estimate
  , p.estd_extra_bytes_rw
  , p.estd_pga_cache_hit_percentage
  , p.estd_overalloc_count
FROM
    gv$pga_target_advice p
  , gv$instance  i
WHERE
    p.inst_id = i.inst_id
ORDER BY
    i.instance_name
  , p.pga_target_for_estimate;

prompt <center>[<a class="noLink" href="#directory">回到目录</a>]</center><p>


-- +----------------------------------------------------------------------------+
-- |                         - FILE I/O STATISTICS -                            |
-- +----------------------------------------------------------------------------+

prompt <a name="file_io_statistics"></a>
prompt <font size="+2" face="Arial,Helvetica,Geneva,sans-serif" color="#336699"><b>文件IO分析</b></font><hr align="left" width="460">

prompt <b>Ordered by "Physical Reads" since last startup of the Oracle instance</b>

CLEAR COLUMNS BREAKS COMPUTES

COLUMN tablespace_name   FORMAT a50                   HEAD 'Tablespace'       ENTMAP off
COLUMN fname                                          HEAD 'File Name'        ENTMAP off
COLUMN phyrds            FORMAT 999,999,999,999,999   HEAD 'Physical Reads'   ENTMAP off
COLUMN phywrts           FORMAT 999,999,999,999,999   HEAD 'Physical Writes'  ENTMAP off
COLUMN read_pct                                       HEAD 'Read Pct.'        ENTMAP off
COLUMN write_pct                                      HEAD 'Write Pct.'       ENTMAP off
COLUMN total_io          FORMAT 999,999,999,999,999   HEAD 'Total I/O'        ENTMAP off

BREAK ON report
COMPUTE sum LABEL '<font color="#990000"><b>Total: </b></font>' OF phyrds phywrts total_io ON report

SELECT
    '<font color="#336699"><b>' || df.tablespace_name || '</b></font>'                      tablespace_name
  , df.file_name                             fname
  , fs.phyrds                                phyrds
  , '<div align="right">' || ROUND((fs.phyrds * 100) / (fst.pr + tst.pr), 2) || '%</div>'   read_pct
  , fs.phywrts                               phywrts
  , '<div align="right">' || ROUND((fs.phywrts * 100) / (fst.pw + tst.pw), 2) || '%</div>'   write_pct
  , (fs.phyrds + fs.phywrts)                 total_io
FROM
    sys.dba_data_files df
  , v$filestat         fs
  , (select sum(f.phyrds) pr, sum(f.phywrts) pw from v$filestat f) fst
  , (select sum(t.phyrds) pr, sum(t.phywrts) pw from v$tempstat t) tst
WHERE
    df.file_id = fs.file#
UNION
SELECT
    '<font color="#336699"><b>' || tf.tablespace_name || '</b></font>'                     tablespace_name
  , tf.file_name                           fname
  , ts.phyrds                              phyrds
  , '<div align="right">' || ROUND((ts.phyrds * 100) / (fst.pr + tst.pr), 2) || '%</div>'  read_pct
  , ts.phywrts                             phywrts
  , '<div align="right">' || ROUND((ts.phywrts * 100) / (fst.pw + tst.pw), 2) || '%</div>' write_pct
  , (ts.phyrds + ts.phywrts)                 total_io
FROM
    sys.dba_temp_files  tf
  , v$tempstat          ts
  , (select sum(f.phyrds) pr, sum(f.phywrts) pw from v$filestat f) fst
  , (select sum(t.phyrds) pr, sum(t.phywrts) pw from v$tempstat t) tst
WHERE
    tf.file_id = ts.file#
ORDER BY phyrds DESC;

prompt <center>[<a class="noLink" href="#directory">回到目录</a>]</center><p>


-- +----------------------------------------------------------------------------+
-- |                           - FILE I/O TIMINGS -                             |
-- +----------------------------------------------------------------------------+

prompt <a name="file_io_timings"></a>
prompt <font size="+2" face="Arial,Helvetica,Geneva,sans-serif" color="#336699"><b>文件IO时间分析</b></font><hr align="left" width="460">

prompt <b>Average time (in milliseconds) for an I/O call per datafile since last startup of the Oracle instance - (ordered by Physical Reads)</b>

CLEAR COLUMNS BREAKS COMPUTES

COLUMN fname                                           HEAD 'File Name'                                      ENTMAP off
COLUMN phyrds            FORMAT 999,999,999,999,999    HEAD 'Physical Reads'                                 ENTMAP off
COLUMN read_rate         FORMAT 999,999,999,999,999.99 HEAD 'Average Read Time<br>(milliseconds per read)'   ENTMAP off
COLUMN phywrts           FORMAT 999,999,999,999,999    HEAD 'Physical Writes'                                ENTMAP off
COLUMN write_rate        FORMAT 999,999,999,999,999.99 HEAD 'Average Write Time<br>(milliseconds per write)' ENTMAP off

BREAK ON REPORT
COMPUTE sum LABEL '<font color="#990000"><b>Total: </b></font>' OF phyrds phywrts ON report
COMPUTE avg LABEL '<font color="#990000"><b>Average: </b></font>' OF read_rate write_rate ON report

SELECT
    '<b><font color="#336699">' || d.name || '</font></b>'  fname
  , s.phyrds                                     phyrds
  , ROUND((s.readtim/GREATEST(s.phyrds,1)), 2)   read_rate
  , s.phywrts                                    phywrts
  , ROUND((s.writetim/GREATEST(s.phywrts,1)),2)  write_rate
FROM
    v$filestat  s
  , v$datafile  d
WHERE
  s.file# = d.file#
UNION
SELECT
    '<b><font color="#336699">' || t.name || '</font></b>'  fname
  , s.phyrds                                     phyrds
  , ROUND((s.readtim/GREATEST(s.phyrds,1)), 2)   read_rate
  , s.phywrts                                    phywrts
  , ROUND((s.writetim/GREATEST(s.phywrts,1)),2)  write_rate
FROM
    v$tempstat  s
  , v$tempfile  t
WHERE
  s.file# = t.file#
ORDER BY
    2 DESC;

prompt <center>[<a class="noLink" href="#directory">回到目录</a>]</center><p>

-- +----------------------------------------------------------------------------+
-- |                           - FULL TABLE SCANS -                             |
-- +----------------------------------------------------------------------------+

prompt <a name="full_table_scans"></a>
prompt <font size="+2" face="Arial,Helvetica,Geneva,sans-serif" color="#336699"><b>全表扫描统计</b></font><hr align="left" width="460">

CLEAR COLUMNS BREAKS COMPUTES

COLUMN large_table_scans   FORMAT 999,999,999,999,999  HEADING 'Large Table Scans'   ENTMAP off
COLUMN small_table_scans   FORMAT 999,999,999,999,999  HEADING 'Small Table Scans'   ENTMAP off
COLUMN pct_large_scans                                 HEADING 'Pct. Large Scans'    ENTMAP off

SELECT
    a.value large_table_scans
  , b.value small_table_scans
  , '<div align="right">' || ROUND(100*a.value/DECODE((a.value+b.value),0,1,(a.value+b.value)),2) || '%</div>' pct_large_scans
FROM
    v$sysstat  a
  , v$sysstat  b
WHERE
      a.name = 'table scans (long tables)'
  AND b.name = 'table scans (short tables)';

prompt <center>[<a class="noLink" href="#directory">回到目录</a>]</center><p>


-- +----------------------------------------------------------------------------+
-- |                                - SORTS -                                   |
-- +----------------------------------------------------------------------------+

prompt <a name="sorts"></a>
prompt <font size="+2" face="Arial,Helvetica,Geneva,sans-serif" color="#336699"><b>排序情况统计</b></font><hr align="left" width="460">

CLEAR COLUMNS BREAKS COMPUTES

COLUMN disk_sorts     FORMAT 999,999,999,999,999    HEADING 'Disk Sorts'       ENTMAP off
COLUMN memory_sorts   FORMAT 999,999,999,999,999    HEADING 'Memory Sorts'     ENTMAP off
COLUMN pct_disk_sorts                               HEADING 'Pct. Disk Sorts'  ENTMAP off

SELECT
    a.value   disk_sorts
  , b.value   memory_sorts
  , '<div align="right">' || ROUND(100*a.value/DECODE((a.value+b.value),0,1,(a.value+b.value)),2) || '%</div>' pct_disk_sorts
FROM
    v$sysstat  a
  , v$sysstat  b
WHERE
      a.name = 'sorts (disk)'
  AND b.name = 'sorts (memory)';

prompt <center>[<a class="noLink" href="#directory">回到目录</a>]</center><p>

-- +----------------------------------------------------------------------------+
-- |                - SQL STATEMENTS WITH MOST BUFFER GETS -                    |
-- +----------------------------------------------------------------------------+

prompt <a name="sql_statements_with_most_buffer_gets"></a>
prompt <font size="+2" face="Arial,Helvetica,Geneva,sans-serif" color="#336699"><b>内存读前10位的SQL语句</b></font><hr align="left" width="460">

prompt <b>Top 100 SQL statements with buffer gets greater than 1000</b>

CLEAR COLUMNS BREAKS COMPUTES

COLUMN username        FORMAT a75                   HEADING 'Username'                 ENTMAP off
COLUMN buffer_gets     FORMAT 999,999,999,999,999   HEADING 'Buffer Gets'              ENTMAP off
COLUMN executions      FORMAT 999,999,999,999,999   HEADING 'Executions'               ENTMAP off
COLUMN gets_per_exec   FORMAT 999,999,999,999,999   HEADING 'Buffer Gets / Execution'  ENTMAP off
COLUMN sql_text                                     HEADING 'SQL Text'                 ENTMAP off

SELECT 
    '<font color="#336699"><b>' || UPPER(b.username) || '</b></font>' username
  , a.buffer_gets              buffer_gets
  , a.executions               executions
  , (a.buffer_gets / decode(a.executions, 0, 1, a.executions))  gets_per_exec
  , a.sql_text                 sql_text
FROM 
    (SELECT ai.buffer_gets, ai.executions, ai.sql_text, ai.parsing_user_id
     FROM sys.v_$sqlarea ai
     ORDER BY ai.buffer_gets
    ) a
  , dba_users b
WHERE
      a.parsing_user_id = b.user_id 
  AND a.buffer_gets > 1000
  AND b.username NOT IN ('SYS','SYSTEM')
  AND rownum < 11
ORDER BY
    a.buffer_gets DESC;

prompt <center>[<a class="noLink" href="#directory">回到目录</a>]</center><p>


-- +----------------------------------------------------------------------------+
-- |                 - SQL STATEMENTS WITH MOST DISK READS -                    |
-- +----------------------------------------------------------------------------+

prompt <a name="sql_statements_with_most_disk_reads"></a>
prompt <font size="+2" face="Arial,Helvetica,Geneva,sans-serif" color="#336699"><b>磁盘读前10位的SQL语句</b></font><hr align="left" width="460">

prompt <b>Top 100 SQL statements with disk reads greater than 1000</b>

CLEAR COLUMNS BREAKS COMPUTES

COLUMN username        FORMAT a75                   HEADING 'Username'           ENTMAP off
COLUMN disk_reads      FORMAT 999,999,999,999,999   HEADING 'Disk Reads'         ENTMAP off
COLUMN executions      FORMAT 999,999,999,999,999   HEADING 'Executions'         ENTMAP off
COLUMN reads_per_exec  FORMAT 999,999,999,999,999   HEADING 'Reads / Execution'  ENTMAP off
COLUMN sql_text                                     HEADING 'SQL Text'           ENTMAP off

SELECT 
    '<font color="#336699"><b>' || UPPER(b.username) || '</b></font>' username
  , a.disk_reads       disk_reads
  , a.executions       executions
  , (a.disk_reads / decode(a.executions, 0, 1, a.executions))  reads_per_exec
  , a.sql_text         sql_text
FROM 
    (SELECT ai.disk_reads, ai.executions, ai.sql_text, ai.parsing_user_id
     FROM sys.v_$sqlarea ai
     ORDER BY ai.buffer_gets
    ) a
  , dba_users b
WHERE
      a.parsing_user_id = b.user_id 
  AND a.disk_reads > 1000
  AND b.username NOT IN ('SYS','SYSTEM')
  AND rownum < 11
ORDER BY
    a.disk_reads DESC;

prompt <center>[<a class="noLink" href="#directory">回到目录</a>]</center><p>


-- +============================================================================+
-- |                                                                            |
-- |        <<<<<     AUTOMATIC WORKLOAD REPOSITORY - (AWR)     >>>>>           |
-- |                                                                            |
-- +============================================================================+

-- +----------------------------------------------------------------------------+
-- |                          - AWR SNAPSHOT SETTINGS -                         |
-- +----------------------------------------------------------------------------+

prompt <a name="awr_snapshot_settings"></a>
prompt <font size="+2" face="Arial,Helvetica,Geneva,sans-serif" color="#336699"><b>AWR参数配置状况</b></font><hr align="left" width="460">

CLEAR COLUMNS BREAKS COMPUTES

COLUMN dbbid           FORMAT a75    HEAD 'Database ID'          ENTMAP off
COLUMN dbb_name        FORMAT a75    HEAD 'Database Name'        ENTMAP off
COLUMN snap_interval   FORMAT a75    HEAD 'Snap Interval'        ENTMAP off
COLUMN retention       FORMAT a75    HEAD 'Retention Period'     ENTMAP off
COLUMN topnsql         FORMAT a75    HEAD 'Top N SQL'            ENTMAP off

SELECT
    '<div align="left"><font color="#336699"><b>' || s.dbid || '</b></font></div>'  dbbid
  , d.name                                                                          dbb_name
  , s.snap_interval                                                                 snap_interval
  , s.retention                                                                     retention
  , s.topnsql                                                                       
FROM
    dba_hist_wr_control   s
  , v$database            d
WHERE
    s.dbid = d.dbid
ORDER BY
    dbbid;

prompt <center>[<a class="noLink" href="#directory">回到目录</a>]</center><p>

-- +============================================================================+
-- |                                                                            |
-- |                      <<<<<     SESSIONS    >>>>>                           |
-- |                                                                            |
-- +============================================================================+


prompt
prompt <center><font size="+2" face="Arial,Helvetica,Geneva,sans-serif" color="#663300"><b><u>会话</u></b></font></center>


-- +----------------------------------------------------------------------------+
-- |                          - CURRENT SESSIONS -                              |
-- +----------------------------------------------------------------------------+

prompt <a name="current_sessions"></a>
prompt <font size="+2" face="Arial,Helvetica,Geneva,sans-serif" color="#336699"><b>会话概况</b></font><hr align="left" width="460">

CLEAR COLUMNS BREAKS COMPUTES

COLUMN instance_name_print  FORMAT a45    HEADING 'Instance Name'              ENTMAP off
COLUMN thread_number_print  FORMAT a45    HEADING 'Thread Number'              ENTMAP off
COLUMN count                FORMAT a45    HEADING 'Current No. of Processes'   ENTMAP off
COLUMN value                FORMAT a45    HEADING 'Max No. of Processes'       ENTMAP off
COLUMN pct_usage            FORMAT a45    HEADING '% Usage'                    ENTMAP off

SELECT
    '<div align="center"><font color="#336699"><b>' || a.instance_name  || '</b></font></div>'  instance_name_print
  , '<div align="center">' || a.thread#             || '</div>'  thread_number_print
  , '<div align="center">' || TO_CHAR(a.count)      || '</div>'  count
  , '<div align="center">' || b.value               || '</div>'  value
  , '<div align="center">' || TO_CHAR(ROUND(100*(a.count / b.value), 2)) || '%</div>'  pct_usage
FROM
    (select   count(*) count, a1.inst_id, a2.instance_name, a2.thread#
     from     gv$session a1
            , gv$instance a2
     where    a1.inst_id = a2.inst_id
     group by a1.inst_id
            , a2.instance_name
            , a2.thread#) a
  , (select value, inst_id from gv$parameter where name='processes') b
WHERE
    a.inst_id = b.inst_id
ORDER BY
    a.instance_name;

prompt <center>[<a class="noLink" href="#directory">回到目录</a>]</center><p>


-- +----------------------------------------------------------------------------+
-- |                        - USER SESSION MATRIX -                             |
-- +----------------------------------------------------------------------------+

prompt <a name="user_session_matrix"></a>
prompt <font size="+2" face="Arial,Helvetica,Geneva,sans-serif" color="#336699"><b>会话状态一览</b></font><hr align="left" width="460">

prompt <b>User sessions (excluding SYS and background processes)</b>

CLEAR COLUMNS BREAKS COMPUTES

COLUMN instance_name_print  FORMAT a75               HEADING 'Instance Name'            ENTMAP off
COLUMN thread_number_print  FORMAT a75               HEADING 'Thread Number'            ENTMAP off
COLUMN username             FORMAT a79               HEADING 'Oracle User'              ENTMAP off
COLUMN num_user_sess        FORMAT 999,999,999,999   HEADING 'Total Number of Logins'   ENTMAP off
COLUMN count_a              FORMAT 999,999,999       HEADING 'Active Logins'            ENTMAP off
COLUMN count_i              FORMAT 999,999,999       HEADING 'Inactive Logins'          ENTMAP off
COLUMN count_k              FORMAT 999,999,999       HEADING 'Killed Logins'            ENTMAP off

BREAK ON report ON instance_name_print ON thread_number_print

SELECT
    '<div align="center"><font color="#336699"><b>' || i.instance_name || '</b></font></div>'                      instance_name_print
  , '<div align="center"><font color="#336699"><b>' || i.thread#       || '</b></font></div>'                      thread_number_print
  , '<div align="left"><font color="#000000">' || NVL(sess.username, '[B.G. Process]') || '</font></div>' username
  , count(*)              num_user_sess
  , NVL(act.count, 0)     count_a
  , NVL(inact.count, 0)   count_i
  , NVL(killed.count, 0)  count_k
FROM 
    gv$session                        sess
  , gv$instance                       i
  , (SELECT    count(*) count, NVL(username, '[B.G. Process]') username, inst_id
     FROM      gv$session
     WHERE     status = 'ACTIVE'
     GROUP BY  username, inst_id)              act
  , (SELECT    count(*) count, NVL(username, '[B.G. Process]') username, inst_id
     FROM      gv$session
     WHERE     status = 'INACTIVE'
     GROUP BY  username, inst_id)              inact
  , (SELECT    count(*) count, NVL(username, '[B.G. Process]') username, inst_id
     FROM      gv$session
     WHERE     status = 'KILLED'
     GROUP BY  username, inst_id)              killed
WHERE
         sess.inst_id                         = i.inst_id
     AND (
           NVL(sess.username, '[B.G. Process]') = act.username (+)
           AND
           sess.inst_id  = act.inst_id (+)
         )
     AND (
           NVL(sess.username, '[B.G. Process]') = inact.username (+)
           AND
           sess.inst_id  = inact.inst_id (+)
         )
     AND (
           NVL(sess.username, '[B.G. Process]') = killed.username (+)
           AND
           sess.inst_id  = killed.inst_id (+)
         )
     AND sess.username NOT IN ('SYS')
GROUP BY
    i.instance_name
  , i.thread#
  , sess.username
  , act.count
  , inact.count
  , killed.count
ORDER BY
    i.instance_name
  , i.thread#
  , sess.username;


prompt <center>[<a class="noLink" href="#directory">回到目录</a>]</center><p>

-- +============================================================================+
-- |                                                                            |
-- |                      <<<<<     SECURITY     >>>>>                          |
-- |                                                                            |
-- +============================================================================+


prompt
prompt <center><font size="+2" face="Arial,Helvetica,Geneva,sans-serif" color="#663300"><b><u>数据库安全</u></b></font></center>


-- +----------------------------------------------------------------------------+
-- |                             - USER ACCOUNTS -                              |
-- +----------------------------------------------------------------------------+

prompt <a name="user_accounts"></a>
prompt <font size="+2" face="Arial,Helvetica,Geneva,sans-serif" color="#336699"><b>数据库用户一览</b></font><hr align="left" width="460">

CLEAR COLUMNS BREAKS COMPUTES

COLUMN username              FORMAT a75    HEAD 'Username'        ENTMAP off
COLUMN account_status        FORMAT a75    HEAD 'Account Status'  ENTMAP off
COLUMN expiry_date           FORMAT a75    HEAD 'Expire Date'     ENTMAP off
COLUMN default_tablespace    FORMAT a75    HEAD 'Default Tbs.'    ENTMAP off
COLUMN temporary_tablespace  FORMAT a75    HEAD 'Temp Tbs.'       ENTMAP off
COLUMN created               FORMAT a75    HEAD 'Created On'      ENTMAP off
COLUMN profile               FORMAT a75    HEAD 'Profile'         ENTMAP off
COLUMN sysdba                FORMAT a75    HEAD 'SYSDBA'          ENTMAP off
COLUMN sysoper               FORMAT a75    HEAD 'SYSOPER'         ENTMAP off

SELECT distinct
    '<b><font color="#336699">' || a.username || '</font></b>'                                            username
  , DECODE(   a.account_status
            , 'OPEN'
            , '<div align="left"><b><font color="darkgreen">' || a.account_status || '</font></b></div>'
            , '<div align="left"><b><font color="#663300">'   || a.account_status || '</font></b></div>') account_status
  , '<div nowrap align="right">' || NVL(TO_CHAR(a.expiry_date, 'yyyy-mm-dd HH24:MI:SS'), '<br>') || '</div>'           expiry_date
  , a.default_tablespace                                                                                  default_tablespace
  , a.temporary_tablespace                                                                                temporary_tablespace
  , '<div nowrap align="right">' || TO_CHAR(a.created, 'yyyy-mm-dd HH24:MI:SS') || '</div>'               created
  , a.profile                                        profile
  , '<div nowrap align="center">' || NVL(DECODE(p.sysdba,'TRUE', 'TRUE',''), '<br>') || '</div>'   sysdba
  , '<div nowrap align="center">' || NVL(DECODE(p.sysoper,'TRUE','TRUE',''), '<br>') || '</div>'   sysoper
FROM
    dba_users       a
  , v$pwfile_users  p
WHERE
    p.username (+) = a.username 
ORDER BY
    username;

prompt <center>[<a class="noLink" href="#directory">回到目录</a>]</center><p>


-- +----------------------------------------------------------------------------+
-- |                      - USERS WITH DBA PRIVILEGES -                         |
-- +----------------------------------------------------------------------------+

prompt <a name="users_with_dba_privileges"></a>
prompt <font size="+2" face="Arial,Helvetica,Geneva,sans-serif" color="#336699"><b>拥有DBA角色的用户</b></font><hr align="left" width="460">

CLEAR COLUMNS BREAKS COMPUTES

COLUMN grantee        FORMAT a70   HEADING 'Grantee'         ENTMAP off
COLUMN granted_role   FORMAT a35   HEADING 'Granted Role'    ENTMAP off
COLUMN admin_option   FORMAT a75   HEADING 'Admin. Option?'  ENTMAP off
COLUMN default_role   FORMAT a75   HEADING 'Default Role?'   ENTMAP off

SELECT
    '<b><font color="#336699">' || grantee       || '</font></b>'  grantee
  , '<div align="center">'      || granted_role  || '</div>'  granted_role
  , DECODE(   admin_option
            , 'YES'
            , '<div align="center"><font color="darkgreen"><b>' || admin_option || '</b></font></div>'
            , 'NO'
            , '<div align="center"><font color="#990000"><b>'   || admin_option || '</b></font></div>'
            , '<div align="center"><font color="#663300"><b>'   || admin_option || '</b></font></div>')   admin_option
  , DECODE(   default_role
            , 'YES'
            , '<div align="center"><font color="darkgreen"><b>' || default_role || '</b></font></div>'
            , 'NO'
            , '<div align="center"><font color="#990000"><b>'   || default_role || '</b></font></div>'
            , '<div align="center"><font color="#663300"><b>'   || default_role || '</b></font></div>')   default_role
FROM
    dba_role_privs
WHERE
    granted_role = 'DBA'
ORDER BY
    grantee
  , granted_role;

prompt <center>[<a class="noLink" href="#directory">回到目录</a>]</center><p>


-- +----------------------------------------------------------------------------+
-- |                                 - ROLES -                                  |
-- +----------------------------------------------------------------------------+

prompt <a name="roles"></a>
prompt <font size="+2" face="Arial,Helvetica,Geneva,sans-serif" color="#336699"><b>角色概况</b></font><hr align="left" width="460">

CLEAR COLUMNS BREAKS COMPUTES

COLUMN role             FORMAT a70    HEAD 'Role Name'       ENTMAP off
COLUMN grantee          FORMAT a35    HEAD 'Grantee'         ENTMAP off
COLUMN admin_option     FORMAT a75    HEAD 'Admin Option?'   ENTMAP off
COLUMN default_role     FORMAT a75    HEAD 'Default Role?'   ENTMAP off

BREAK ON role

SELECT
   '<b><font color="#336699">' ||  b.role         || '</font></b>'          role
  , a.grantee                                                               grantee
  , DECODE(   a.admin_option
            , null
            , '<br>'
            , 'YES'
            , '<div align="center"><font color="darkgreen"><b>' || a.admin_option || '</b></font></div>'
            , 'NO'
            , '<div align="center"><font color="#990000"><b>'   || a.admin_option || '</b></font></div>'
            , '<div align="center"><font color="#663300"><b>'   || a.admin_option || '</b></font></div>')   admin_option
  , DECODE(   a.default_role
            , null
            , '<br>'
            , 'YES'
            , '<div align="center"><font color="darkgreen"><b>' || a.default_role || '</b></font></div>'
            , 'NO'
            , '<div align="center"><font color="#990000"><b>'   || a.default_role || '</b></font></div>'
            , '<div align="center"><font color="#663300"><b>'   || a.default_role || '</b></font></div>')   default_role
FROM
    dba_role_privs  a
  , dba_roles       b
WHERE
    granted_role(+) = b.role
ORDER BY
    b.role
  , a.grantee;

prompt <center>[<a class="noLink" href="#directory">回到目录</a>]</center><p>


-- +----------------------------------------------------------------------------+
-- |                          - DEFAULT PASSWORDS -                             |
-- +----------------------------------------------------------------------------+

prompt <a name="default_passwords"></a>
prompt <font size="+2" face="Arial,Helvetica,Geneva,sans-serif" color="#336699"><b>密码为系统默认值的用户</b></font><hr align="left" width="460">


CLEAR COLUMNS BREAKS COMPUTES

COLUMN username                      HEADING 'Username'        ENTMAP off
COLUMN account_status   FORMAT a75   HEADING 'Account Status'  ENTMAP off

SELECT
    '<b><font color="#336699">' || username        || '</font></b>'        username
  , DECODE(   account_status
            , 'OPEN'
            , '<div align="left"><b><font color="darkgreen">' || account_status || '</font></b></div>'
            , '<div align="left"><b><font color="#663300">'   || account_status || '</font></b></div>') account_status
FROM dba_users
WHERE password IN (
    'E066D214D5421CCC'   -- dbsnmp
  , '24ABAB8B06281B4C'   -- ctxsys
  , '72979A94BAD2AF80'   -- mdsys
  , 'C252E8FA117AF049'   -- odm
  , 'A7A32CD03D3CE8D5'   -- odm_mtr
  , '88A2B2C183431F00'   -- ordplugins
  , '7EFA02EC7EA6B86F'   -- ordsys
  , '4A3BA55E08595C81'   -- outln
  , 'F894844C34402B67'   -- scott
  , '3F9FBD883D787341'   -- wk_proxy
  , '79DF7A1BD138CF11'   -- wk_sys
  , '7C9BA362F8314299'   -- wmsys
  , '88D8364765FCE6AF'   -- xdb
  , 'F9DA8977092B7B81'   -- tracesvr
  , '9300C0977D7DC75E'   -- oas_public
  , 'A97282CE3D94E29E'   -- websys
  , 'AC9700FD3F1410EB'   -- lbacsys
  , 'E7B5D92911C831E1'   -- rman
  , 'AC98877DE1297365'   -- perfstat
  , 'D4C5016086B2DC6A'   -- sys
  , 'D4DF7931AB130E37')  -- system
ORDER BY
    username;

prompt <center>[<a class="noLink" href="#directory">回到目录</a>]</center><p>


-- +----------------------------------------------------------------------------+
-- |                              - DB LINKS -                                  |
-- +----------------------------------------------------------------------------+

prompt <a name="db_links"></a>
prompt <font size="+2" face="Arial,Helvetica,Geneva,sans-serif" color="#336699"><b>数据库链路</b></font><hr align="left" width="460">

CLEAR COLUMNS BREAKS COMPUTES

COLUMN owner        FORMAT a75    HEADING 'Owner'           ENTMAP off
COLUMN db_link      FORMAT a75    HEADING 'DB Link Name'    ENTMAP off
COLUMN username                   HEADING 'Username'        ENTMAP off
COLUMN host                       HEADING 'Host'            ENTMAP off
COLUMN created      FORMAT a75    HEADING 'Created'         ENTMAP off

BREAK ON owner

SELECT
    '<b><font color="#336699">' || owner || '</font></b>'  owner
  , db_link
  , username
  , host
  , '<div nowrap align="right">' || TO_CHAR(created, 'yyyy-mm-dd HH24:MI:SS') || '</div>' created
FROM dba_db_links
ORDER BY owner, db_link;

prompt <center>[<a class="noLink" href="#directory">回到目录</a>]</center><p>


-- +============================================================================+
-- |                                                                            |
-- |                     <<<<<     OBJECTS     >>>>>                            |
-- |                                                                            |
-- +============================================================================+


prompt
prompt <center><font size="+2" face="Arial,Helvetica,Geneva,sans-serif" color="#663300"><b><u>对象</u></b></font></center>


-- +----------------------------------------------------------------------------+
-- |                            - OBJECT SUMMARY -                              |
-- +----------------------------------------------------------------------------+

prompt <a name="object_summary"></a>
prompt <font size="+2" face="Arial,Helvetica,Geneva,sans-serif" color="#336699"><b>对象汇总</b></font><hr align="left" width="460">

CLEAR COLUMNS BREAKS COMPUTES

COLUMN owner           FORMAT a60               HEADING 'Owner'           ENTMAP off
COLUMN object_type     FORMAT a25               HEADING 'Object Type'     ENTMAP off
COLUMN obj_count       FORMAT 999,999,999,999   HEADING 'Object Count'    ENTMAP off

BREAK ON report ON owner SKIP 2
-- compute sum label ""               of obj_count on owner
-- compute sum label '<font color="#990000"><b>Grand Total: </b></font>' of obj_count on report
COMPUTE sum LABEL '<font color="#990000"><b>Total: </b></font>' OF obj_count ON report

SELECT
    '<b><font color="#336699">' || owner || '</font></b>'  owner
  , object_type                                            object_type
  , count(*)                                               obj_count
FROM
    dba_objects
GROUP BY
    owner
  , object_type
ORDER BY
    owner
  , object_type;

prompt <center>[<a class="noLink" href="#directory">回到目录</a>]</center><p>


-- +----------------------------------------------------------------------------+
-- |                          - SEGMENT SUMMARY -                               |
-- +----------------------------------------------------------------------------+

prompt <a name="segment_summary"></a>
prompt <font size="+2" face="Arial,Helvetica,Geneva,sans-serif" color="#336699"><b>段的汇总</b></font><hr align="left" width="460">

CLEAR COLUMNS BREAKS COMPUTES

COLUMN owner           FORMAT a50                    HEADING 'Owner'             ENTMAP off
COLUMN segment_type    FORMAT a25                    HEADING 'Segment Type'      ENTMAP off
COLUMN seg_count       FORMAT 999,999,999,999        HEADING 'Segment Count'     ENTMAP off
COLUMN bytes           FORMAT 999,999,999,999,999    HEADING 'Size (in Bytes)'   ENTMAP off

BREAK ON report ON owner SKIP 2
-- COMPUTE sum LABEL ""                                                  OF seg_count bytes ON owner
COMPUTE sum LABEL '<font color="#990000"><b>Total: </b></font>' OF seg_count bytes ON report

SELECT
    '<b><font color="#336699">' || owner || '</font></b>'  owner
  , segment_type        segment_type
  , count(*)            seg_count
  , sum(bytes)          bytes
FROM
    dba_segments
GROUP BY
    owner
  , segment_type
ORDER BY
    owner
  , segment_type;

prompt <center>[<a class="noLink" href="#directory">回到目录</a>]</center><p>


-- +----------------------------------------------------------------------------+
-- |                    - TOP 10 SEGMENTS (BY SIZE) -                          |
-- +----------------------------------------------------------------------------+

prompt <a name="top_10_segments_by_size"></a>
prompt <font size="+2" face="Arial,Helvetica,Geneva,sans-serif" color="#336699"><b>体积最大的10个段</b></font><hr align="left" width="460">

CLEAR COLUMNS BREAKS COMPUTES

COLUMN owner                                               HEADING 'Owner'            ENTMAP off
COLUMN segment_name                                        HEADING 'Segment Name'     ENTMAP off
COLUMN partition_name                                      HEADING 'Partition Name'   ENTMAP off
COLUMN segment_type                                        HEADING 'Segment Type'     ENTMAP off
COLUMN tablespace_name                                     HEADING 'Tablespace Name'  ENTMAP off
COLUMN bytes               FORMAT 999,999,999,999,999,999  HEADING 'Size (in bytes)'  ENTMAP off
COLUMN extents             FORMAT 999,999,999,999,999,999  HEADING 'Extents'          ENTMAP off

BREAK ON report
COMPUTE sum LABEL '<font color="#990000"><b>Total: </b></font>' OF bytes extents ON report

SELECT
    a.owner
  , a.segment_name
  , a.partition_name
  , a.segment_type
  , a.tablespace_name
  , a.bytes
  , a.extents
FROM
    (select
         b.owner
       , b.segment_name
       , b.partition_name
       , b.segment_type
       , b.tablespace_name
       , b.bytes
       , b.extents
     from
         dba_segments b
     order by
         b.bytes desc
    ) a
WHERE
    rownum < 11;

prompt <center>[<a class="noLink" href="#directory">回到目录</a>]</center><p>


-- +----------------------------------------------------------------------------+
-- |                      - TOP 10 SEGMENTS (BY EXTENTS) -                     |
-- +----------------------------------------------------------------------------+

prompt <a name="top_100_segments_by_extents"></a>
prompt <font size="+2" face="Arial,Helvetica,Geneva,sans-serif" color="#336699"><b>扩展最多的10个段</b></font><hr align="left" width="460">

CLEAR COLUMNS BREAKS COMPUTES

COLUMN owner                                               HEADING 'Owner'            ENTMAP off
COLUMN segment_name                                        HEADING 'Segment Name'     ENTMAP off
COLUMN partition_name                                      HEADING 'Partition Name'   ENTMAP off
COLUMN segment_type                                        HEADING 'Segment Type'     ENTMAP off
COLUMN tablespace_name                                     HEADING 'Tablespace Name'  ENTMAP off
COLUMN extents             FORMAT 999,999,999,999,999,999  HEADING 'Extents'          ENTMAP off
COLUMN bytes               FORMAT 999,999,999,999,999,999  HEADING 'Size (in bytes)'  ENTMAP off

BREAK ON report
COMPUTE sum LABEL '<font color="#990000"><b>Total: </b></font>' OF extents bytes ON report

SELECT
    a.owner
  , a.segment_name
  , a.partition_name
  , a.segment_type
  , a.tablespace_name
  , a.extents
  , a.bytes
FROM
    (select
         b.owner
       , b.segment_name
       , b.partition_name
       , b.segment_type
       , b.tablespace_name
       , b.bytes
       , b.extents
     from
         dba_segments b
     order by
         b.extents desc
    ) a
WHERE
    rownum < 11;

prompt <center>[<a class="noLink" href="#directory">回到目录</a>]</center><p>


-- +----------------------------------------------------------------------------+
-- |                           - DIRECTORIES -                                  |
-- +----------------------------------------------------------------------------+

prompt <a name="dba_directories"></a>
prompt <font size="+2" face="Arial,Helvetica,Geneva,sans-serif" color="#336699"><b>数据库目录</b></font><hr align="left" width="460">

CLEAR COLUMNS BREAKS COMPUTES

COLUMN owner             FORMAT a75  HEADING 'Owner'             ENTMAP off
COLUMN directory_name    FORMAT a75  HEADING 'Directory Name'    ENTMAP off
COLUMN directory_path                HEADING 'Directory Path'    ENTMAP off

BREAK ON report ON owner

SELECT
    '<div align="left"><font color="#336699"><b>' || owner          || '</b></font></div>'  owner
  , '<b><font color="#663300">'                   || directory_name || '</font></b>'        directory_name
  , '<tt>' || directory_path || '</tt>' directory_path
FROM
    dba_directories
ORDER BY
    owner
  , directory_name;

prompt <center>[<a class="noLink" href="#directory">回到目录</a>]</center><p>


-- +----------------------------------------------------------------------------+
-- |                        - DIRECTORY PRIVILEGES -                            |
-- +----------------------------------------------------------------------------+

prompt <a name="dba_directory_privileges"></a>
prompt <font size="+2" face="Arial,Helvetica,Geneva,sans-serif" color="#336699"><b>Directory Privileges</b></font><hr align="left" width="460">

CLEAR COLUMNS BREAKS COMPUTES

COLUMN table_name    FORMAT a75      HEADING 'Directory Name'    ENTMAP off
COLUMN grantee       FORMAT a75      HEADING 'Grantee'           ENTMAP off
COLUMN privilege     FORMAT a75      HEADING 'Privilege'         ENTMAP off
COLUMN grantable     FORMAT a75      HEADING 'Grantable?'        ENTMAP off

BREAK ON report ON table_name ON grantee

SELECT
    '<b><font color="#336699">' || table_name || '</font></b>'  table_name
  , '<b><font color="#663300">' || grantee    || '</font></b>'  grantee
  , privilege                                                   privilege
  , DECODE(   grantable
            , 'YES'
            , '<div align="center"><font color="darkgreen"><b>' || grantable || '</b></font></div>'
            , 'NO'
            , '<div align="center"><font color="#990000"><b>'   || grantable || '</b></font></div>'
            , '<div align="center"><font color="#663300"><b>'   || grantable || '</b></font></div>')   grantable
FROM
    dba_tab_privs
WHERE
    privilege IN ('READ', 'WRITE')
ORDER BY
    table_name
  , grantee
  , privilege;

prompt <center>[<a class="noLink" href="#directory">回到目录</a>]</center><p>


-- +----------------------------------------------------------------------------+
-- |                           - LOB SEGMENTS -                                 |
-- +----------------------------------------------------------------------------+

prompt <a name="dba_lob_segments"></a>
prompt <font size="+2" face="Arial,Helvetica,Geneva,sans-serif" color="#336699"><b>LOB段</b></font><hr align="left" width="460">

prompt <b>Excluding all internal system schemas (i.e. CTXSYS, MDSYS, SYS, SYSTEM)</b>

CLEAR COLUMNS BREAKS COMPUTES

COLUMN owner              FORMAT a85        HEADING 'Owner'              ENTMAP off
COLUMN table_name         FORMAT a75        HEADING 'Table Name'         ENTMAP off
COLUMN column_name        FORMAT a75        HEADING 'Column Name'        ENTMAP off
COLUMN segment_name       FORMAT a125       HEADING 'LOB Segment Name'   ENTMAP off
COLUMN tablespace_name    FORMAT a75        HEADING 'Tablespace Name'    ENTMAP off
COLUMN lob_segment_bytes  FORMAT a75        HEADING 'Segment Size'       ENTMAP off
COLUMN index_name         FORMAT a125       HEADING 'LOB Index Name'     ENTMAP off
COLUMN in_row             FORMAT a75        HEADING 'In Row?'            ENTMAP off

BREAK ON report ON owner ON table_name

SELECT
    '<div nowrap align="left"><font color="#336699"><b>' || l.owner || '</b></font></div>'    owner
  , '<div nowrap>' || l.table_name        || '</div>'       table_name
  , '<div nowrap>' || l.column_name       || '</div>'       column_name
  , '<div nowrap>' || l.segment_name      || '</div>'       segment_name
  , '<div nowrap>' || s.tablespace_name   || '</div>'       tablespace_name
  , '<div nowrap align="right">' || TO_CHAR(s.bytes, '999,999,999,999,999') || '</div>'  lob_segment_bytes
  , '<div nowrap>' || l.index_name        || '</div>'       index_name
  , DECODE(   l.in_row
            , 'YES'
            , '<div align="center"><font color="darkgreen"><b>' || l.in_row || '</b></font></div>'
            , 'NO'
            , '<div align="center"><font color="#990000"><b>'   || l.in_row || '</b></font></div>'
            , '<div align="center"><font color="#663300"><b>'   || l.in_row || '</b></font></div>')   in_row
FROM
    dba_lobs     l
  , dba_segments s
WHERE
      l.owner = s.owner
  AND l.segment_name = s.segment_name
  AND l.owner NOT IN (    'CTXSYS'
                        , 'DBSNMP'
                        , 'DMSYS'
                        , 'EXFSYS'
                        , 'IX'
                        , 'LBACSYS'
                        , 'MDSYS'
                        , 'OLAPSYS'
                        , 'ORDSYS'
                        , 'OUTLN'
                        , 'SYS'
                        , 'SYSMAN'
                        , 'SYSTEM'
                        , 'WKSYS'
                        , 'WMSYS'
                        , 'XDB')
ORDER BY
    l.owner
  , l.table_name
  , l.column_name;

prompt <center>[<a class="noLink" href="#directory">回到目录</a>]</center><p>


-- +----------------------------------------------------------------------------+
-- |                      - 不能扩展的对象 -                          |
-- +----------------------------------------------------------------------------+

prompt <a name="objects_unable_to_extend"></a>
prompt <font size="+2" face="Arial,Helvetica,Geneva,sans-serif" color="#336699"><b>不能扩展的对象</b></font><hr align="left" width="460">

prompt <b>Segments that cannot extend because of MAXEXTENTS or not enough space</b>

CLEAR COLUMNS BREAKS COMPUTES

COLUMN owner             FORMAT a75                  HEADING 'Owner'            ENTMAP off
COLUMN tablespace_name                               HEADING 'Tablespace Name'  ENTMAP off
COLUMN segment_name                                  HEADING 'Segment Name'     ENTMAP off
COLUMN segment_type                                  HEADING 'Segment Type'     ENTMAP off
COLUMN next_extent       FORMAT 999,999,999,999,999  HEADING 'Next Extent'      ENTMAP off
COLUMN max               FORMAT 999,999,999,999,999  HEADING 'Max. Piece Size'  ENTMAP off
COLUMN sum               FORMAT 999,999,999,999,999  HEADING 'Sum of Bytes'     ENTMAP off
COLUMN extents           FORMAT 999,999,999,999,999  HEADING 'Num. of Extents'  ENTMAP off
COLUMN max_extents       FORMAT 999,999,999,999,999  HEADING 'Max Extents'      ENTMAP off

BREAK ON report ON owner

SELECT
    '<div nowrap align="left"><font color="#336699"><b>' || ds.owner || '</b></font></div>'    owner
  , ds.tablespace_name    tablespace_name
  , ds.segment_name       segment_name
  , ds.segment_type       segment_type
  , ds.next_extent        next_extent
  , NVL(dfs.max, 0)       max
  , NVL(dfs.sum, 0)       sum
  , ds.extents            extents
  , ds.max_extents        max_extents
FROM 
    dba_segments ds
  , (select
         max(bytes) max
       , sum(bytes) sum
       , tablespace_name
     from
         dba_free_space 
     group by
         tablespace_name
    ) dfs
WHERE
      (ds.next_extent > nvl(dfs.max, 0)
       OR
       ds.extents >= ds.max_extents)
  AND ds.tablespace_name = dfs.tablespace_name (+)
  AND ds.owner NOT IN ('SYS','SYSTEM')
ORDER BY
    ds.owner
  , ds.tablespace_name
  , ds.segment_name;

prompt <center>[<a class="noLink" href="#directory">回到目录</a>]</center><p>


-- +----------------------------------------------------------------------------+
-- |               - 将达到最大扩展度的对象 -                     |
-- +----------------------------------------------------------------------------+

prompt <a name="objects_which_are_nearing_maxextents"></a>
prompt <font size="+2" face="Arial,Helvetica,Geneva,sans-serif" color="#336699"><b>扩展超过1/2最大扩展度的对象</b></font><hr align="left" width="460">


CLEAR COLUMNS BREAKS COMPUTES

COLUMN owner             FORMAT a75                   HEADING 'Owner'             ENTMAP off
COLUMN tablespace_name   FORMAT a30                   HEADING 'Tablespace name'   ENTMAP off
COLUMN segment_name      FORMAT a30                   HEADING 'Segment Name'      ENTMAP off
COLUMN segment_type      FORMAT a20                   HEADING 'Segment Type'      ENTMAP off
COLUMN bytes             FORMAT 999,999,999,999,999   HEADING 'Size (in bytes)'   ENTMAP off
COLUMN next_extent       FORMAT 999,999,999,999,999   HEADING 'Next Extent Size'  ENTMAP off
COLUMN pct_increase                                   HEADING '% Increase'        ENTMAP off
COLUMN extents           FORMAT 999,999,999,999,999   HEADING 'Num. of Extents'   ENTMAP off
COLUMN max_extents       FORMAT 999,999,999,999,999   HEADING 'Max Extents'       ENTMAP off
COLUMN pct_util          FORMAT a35                   HEADING '% Utilized'        ENTMAP off

SELECT
    owner
  , tablespace_name
  , segment_name
  , segment_type
  , bytes
  , next_extent
  , pct_increase
  , extents
  , max_extents
  , '<div align="right">' || ROUND((extents/max_extents)*100, 2) || '%</div>'   pct_util
FROM
    dba_segments
WHERE
      extents > max_extents/2
  AND max_extents != 0
ORDER BY
    (extents/max_extents) DESC;

prompt <center>[<a class="noLink" href="#directory">回到目录</a>]</center><p>


-- +----------------------------------------------------------------------------+
-- |                          - 无效的对象 -                                  |
-- +----------------------------------------------------------------------------+

prompt <a name="invalid_objects"></a>
prompt <font size="+2" face="Arial,Helvetica,Geneva,sans-serif" color="#336699"><b>无效的对象</b></font><hr align="left" width="460">

CLEAR COLUMNS BREAKS COMPUTES

COLUMN owner           FORMAT a85         HEADING 'Owner'         ENTMAP off
COLUMN object_name     FORMAT a30         HEADING 'Object Name'   ENTMAP off
COLUMN object_type     FORMAT a20         HEADING 'Object Type'   ENTMAP off
COLUMN status          FORMAT a75         HEADING 'Status'        ENTMAP off

BREAK ON report ON owner
COMPUTE count LABEL '<font color="#990000"><b>Grand Total: </b></font>' OF object_name ON report

SELECT
    '<div nowrap align="left"><font color="#336699"><b>' || owner || '</b></font></div>'    owner
  , object_name
  , object_type
  , DECODE(   status
            , 'VALID'
            , '<div align="center"><font color="darkgreen"><b>' || status || '</b></font></div>'
            , '<div align="center"><font color="#990000"><b>'   || status || '</b></font></div>' ) status
FROM dba_objects
WHERE status <> 'VALID'
ORDER BY
    owner
  , object_name;

prompt <center>[<a class="noLink" href="#directory">回到目录</a>]</center><p>


-- +----------------------------------------------------------------------------+
-- |           - 行链接或行迁移的表 -                               |
-- +----------------------------------------------------------------------------+

prompt <a name="tables_suffering_from_row_chaining_migration"></a>
prompt <font size="+2" face="Arial,Helvetica,Geneva,sans-serif" color="#336699"><b>行链接或行迁移的表</b></font><hr align="left" width="460">

prompt <b><font color="#990000">NOTE</font>: Tables must have statistics gathered</b>

CLEAR COLUMNS BREAKS COMPUTES

COLUMN owner                                          HEADING 'Owner'           ENTMAP off
COLUMN table_name                                     HEADING 'Table Name'      ENTMAP off
COLUMN partition_name                                 HEADING 'Partition Name'  ENTMAP off
COLUMN num_rows           FORMAT 999,999,999,999,999  HEADING 'Total Rows'      ENTMAP off
COLUMN pct_chained_rows   FORMAT a65                  HEADING '% Chained Rows'  ENTMAP off
COLUMN avg_row_length     FORMAT 999,999,999,999,999  HEADING 'Avg Row Length'  ENTMAP off

SELECT
    owner                               owner
  , table_name                          table_name
  , ''                                  partition_name
  , num_rows                            num_rows
  , '<div align="right">' || ROUND((chain_cnt/num_rows)*100, 2) || '%</div>' pct_chained_rows
  , avg_row_len                         avg_row_length
FROM
    (select
         owner
       , table_name
       , chain_cnt
       , num_rows
       , avg_row_len 
     from
         sys.dba_tables 
     where
           chain_cnt is not null 
       and num_rows is not null 
       and chain_cnt > 0 
       and num_rows > 0 
       and owner != 'SYS')  
UNION ALL 
SELECT
    table_owner                         owner
  , table_name                          table_name
  , partition_name                      partition_name
  , num_rows                            num_rows
  , '<div align="right">' || ROUND((chain_cnt/num_rows)*100, 2) || '%</div>' pct_chained_rows
  , avg_row_len                         avg_row_length
FROM
    (select
         table_owner
       , table_name
       , partition_name
       , chain_cnt
       , num_rows
       , avg_row_len 
     from
         sys.dba_tab_partitions 
     where
           chain_cnt is not null 
       and num_rows is not null 
       and chain_cnt > 0 
       and num_rows > 0 
       and table_owner != 'SYS') b 
WHERE
    (chain_cnt/num_rows)*100 > 10;

prompt <center>[<a class="noLink" href="#directory">回到目录</a>]</center><p>


-- +----------------------------------------------------------------------------+
-- |             - 将系统表空间作为缺省表空间的用户         -                   |
-- +----------------------------------------------------------------------------+

prompt <a name="users_with_default_tablespace_defined_as_system"></a>
prompt <font size="+2" face="Arial,Helvetica,Geneva,sans-serif" color="#336699"><b>系统表空间作为缺省表空间的用户</b></font><hr align="left" width="460">

CLEAR COLUMNS BREAKS COMPUTES

COLUMN username                 FORMAT a75    HEADING 'Username'                ENTMAP off
COLUMN default_tablespace       FORMAT a125   HEADING 'Default Tablespace'      ENTMAP off
COLUMN temporary_tablespace     FORMAT a125   HEADING 'Temporary Tablespace'    ENTMAP off
COLUMN created                  FORMAT a75    HEADING 'Created'                 ENTMAP off
COLUMN account_status           FORMAT a75    HEADING 'Account Status'          ENTMAP off

SELECT
    '<font color="#336699"><b>' || username             || '</font></b>'                  username
  , '<div align="left">'        || default_tablespace   || '</div>'                       default_tablespace
  , '<div align="left">'        || temporary_tablespace || '</div>'                       temporary_tablespace
  , '<div align="right">'       || TO_CHAR(created, 'yyyy-mm-dd HH24:MI:SS') || '</div>'  created
  , DECODE(   account_status
            , 'OPEN'
            , '<div align="center"><b><font color="darkgreen">' || account_status || '</font></b></div>'
            , '<div align="center"><b><font color="#663300">'   || account_status || '</font></b></div>') account_status
FROM
    dba_users
WHERE
    default_tablespace = 'SYSTEM'
ORDER BY
    username;

prompt <center>[<a class="noLink" href="#directory">回到目录</a>]</center><p>


-- +----------------------------------------------------------------------------+
-- |          - 将系统表空间作为临时表空间的用户                   -            |
-- +----------------------------------------------------------------------------+

prompt <a name="users_with_default_temporary_tablespace_as_system"></a>
prompt <font size="+2" face="Arial,Helvetica,Geneva,sans-serif" color="#336699"><b>系统表空间作为临时表空间的用户</b></font><hr align="left" width="460">

CLEAR COLUMNS BREAKS COMPUTES

COLUMN username                 FORMAT a75    HEADING 'Username'                ENTMAP off
COLUMN default_tablespace       FORMAT a125   HEADING 'Default Tablespace'      ENTMAP off
COLUMN temporary_tablespace     FORMAT a125   HEADING 'Temporary Tablespace'    ENTMAP off
COLUMN created                  FORMAT a75    HEADING 'Created'                 ENTMAP off
COLUMN account_status           FORMAT a75    HEADING 'Account Status'          ENTMAP off

SELECT
    '<font color="#336699"><b>'  || username             || '</font></b>'                  username
  , '<div align="center">'       || default_tablespace   || '</div>'                       default_tablespace
  , '<div align="center">'       || temporary_tablespace || '</div>'                       temporary_tablespace
  , '<div align="right">'        || TO_CHAR(created, 'yyyy-mm-dd HH24:MI:SS') || '</div>'  created
  , DECODE(   account_status
            , 'OPEN'
            , '<div align="center"><b><font color="darkgreen">' || account_status || '</font></b></div>'
            , '<div align="center"><b><font color="#663300">'   || account_status || '</font></b></div>') account_status
FROM
    dba_users
WHERE
    temporary_tablespace = 'SYSTEM'
ORDER BY
    username;

prompt <center>[<a class="noLink" href="#directory">回到目录</a>]</center><p>


-- +----------------------------------------------------------------------------+
-- |                  - 系统表空间中非系统用户对象 -                            |
-- +----------------------------------------------------------------------------+

prompt <a name="objects_in_the_system_tablespace"></a>
prompt <font size="+2" face="Arial,Helvetica,Geneva,sans-serif" color="#336699"><b>Objects in the SYSTEM Tablespace</b></font><hr align="left" width="460">

CLEAR COLUMNS BREAKS COMPUTES

COLUMN owner               FORMAT a75                   HEADING 'Owner'           ENTMAP off
COLUMN segment_name        FORMAT a125                  HEADING 'Segment Name'    ENTMAP off
COLUMN segment_type        FORMAT a75                   HEADING 'Type'            ENTMAP off
COLUMN tablespace_name     FORMAT a125                  HEADING 'Tablespace'      ENTMAP off
COLUMN bytes               FORMAT 999,999,999,999,999   HEADING 'Bytes|Alloc'     ENTMAP off
COLUMN extents             FORMAT 999,999,999,999,999   HEADING 'Extents'         ENTMAP off
COLUMN max_extents         FORMAT 999,999,999,999,999   HEADING 'Max|Ext'         ENTMAP off
COLUMN initial_extent      FORMAT 999,999,999,999,999   HEADING 'Initial|Ext'     ENTMAP off
COLUMN next_extent         FORMAT 999,999,999,999,999   HEADING 'Next|Ext'        ENTMAP off
COLUMN pct_increase        FORMAT 999,999,999,999,999   HEADING 'Pct|Inc'         ENTMAP off

BREAK ON report ON owner
COMPUTE count LABEL '<font color="#990000"><b>Total Count: </b></font>' OF segment_name ON report
COMPUTE sum   LABEL '<font color="#990000"><b>Total Bytes: </b></font>' OF bytes ON report

SELECT
    '<div nowrap align="left"><font color="#336699"><b>' || owner || '</b></font></div>'    owner
  , segment_name
  , segment_type
  , tablespace_name
  , bytes
  , extents
  , initial_extent
  , next_extent
  , pct_increase
FROM
    dba_segments
WHERE
      owner NOT IN ('SYS','SYSTEM')
  AND tablespace_name = 'SYSTEM'
ORDER BY
    owner
  , segment_name
  , extents DESC;

prompt <center>[<a class="noLink" href="#directory">回到目录</a>]</center><p>


-- +----------------------------------------------------------------------------+
-- |                              - RECYCLE BIN -                               |
-- +----------------------------------------------------------------------------+

prompt <a name="dba_recycle_bin"></a>
prompt <font size="+2" face="Arial,Helvetica,Geneva,sans-serif" color="#336699"><b>Recycle Bin</b></font><hr align="left" width="460">

CLEAR COLUMNS BREAKS COMPUTES

COLUMN owner               FORMAT a85                   HEADING 'Owner'           ENTMAP off
COLUMN original_name                                    HEADING 'Original|Name'   ENTMAP off
COLUMN type                                             HEADING 'Object|Type'     ENTMAP off
COLUMN object_name                                      HEADING 'Object|Name'     ENTMAP off
COLUMN ts_name                                          HEADING 'Tablespace'      ENTMAP off
COLUMN operation                                        HEADING 'Operation'       ENTMAP off
COLUMN createtime                                       HEADING 'Create|Time'     ENTMAP off
COLUMN droptime                                         HEADING 'Drop|Time'       ENTMAP off
COLUMN can_undrop                                       HEADING 'Can|Undrop?'     ENTMAP off
COLUMN can_purge                                        HEADING 'Can|Purge?'      ENTMAP off
COLUMN bytes               FORMAT 999,999,999,999,999   HEADING 'Bytes'           ENTMAP off

BREAK ON report ON owner

SELECT
    '<div nowrap align="left"><font color="#336699"><b>' || owner || '</b></font></div>'    owner
  , original_name
  , type
  , object_name
  , ts_name
  , operation
  , '<div nowrap align="right">'  || NVL(createtime, '<br>') || '</div>' createtime
  , '<div nowrap align="right">'  || NVL(droptime, '<br>')   || '</div>' droptime
  , DECODE(   can_undrop
            , null
            , '<BR>'
            , 'YES'
            , '<div align="center"><font color="darkgreen"><b>' || can_undrop || '</b></font></div>'
            , 'NO'
            , '<div align="center"><font color="#990000"><b>'   || can_undrop || '</b></font></div>'
            , '<div align="center"><font color="#663300"><b>'   || can_undrop || '</b></font></div>')   can_undrop
  , DECODE(   can_purge
            , null
            , '<BR>'
            , 'YES'
            , '<div align="center"><font color="darkgreen"><b>' || can_purge || '</b></font></div>'
            , 'NO'
            , '<div align="center"><font color="#990000"><b>'   || can_purge || '</b></font></div>'
            , '<div align="center"><font color="#663300"><b>'   || can_purge || '</b></font></div>')    can_purge
  , (space * p.blocksize) bytes
FROM
    dba_recyclebin r
  , (SELECT value blocksize FROM v$parameter WHERE name='db_block_size') p
ORDER BY
    owner
  , object_name;

prompt <center>[<a class="noLink" href="#directory">回到目录</a>]</center><p>


-- +----------------------------------------------------------------------------+
-- |                             - 数据库性能 -                                 |
-- +----------------------------------------------------------------------------+

prompt <a name="awr_performance_analyze"></a>
prompt <font size="+2" face="Arial,Helvetica,Geneva,sans-serif" color="#336699"><b>数据库性能分析(AWR统计)</b></font><hr align="left" width="460">

CLEAR COLUMNS BREAKS COMPUTES

COLUMN instance_number     FORMAT a100                    HEADING '实例|名称'      ENTMAP off
COLUMN snap_time          FORMAT a22                    HEADING '统计时间'        ENTMAP off
COLUMN mem_read            FORMAT 999,999,999,999,999    HEADING '内存读(MB)'     ENTMAP off
COLUMN disk_read           FORMAT 999,999,999,999,999    HEADING '磁盘读(MB)'         ENTMAP off
COLUMN disk_write          FORMAT 999,999,999,999,999    HEADING '磁盘写(KB)'         ENTMAP off
COLUMN log_account          FORMAT 999,999,999,999,999    HEADING '日志量(KB)'         ENTMAP off
COLUMN hard_parse          FORMAT 999,999,999,999,999    HEADING '硬分析(个)'         ENTMAP off
COLUMN total_parse         FORMAT 999,999,999,999,999    HEADING '分析(个)'     ENTMAP off
COLUMN trans               FORMAT 999,999,999,999,999    HEADING '事务数'        ENTMAP off
COLUMN cpu_time            FORMAT 999,999,999,999,999    HEADING 'CPU(秒)'         ENTMAP off


BREAK ON report ON instance_number

with pv as (select row_number() over(partition by instance_number, stat_name order by snap_id asc) row_no,
       snap_time,
       snap_id,
       instance_number,
       stat_name as name,
       value
  from (select cast(c.end_interval_time as date) snap_time,
               a.snap_id,
               a.instance_number,
               b.stat_name,
               a.value
          from wrh$_sysstat a, wrh$_stat_name b, WRM$_SNAPSHOT C
         where a.dbid = b.dbid
           and a.stat_id = b.stat_id
           and a.snap_id = c.snap_id
           and a.dbid = c.dbid
           and a.instance_number = c.instance_number
           and b.stat_name in
               ('session logical reads', 'physical reads', 'execute count',
                'redo size', 'parse count (hard)', 'parse count (total)',
                'physical writes', 'user commits', 'user rollbacks',
                'CPU used by this session')
                and c.end_interval_time>=sysdate -8)
)
select  '<div nowrap align="left"><font color="#336699"><b>' || instance_number || '</b></font></div>'   instance_number,
       to_char(snap_time,'yyyy-mm-dd hh24:mi:ss') snap_time,
       round(sum(decode(name, 'session logical reads', value, 0)) * 8 / 1024) mem_read ,
       round(sum(decode(name, 'physical reads', value, 0)) * 8 / 1024) disk_read ,
       round(sum(decode(name, 'physical writes', value, 0)) * 8) disk_write ,
       round(sum(decode(name, 'redo size', value, 0)) / 1024) log_account ,
       round(sum(decode(name, 'parse count (hard)', value, 0))) hard_parse ,
       round(sum(decode(name, 'parse count (total)', value, 0))) total_parse ,
       round(sum(decode(name,
                        'user commits',
                        value,
                        'user rollbacks',
                        value,
                        0)))  trans,
       round(sum(decode(name,
                        'CPU used by this session',
                        value * bet_time / 100,
                        0))) cpu_time
  from (select b.snap_id,
               b.snap_time,
               b.instance_number,
               b.name,
               round(b.value - a.value) /
               ((b.snap_time - a.snap_time) * 24 * 60 * 60) value,
               (b.snap_time - a.snap_time) * 24 * 60 * 60 bet_time
          from (select row_no + 1 rowno,
                       instance_number,
                       snap_time,
                       name,
                       value
                  from pv) a,
               (select row_no rowno,
                       instance_number,
                       snap_id,
                       snap_time,
                       name,
                       value
                  from pv) b
         where a.rowno = b.rowno
           and a.name = b.name
           and a.instance_number = b.instance_number)
 group by instance_number, to_char(snap_time,'yyyy-mm-dd hh24:mi:ss')
 order by instance_number, snap_time;

prompt <center>[<a class="noLink" href="#directory">回到目录</a>]</center><p>


prompt <font size=+2 color=darkgreen><b>数据库巡检服务</b></font><hr>
prompt <center><font size="+2" face="Arial,Helvetica,Geneva,sans-serif" color="#663300"><b>报告结束</b></font></center>

-- +----------------------------------------------------------------------------+
-- |                            - END OF REPORT -                               |
-- +----------------------------------------------------------------------------+

SPOOL OFF

SET MARKUP HTML OFF

SET TERMOUT ON

prompt 
prompt 巡检报告生成到文件: &&_cust_name._&_dbname._&_spool_time..html
prompt 巡检脚本执行结束!

EXIT;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值