您的位置:首页 > 数据库 > Oracle

Oracle 10g 数据库巡检服务

2010-12-14 11:52 218 查看
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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: