Database Overview - from idevelopment

From dbawiki
Revision as of 09:13, 7 February 2012 by 127.0.0.1 (talk) (Created page with " -- +----------------------------------------------------------------------------+ -- | Jeffrey M. Hunter | -- | ...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search
-- +----------------------------------------------------------------------------+
-- |                          Jeffrey M. Hunter                                 |
-- |                      [email protected]                             |
-- |                         www.idevelopment.info                              |
-- |----------------------------------------------------------------------------|
-- |      Copyright (c) 1998-2011 Jeffrey M. Hunter. All rights reserved.       |
-- |----------------------------------------------------------------------------|
-- | DATABASE : Oracle                                                          |
-- | FILE     : dba_snapshot_database_10g.sql                                   |
-- | CLASS    : Database Administration                                         |
-- | PURPOSE  : This SQL script provides a detailed report (in HTML format) on  |
-- |            all database metrics including installed options, storage,      |
-- |            performance data, and security.                                 |
-- | VERSION  : This script was designed for Oracle Database 10g Release 2.     |
-- |            Although this script will also work with Oracle Database 10g    |
-- |            Release 1, several sections will error out from missing tables  |
-- |            or columns.                                                     |
-- | USAGE    :                                                                 |
-- |                                                                            |
-- |    sqlplus -s <dba>/<password>@<TNS string> @dba_snapshot_database_10g.sql |
-- |                                                                            |
-- | TESTING  : This script has been successfully tested on the following       |
-- |            platforms:                                                      |
-- |                                                                            |
-- |              Linux      : Oracle Database 10.2.0.3.0                       |
-- |              Linux      : Oracle RAC 10.2.0.3.0                            |
-- |              Solaris    : Oracle Database 10.2.0.2.0                       |
-- |              Solaris    : Oracle Database 10.2.0.3.0                       |
-- |              Windows XP : Oracle Database 10.2.0.3.0                       |
-- |                                                                            |
-- | NOTE     : As with any code, ensure to test this script in a development   |
-- |            environment before attempting to run it in production.          |
-- +----------------------------------------------------------------------------+

prompt 
prompt +-----------------------------------------------------------------------------------------+
prompt |                             Snapshot Database 10g Release 2                             |
prompt |-----------------------------------------------------------------------------------------+
prompt | Copyright (c) 1998-2011 Jeffrey M. Hunter. All rights reserved. (www.idevelopment.info) |
prompt +-----------------------------------------------------------------------------------------+
prompt
prompt Creating database report.
prompt This script must be run as a user with SYSDBA privileges.
prompt This process can take several minutes to complete.
prompt 

define reportHeader="Snapshot Database 10g Release 2
Copyright (c) 1998-2011 Jeffrey M. Hunter. All rights reserved. (<a target=""_blank"" href=""http://www.idevelopment.info"">www.idevelopment.info</a>)

"


-- +----------------------------------------------------------------------------+
-- |                           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

define fileName=dba_snapshot_database_10g
define versionNumber=5.3


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

COLUMN tdate NEW_VALUE _date NOPRINT
SELECT TO_CHAR(SYSDATE,'MM/DD/YYYY') 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,'MM/DD/YYYY HH24:MI:SS') date_time FROM dual;

COLUMN date_time_timezone NEW_VALUE _date_time_timezone NOPRINT
SELECT TO_CHAR(systimestamp, 'Mon DD, YYYY (') || TRIM(TO_CHAR(systimestamp, 'Day')) || TO_CHAR(systimestamp, ') "at" HH:MI:SS AM') || TO_CHAR(systimestamp, ' "in Timezone" 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, 'MM/DD/YYYY HH24:MI:SS') startup_time FROM v$instance;

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>Database Report</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 &FileName._&_dbname._&_spool_time..html

set markup html on entmap off


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

prompt <a name=top></a>
prompt &reportHeader



-- +----------------------------------------------------------------------------+
-- |                             - REPORT INDEX -                               |
-- +----------------------------------------------------------------------------+

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


prompt
Report Index
- - - - - - - - - - - - - - - - - - - - - - - - - - prompt - - - - - - - - - - - - - - - - - - - - prompt - - - - - - - prompt - - - - - - - - - - - - - - - - - - - prompt - - - - - - - - - - - - - prompt - - - - - - - - - - - - - - - - - - - - - - - - - prompt - - - - - - - - - - - - - - - - - - - - prompt - - - - - - - - - - - - - prompt - - - - - - - - - - - - - - - - - - - prompt - - - - - - - - - - - - - - - - - - prompt - - - - - - - - - - - - - prompt - - - - - - - prompt - - - - - - - prompt - - - - - - - - - - - - - - - - - - - - - - - - - -
Database and Instance Information
<a class="link" href="#report_header">Report Header</a><a class="link" href="#version">Version</a><a class="link" href="#options">Options</a><a class="link" href="#database_registry">Database Registry</a>
<a class="link" href="#feature_usage_statistics">Feature Usage Statistics</a><a class="link" href="#high_water_mark_statistics">High Water Mark Statistics</a><a class="link" href="#instance_overview">Instance Overview</a><a class="link" href="#database_overview">Database Overview</a>
<a class="link" href="#initialization_parameters">Initialization Parameters</a><a class="link" href="#control_files">Control Files</a><a class="link" href="#control_file_records">Control File Records</a><a class="link" href="#online_redo_logs">Online Redo Logs</a>
<a class="link" href="#redo_log_switches">Redo Log Switches</a><a class="link" href="#outstanding_alerts">Outstanding Alerts</a><a class="link" href="#statistics_level">Statistics Level</a>
Scheduler / Jobs
<a class="link" href="#jobs">Jobs</a>


Storage
<a class="link" href="#tablespaces">Tablespaces</a><a class="link" href="#data_files">Data Files</a><a class="link" href="#database_growth">Database Growth</a><a class="link" href="#tablespace_extents">Tablespace Extents</a>
<a class="link" href="#tablespace_to_owner">Tablespace to Owner</a><a class="link" href="#owner_to_tablespace">Owner to Tablespace</a>

UNDO Segments
<a class="link" href="#undo_segments">UNDO Segments</a><a class="link" href="#undo_segment_contention">UNDO Segment Contention</a><a class="link" href="#undo_retention_parameters">UNDO Retention Parameters</a>
Backups
<a class="link" href="#rman_backup_jobs">RMAN Backup Jobs</a><a class="link" href="#rman_configuration">RMAN Configuration</a><a class="link" href="#rman_backup_sets">RMAN Backup Sets</a><a class="link" href="#rman_backup_pieces">RMAN Backup Pieces</a>
<a class="link" href="#rman_backup_control_files">RMAN Backup Control Files</a><a class="link" href="#rman_backup_spfile">RMAN Backup SPFILE</a><a class="link" href="#archiving_mode">Archiving Mode</a><a class="link" href="#archive_destinations">Archive Destinations</a>
<a class="link" href="#archiving_instance_parameters">Archiving Instance Parameters</a><a class="link" href="#archiving_history">Archiving History</a><a class="link" href="#flash_recovery_area_parameters">Flash Recovery Area Parameters</a><a class="link" href="#flash_recovery_area_status">Flash Recovery Area Status</a>
Flashback Technologies
<a class="link" href="#undo_retention_parameters">UNDO Retention Parameters</a><a class="link" href="#flashback_database_parameters">Flashback Database Parameters</a><a class="link" href="#flashback_database_status">Flashback Database Status</a><a class="link" href="#flashback_database_redo_time_matrix">Flashback Database Redo Time Matrix</a>
<a class="link" href="#dba_recycle_bin">Recycle Bin</a><a class="link" href="#">
</a>
<a class="link" href="#">
</a>
<a class="link" href="#">
</a>
Performance
<a class="link" href="#sga_information">SGA Information</a><a class="link" href="#sga_target_advice">SGA Target Advice</a><a class="link" href="#sga_asmm_dynamic_components">SGA (ASMM) Dynamic Components</a><a class="link" href="#pga_target_advice">PGA Target Advice</a>
<a class="link" href="#file_io_statistics">File I/O Statistics</a><a class="link" href="#file_io_timings">File I/O Timings</a><a class="link" href="#average_overall_io_per_sec">Average Overall I/O per Second</a><a class="link" href="#redo_log_contention">Redo Log Contention</a>
<a class="link" href="#full_table_scans">Full Table Scans</a><a class="link" href="#sorts">Sorts</a><a class="link" href="#dba_outlines">Outlines</a><a class="link" href="#dba_outline_hints">Outline Hints</a>
<a class="link" href="#sql_statements_with_most_buffer_gets">SQL Statements With Most Buffer Gets</a><a class="link" href="#sql_statements_with_most_disk_reads">SQL Statements With Most Disk Reads</a><a class="link" href="#dba_enabled_traces">Enabled Traces</a><a class="link" href="#dba_enabled_aggregations">Enabled Aggregations</a>
Automatic Workload Repository - (AWR)
<a class="link" href="#awr_workload_repository_information">Workload Repository Information</a><a class="link" href="#awr_snapshot_settings">AWR Snapshot Settings</a><a class="link" href="#awr_snapshot_list">AWR Snapshot List</a><a class="link" href="#awr_snapshot_size_estimates">AWR Snapshot Size Estimates</a>
<a class="link" href="#awr_baselines">AWR Baselines</a><a class="link" href="#">
</a>
<a class="link" href="#">
</a>
<a class="link" href="#">
</a>
Sessions
<a class="link" href="#current_sessions">Current Sessions</a><a class="link" href="#user_session_matrix">User Session Matrix</a><a class="link" href="#dba_enabled_traces">Enabled Traces</a><a class="link" href="#dba_enabled_aggregations">Enabled Aggregations</a>
Security
<a class="link" href="#user_accounts">User Accounts</a><a class="link" href="#users_with_dba_privileges">Users With DBA Privileges</a><a class="link" href="#roles">Roles</a><a class="link" href="#default_passwords">Default Passwords</a>
<a class="link" href="#db_links">DB Links</a><a class="link" href="#">
</a>
<a class="link" href="#">
</a>
<a class="link" href="#">
</a>
Objects
<a class="link" href="#object_summary">Object Summary</a><a class="link" href="#segment_summary">Segment Summary</a><a class="link" href="#top_100_segments_by_size">Top 100 Segments (by size)</a><a class="link" href="#top_100_segments_by_extents">Top 100 Segments (by number of extents)</a>
<a class="link" href="#dba_directories">Directories</a><a class="link" href="#dba_directory_privileges">Directory Privileges</a><a class="link" href="#dba_libraries">Libraries</a><a class="link" href="#dba_types">Types</a>
<a class="link" href="#dba_type_attributes">Type Attributes</a><a class="link" href="#dba_type_methods">Type Methods</a><a class="link" href="#dba_collections">Collections</a><a class="link" href="#dba_lob_segments">LOB Segments</a>
<a class="link" href="#objects_unable_to_extend">Objects Unable to Extend</a><a class="link" href="#objects_which_are_nearing_maxextents">Objects Which Are Nearing MAXEXTENTS</a><a class="link" href="#invalid_objects">Invalid Objects</a><a class="link" href="#procedural_object_errors">Procedural Object Errors</a>
<a class="link" href="#objects_without_statistics">Objects Without Statistics</a><a class="link" href="#tables_suffering_from_row_chaining_migration">Tables Suffering From Row Chaining/Migration</a><a class="link" href="#users_with_default_tablespace_defined_as_system">Users With Default Tablespace - (SYSTEM)</a><a class="link" href="#users_with_default_temporary_tablespace_as_system">Users With Default Temp Tablespace - (SYSTEM)</a>
<a class="link" href="#objects_in_the_system_tablespace">Objects in the SYSTEM Tablespace</a><a class="link" href="#dba_recycle_bin">Recycle Bin</a><a class="link" href="#">
</a>
<a class="link" href="#">
</a>
Online Analytical Processing - (OLAP)
<a class="link" href="#dba_dimensions">Dimensions</a><a class="link" href="#dba_dimension_levels">Dimension Levels</a><a class="link" href="#dba_dimension_attributes">Dimension Attributes</a><a class="link" href="#dba_dimension_hierarchies">Dimension Hierarchies</a>
<a class="link" href="#dba_cubes">Cubes</a><a class="link" href="#dba_olap_materialized_views">Materialized Views</a><a class="link" href="#dba_olap_materialized_view_logs">Materialized View Logs</a><a class="link" href="#dba_olap_materialized_view_refresh_groups">Materialized View Refresh Groups</a>
Data Pump
<a class="link" href="#data_pump_jobs">Data Pump Jobs</a><a class="link" href="#data_pump_sessions">Data Pump Sessions</a><a class="link" href="#data_pump_job_progress">Data Pump Job Progress</a><a class="link" href="#">
</a>
Networking
<a class="link" href="#mts_dispatcher_statistics">MTS Dispatcher Statistics</a><a class="link" href="#mts_dispatcher_response_queue_wait_stats">MTS Dispatcher Response Queue Wait Stats</a><a class="link" href="#mts_shared_server_wait_statistics">MTS Shared Server Wait Statistics</a><a class="link" href="#">
</a>
Replication
<a class="link" href="#replication_summary">Replication Summary</a><a class="link" href="#deferred_transactions">Deferred Transactions</a><a class="link" href="#administrative_request_jobs">Administrative Request Jobs</a><a class="link" href="#rep_initialization_parameters">Initialization Parameters</a>
<a class="link" href="#schedule_purge_jobs">(Schedule) - Purge Jobs</a><a class="link" href="#schedule_push_jobs">(Schedule) - Push Jobs</a><a class="link" href="#schedule_refresh_jobs">(Schedule) - Refresh Jobs</a><a class="link" href="#multimaster_master_groups">(Multi-Master) - Master Groups</a>
<a class="link" href="#multimaster_master_groups_and_sites">(Multi-Master) - Master Groups and Sites</a><a class="link" href="#materialized_view_master_site_summary">(Materialized View) - Master Site Summary</a><a class="link" href="#materialized_view_master_site_logs">(Materialized View) - Master Site Logs</a><a class="link" href="#materialized_view_master_site_templates">(Materialized View) - Master Site Templates</a>
<a class="link" href="#materialized_view_summary">(Materialized View) - Summary</a><a class="link" href="#materialized_view_groups">(Materialized View) - Groups</a><a class="link" href="#materialized_view_materialized_views">(Materialized View) - Materialized Views</a><a class="link" href="#materialized_view_refresh_groups">(Materialized View) - Refresh Groups</a>
prompt <p>






-- +============================================================================+
-- |                                                                            |
-- |        <<<<<     Database and Instance Information    >>>>>                |
-- |                                                                            |
-- +============================================================================+


prompt
prompt
Database and Instance Information


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

prompt 
prompt <a name="report_header"></a>
prompt Report Header
prompt - - - - - - - - - - - - - - - - -
Report Name&FileName._&_dbname._&_spool_time..html
Snapshot Database Version&versionNumber
Run Date / Time / Timezone&_date_time_timezone
Host Name&_host_name
Database Name&_dbname
Database ID&_dbid
Global Database Name&_global_name
Platform Name / ID&_platform_name / &_platform_id
Clustered Database?&_cluster_database
Clustered Database Instances&_cluster_database_instances
Instance Name&_instance_name
Instance Number&_instance_number
Thread Number&_thread_number
Database Startup Time&_startup_time
Database Block Size&_blocksize
Report Run User&_reportRunUser
prompt
[<a class="noLink" href="#top">Top</a>]
<p>



-- SET TIMING ON




-- +----------------------------------------------------------------------------+
-- |                                 - VERSION -                                |
-- +----------------------------------------------------------------------------+

prompt <a name="version"></a>
prompt Version
CLEAR COLUMNS BREAKS COMPUTES

COLUMN banner   FORMAT a120   HEADING 'Banner'

SELECT * FROM v$version;

prompt
[<a class="noLink" href="#top">Top</a>]
<p>



-- +----------------------------------------------------------------------------+
-- |                                 - OPTIONS -                                |
-- +----------------------------------------------------------------------------+

prompt <a name="options"></a>
prompt Options
CLEAR COLUMNS BREAKS COMPUTES

COLUMN parameter      HEADING 'Option Name'      ENTMAP off
COLUMN value          HEADING 'Installed?'       ENTMAP off

SELECT
    DECODE(   value
            , 'FALSE'
            , '' || parameter || ''
            , '' || parameter || '') parameter
  , DECODE(   value
            , 'FALSE'
, '
' || value || '
' , '
' || value || '
' ) value
FROM v$option
ORDER BY parameter;

prompt
[<a class="noLink" href="#top">Top</a>]
<p>



-- +----------------------------------------------------------------------------+
-- |                         - DATABASE REGISTRY -                              |
-- +----------------------------------------------------------------------------+

prompt <a name="database_registry"></a>
prompt Database Registry
CLEAR COLUMNS BREAKS COMPUTES

COLUMN comp_id       FORMAT a75   HEADING 'Component ID'       ENTMAP off
COLUMN comp_name     FORMAT a75   HEADING 'Component Name'     ENTMAP off
COLUMN version                    HEADING 'Version'            ENTMAP off
COLUMN status        FORMAT a75   HEADING 'Status'             ENTMAP off
COLUMN modified      FORMAT a75   HEADING 'Modified'           ENTMAP off
COLUMN control                    HEADING 'Control'            ENTMAP off
COLUMN schema                     HEADING 'Schema'             ENTMAP off
COLUMN procedure                  HEADING 'Procedure'          ENTMAP off

SELECT
    '' || comp_id    || '' comp_id
, '
' || comp_name || '
' comp_name
  , version
  , DECODE(   status
, 'VALID', '
' || status || '
' , 'INVALID', '
' || status || '
' , '
' || status || '
' ) status , '
' || modified || '
' modified
  , control
  , schema
  , procedure
FROM dba_registry
ORDER BY comp_name;

prompt
[<a class="noLink" href="#top">Top</a>]
<p>



-- +----------------------------------------------------------------------------+
-- |                       - FEATURE USAGE STATISTICS -                         |
-- +----------------------------------------------------------------------------+

prompt <a name="feature_usage_statistics"></a>
prompt Feature Usage Statistics
CLEAR COLUMNS BREAKS COMPUTES

COLUMN feature_name          FORMAT a115    HEADING 'Feature|Name'
COLUMN version               FORMAT a75     HEADING 'Version'
COLUMN detected_usages       FORMAT a75     HEADING 'Detected|Usages'
COLUMN total_samples         FORMAT a75     HEADING 'Total|Samples'
COLUMN currently_used        FORMAT a60     HEADING 'Currently|Used'
COLUMN first_usage_date      FORMAT a95     HEADING 'First Usage|Date'
COLUMN last_usage_date       FORMAT a95     HEADING 'Last Usage|Date'
COLUMN last_sample_date      FORMAT a95     HEADING 'Last Sample|Date'
COLUMN next_sample_date      FORMAT a95     HEADING 'Next Sample|Date'

SELECT
'
' || name || '
' feature_name
  , DECODE(   detected_usages
            , 0
            , version 
            , '' || version || '')                  version
  , DECODE(   detected_usages
            , 0
, '
' || NVL(TO_CHAR(detected_usages), '
') || '
' , '
' || NVL(TO_CHAR(detected_usages), '
') || '
') detected_usages
  , DECODE(   detected_usages
            , 0
, '
' || NVL(TO_CHAR(total_samples), '
') || '
' , '
' || NVL(TO_CHAR(total_samples), '
') || '
') total_samples
  , DECODE(   detected_usages
            , 0
, '
' || NVL(currently_used, '
') || '
' , '
' || NVL(currently_used, '
') || '
') currently_used
  , DECODE(   detected_usages
            , 0
, '
' || NVL(TO_CHAR(first_usage_date, 'mm/dd/yyyy HH24:MI:SS'), '
') || '
' , '
' || NVL(TO_CHAR(first_usage_date, 'mm/dd/yyyy HH24:MI:SS'), '
') || '
') first_usage_date
  , DECODE(   detected_usages
            , 0
, '
' || NVL(TO_CHAR(last_usage_date, 'mm/dd/yyyy HH24:MI:SS'), '
') || '
' , '
' || NVL(TO_CHAR(last_usage_date, 'mm/dd/yyyy HH24:MI:SS'), '
') || '
') last_usage_date
  , DECODE(   detected_usages
            , 0
, '
' || NVL(TO_CHAR(last_sample_date, 'mm/dd/yyyy HH24:MI:SS'), '
') || '
' , '
' || NVL(TO_CHAR(last_sample_date, 'mm/dd/yyyy HH24:MI:SS'), '
') || '
') last_sample_date
  , DECODE(   detected_usages
            , 0
, '
' || NVL(TO_CHAR((last_sample_date+SAMPLE_INTERVAL/60/60/24), 'mm/dd/yyyy HH24:MI:SS'), '
') || '
' , '
' || NVL(TO_CHAR((last_sample_date+SAMPLE_INTERVAL/60/60/24), 'mm/dd/yyyy HH24:MI:SS'), '
') || '
') next_sample_date
FROM dba_feature_usage_statistics
ORDER BY name;

prompt
[<a class="noLink" href="#top">Top</a>]
<p>



-- +----------------------------------------------------------------------------+
-- |                      - HIGH WATER MARK STATISTICS -                        |
-- +----------------------------------------------------------------------------+

prompt <a name="high_water_mark_statistics"></a>
prompt High Water Mark Statistics
CLEAR COLUMNS BREAKS COMPUTES

COLUMN statistic_name        FORMAT a115                    HEADING 'Statistic Name'
COLUMN version               FORMAT a62                     HEADING 'Version'
COLUMN highwater             FORMAT 9,999,999,999,999,999   HEADING 'Highwater'
COLUMN last_value            FORMAT 9,999,999,999,999,999   HEADING 'Last Value'
COLUMN description           FORMAT a120                    HEADING 'Description'

SELECT
'
' || name || '
' statistic_name , '
' || version || '
' version
  , highwater                                                                     highwater
  , last_value                                                                    last_value
  , description                                                                   description
FROM dba_high_water_mark_statistics
ORDER BY name;

prompt
[<a class="noLink" href="#top">Top</a>]
<p>



-- +----------------------------------------------------------------------------+
-- |                           - INSTANCE OVERVIEW -                            |
-- +----------------------------------------------------------------------------+

prompt <a name="instance_overview"></a>
prompt Instance Overview
CLEAR COLUMNS BREAKS COMPUTES

COLUMN instance_name_print       FORMAT a75    HEADING 'Instance|Name'       ENTMAP off
COLUMN instance_number_print     FORMAT a75    HEADING 'Instance|Num'        ENTMAP off
COLUMN thread_number_print                     HEADING 'Thread|Num'          ENTMAP off
COLUMN host_name_print           FORMAT a75    HEADING 'Host|Name'           ENTMAP off
COLUMN version                                 HEADING 'Oracle|Version'      ENTMAP off
COLUMN start_time                FORMAT a75    HEADING 'Start|Time'          ENTMAP off
COLUMN uptime                                  HEADING 'Uptime|(in days)'    ENTMAP off
COLUMN parallel                  FORMAT a75    HEADING 'Parallel - (RAC)'    ENTMAP off
COLUMN instance_status           FORMAT a75    HEADING 'Instance|Status'     ENTMAP off
COLUMN database_status           FORMAT a75    HEADING 'Database|Status'     ENTMAP off
COLUMN logins                    FORMAT a75    HEADING 'Logins'              ENTMAP off
COLUMN archiver                  FORMAT a75    HEADING 'Archiver'            ENTMAP off

SELECT
'
' || instance_name || '
' instance_name_print , '
' || instance_number || '
' instance_number_print , '
' || thread# || '
' thread_number_print , '
' || host_name || '
' host_name_print , '
' || version || '
' version , '
' || TO_CHAR(startup_time,'mm/dd/yyyy HH24:MI:SS') || '
' start_time
  , ROUND(TO_CHAR(SYSDATE-startup_time), 2)                                                         uptime
, '
' || parallel || '
' parallel , '
' || status || '
' instance_status , '
' || logins || '
' logins
  , DECODE(   archiver
            , 'FAILED'
, '
' || archiver || '
' , '
' || archiver || '
') archiver
FROM gv$instance
ORDER BY instance_number;

prompt
[<a class="noLink" href="#top">Top</a>]
<p>



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

prompt <a name="database_overview"></a>
prompt Database Overview
CLEAR COLUMNS BREAKS COMPUTES

COLUMN name                            FORMAT a75     HEADING 'Database|Name'              ENTMAP off
COLUMN dbid                                           HEADING 'Database|ID'                ENTMAP off
COLUMN db_unique_name                                 HEADING 'Database|Unique Name'       ENTMAP off
COLUMN creation_date                                  HEADING 'Creation|Date'              ENTMAP off
COLUMN platform_name_print                            HEADING 'Platform|Name'              ENTMAP off
COLUMN current_scn                                    HEADING 'Current|SCN'                ENTMAP off
COLUMN log_mode                                       HEADING 'Log|Mode'                   ENTMAP off
COLUMN open_mode                                      HEADING 'Open|Mode'                  ENTMAP off
COLUMN force_logging                                  HEADING 'Force|Logging'              ENTMAP off
COLUMN flashback_on                                   HEADING 'Flashback|On?'              ENTMAP off
COLUMN controlfile_type                               HEADING 'Controlfile|Type'           ENTMAP off
COLUMN last_open_incarnation_number                   HEADING 'Last Open|Incarnation Num'  ENTMAP off

SELECT
'
' || name || '
' name , '
' || dbid || '
' dbid , '
' || db_unique_name || '
' db_unique_name , '
' || TO_CHAR(created, 'mm/dd/yyyy HH24:MI:SS') || '
' creation_date , '
' || platform_name || '
' platform_name_print , '
' || current_scn || '
' current_scn , '
' || log_mode || '
' log_mode , '
' || open_mode || '
' open_mode , '
' || force_logging || '
' force_logging , '
' || flashback_on || '
' flashback_on , '
' || controlfile_type || '
' controlfile_type , '
' || last_open_incarnation# || '
' last_open_incarnation_number
FROM v$database;

prompt
[<a class="noLink" href="#top">Top</a>]
<p>



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

prompt <a name="initialization_parameters"></a>
prompt Initialization Parameters
CLEAR COLUMNS BREAKS COMPUTES

COLUMN spfile  HEADING 'SPFILE Usage'

SELECT
  'This database '||
  DECODE(   (1-SIGN(1-SIGN(count(*) - 0)))
          , 1
          , 'IS'
          , 'IS NOT') ||
  ' 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'
            , '' || SUBSTR(p.name,0,512) || ''
            , '' || SUBSTR(p.name,0,512) || '' )    pname
  , DECODE(   p.isdefault
            , 'FALSE'
            , '' || i.instance_name || ''
            , i.instance_name )                                                         instance_name_print
  , DECODE(   p.isdefault
            , 'FALSE'
            , '' || SUBSTR(p.value,0,512) || ''
            , SUBSTR(p.value,0,512) ) value
  , DECODE(   p.isdefault
            , 'FALSE'
, '
' || p.isdefault || '
' , '
' || p.isdefault || '
') isdefault
  , DECODE(   p.isdefault
            , 'FALSE'
, '
' || p.issys_modifiable || '
' , '
' || p.issys_modifiable || '
') issys_modifiable
FROM
    gv$parameter p
  , gv$instance  i
WHERE
    p.inst_id = i.inst_id
ORDER BY
    p.name
  , i.instance_name;

prompt
[<a class="noLink" href="#top">Top</a>]
<p>



-- +----------------------------------------------------------------------------+
-- |                            - CONTROL FILES -                               |
-- +----------------------------------------------------------------------------+

prompt <a name="control_files"></a>
prompt Control Files
CLEAR COLUMNS BREAKS COMPUTES

COLUMN name                           HEADING 'Controlfile Name'  ENTMAP off
COLUMN status           FORMAT a75    HEADING 'Status'            ENTMAP off
COLUMN file_size        FORMAT a75    HEADING 'File Size'         ENTMAP off

SELECT
    '' || c.name || ''                                                                      name
  , DECODE(   c.status
            , NULL
, '
VALID
' , '
' || c.status || '
') status , '
' || TO_CHAR(block_size * file_size_blks, '999,999,999,999') || '
' file_size
FROM 
    v$controlfile c
ORDER BY
    c.name;

prompt
[<a class="noLink" href="#top">Top</a>]
<p>



-- +----------------------------------------------------------------------------+
-- |                         - CONTROL FILE RECORDS -                           |
-- +----------------------------------------------------------------------------+

prompt <a name="control_file_records"></a>
prompt Control File Records
CLEAR COLUMNS BREAKS COMPUTES

COLUMN type           FORMAT          a95    HEADING 'Record Section Type'      ENTMAP off
COLUMN record_size    FORMAT       999,999   HEADING 'Record Size|(in bytes)'   ENTMAP off
COLUMN records_total  FORMAT       999,999   HEADING 'Records Allocated'        ENTMAP off
COLUMN bytes_alloc    FORMAT   999,999,999   HEADING 'Bytes Allocated'          ENTMAP off
COLUMN records_used   FORMAT       999,999   HEADING 'Records Used'             ENTMAP off
COLUMN bytes_used     FORMAT   999,999,999   HEADING 'Bytes Used'               ENTMAP off
COLUMN pct_used       FORMAT          B999   HEADING '% Used'                   ENTMAP off
COLUMN first_index                           HEADING 'First Index'              ENTMAP off
COLUMN last_index                            HEADING 'Last Index'               ENTMAP off
COLUMN last_recid                            HEADING 'Last RecID'               ENTMAP off

BREAK ON report
COMPUTE sum LABEL 'Total: '   of record_size records_total bytes_alloc records_used bytes_used ON report
COMPUTE avg LABEL 'Average: ' of pct_used      ON report

SELECT
'
' || type || '
' type
  , record_size                                       record_size
  , records_total                                     records_total
  , (records_total * record_size)                     bytes_alloc
  , records_used                                      records_used
  , (records_used * record_size)                      bytes_used
  , NVL(records_used/records_total * 100, 0)          pct_used
  , first_index                                       first_index
  , last_index                                        last_index
  , last_recid                                        last_recid
FROM v$controlfile_record_section
ORDER BY type;

prompt
[<a class="noLink" href="#top">Top</a>]
<p>



-- +----------------------------------------------------------------------------+
-- |                          - ONLINE REDO LOGS -                              |
-- +----------------------------------------------------------------------------+

prompt <a name="online_redo_logs"></a>
prompt Online Redo Logs
CLEAR COLUMNS BREAKS COMPUTES

COLUMN instance_name_print  FORMAT a95                HEADING 'Instance Name'    ENTMAP off
COLUMN thread_number_print  FORMAT a95                HEADING 'Thread Number'    ENTMAP off
COLUMN groupno                                        HEADING 'Group Number'     ENTMAP off
COLUMN member                                         HEADING 'Member'           ENTMAP off
COLUMN redo_file_type       FORMAT a75                HEADING 'Redo Type'        ENTMAP off
COLUMN log_status           FORMAT a75                HEADING 'Log Status'       ENTMAP off
COLUMN bytes                FORMAT 999,999,999,999    HEADING 'Bytes'            ENTMAP off
COLUMN archived             FORMAT a75                HEADING 'Archived?'        ENTMAP off

BREAK ON report ON instance_name_print ON thread_number_print

SELECT
'
' || i.instance_name || '
' instance_name_print , '
' || i.thread# || '
' thread_number_print
  , f.group#                                                                                         groupno
  , '' || f.member || ''                                                                    member
  , f.type                                                                                           redo_file_type
  , DECODE(   l.status
            , 'CURRENT'
, '
' || l.status || '
' , '
' || l.status || '
') log_status
  , l.bytes                                                                                          bytes
, '
' || l.archived || '
' archived
FROM
    gv$logfile  f
  , gv$log      l
  , gv$instance i
WHERE
      f.group#  = l.group#
  AND l.thread# = i.thread#
  AND i.inst_id = f.inst_id
  AND f.inst_id = l.inst_id
ORDER BY
    i.instance_name
  , f.group#
  , f.member;


prompt
[<a class="noLink" href="#top">Top</a>]
<p>



-- +----------------------------------------------------------------------------+
-- |                         - REDO LOG SWITCHES -                              |
-- +----------------------------------------------------------------------------+

prompt <a name="redo_log_switches"></a>
prompt Redo Log Switches
CLEAR COLUMNS BREAKS COMPUTES

COLUMN DAY   FORMAT a75              HEADING 'Day / Time'  ENTMAP off
COLUMN H00   FORMAT 999,999B         HEADING '00'          ENTMAP off
COLUMN H01   FORMAT 999,999B         HEADING '01'          ENTMAP off
COLUMN H02   FORMAT 999,999B         HEADING '02'          ENTMAP off
COLUMN H03   FORMAT 999,999B         HEADING '03'          ENTMAP off
COLUMN H04   FORMAT 999,999B         HEADING '04'          ENTMAP off
COLUMN H05   FORMAT 999,999B         HEADING '05'          ENTMAP off
COLUMN H06   FORMAT 999,999B         HEADING '06'          ENTMAP off
COLUMN H07   FORMAT 999,999B         HEADING '07'          ENTMAP off
COLUMN H08   FORMAT 999,999B         HEADING '08'          ENTMAP off
COLUMN H09   FORMAT 999,999B         HEADING '09'          ENTMAP off
COLUMN H10   FORMAT 999,999B         HEADING '10'          ENTMAP off
COLUMN H11   FORMAT 999,999B         HEADING '11'          ENTMAP off
COLUMN H12   FORMAT 999,999B         HEADING '12'          ENTMAP off
COLUMN H13   FORMAT 999,999B         HEADING '13'          ENTMAP off
COLUMN H14   FORMAT 999,999B         HEADING '14'          ENTMAP off
COLUMN H15   FORMAT 999,999B         HEADING '15'          ENTMAP off
COLUMN H16   FORMAT 999,999B         HEADING '16'          ENTMAP off
COLUMN H17   FORMAT 999,999B         HEADING '17'          ENTMAP off
COLUMN H18   FORMAT 999,999B         HEADING '18'          ENTMAP off
COLUMN H19   FORMAT 999,999B         HEADING '19'          ENTMAP off
COLUMN H20   FORMAT 999,999B         HEADING '20'          ENTMAP off
COLUMN H21   FORMAT 999,999B         HEADING '21'          ENTMAP off
COLUMN H22   FORMAT 999,999B         HEADING '22'          ENTMAP off
COLUMN H23   FORMAT 999,999B         HEADING '23'          ENTMAP off
COLUMN TOTAL FORMAT 999,999,999      HEADING 'Total'       ENTMAP off

BREAK ON report
COMPUTE sum LABEL 'Total:' avg label 'Average:' OF total ON report

SELECT
'
' || SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH:MI:SS'),1,5) || '
' DAY
  , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'00',1,0)) H00
  , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'01',1,0)) H01
  , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'02',1,0)) H02
  , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'03',1,0)) H03
  , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'04',1,0)) H04
  , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'05',1,0)) H05
  , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'06',1,0)) H06
  , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'07',1,0)) H07
  , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'08',1,0)) H08
  , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'09',1,0)) H09
  , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'10',1,0)) H10
  , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'11',1,0)) H11
  , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'12',1,0)) H12
  , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'13',1,0)) H13
  , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'14',1,0)) H14
  , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'15',1,0)) H15
  , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'16',1,0)) H16
  , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'17',1,0)) H17
  , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'18',1,0)) H18
  , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'19',1,0)) H19
  , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'20',1,0)) H20
  , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'21',1,0)) H21
  , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'22',1,0)) H22
  , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'23',1,0)) H23
  , COUNT(*)                                                                      TOTAL
FROM
  v$log_history  a
GROUP BY SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH:MI:SS'),1,5)
ORDER BY SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH:MI:SS'),1,5)
/

prompt
[<a class="noLink" href="#top">Top</a>]
<p>



-- +----------------------------------------------------------------------------+
-- |                          - OUTSTANDING ALERTS -                            |
-- +----------------------------------------------------------------------------+

prompt <a name="outstanding_alerts"></a>
prompt Outstanding Alerts
CLEAR COLUMNS BREAKS COMPUTES

COLUMN severity          FORMAT a75       HEADING 'Severity'        ENTMAP off
COLUMN target_name       FORMAT a75       HEADING 'Target Name'     ENTMAP off
COLUMN target_type       FORMAT a75       HEADING 'Target Type'     ENTMAP off
COLUMN category          FORMAT a75       HEADING 'Category'        ENTMAP off
COLUMN name              FORMAT a75       HEADING 'Name'            ENTMAP off
COLUMN message           FORMAT a125      HEADING 'Message'         ENTMAP off
COLUMN alert_triggered   FORMAT a75       HEADING 'Alert Triggered' ENTMAP off

SELECT
    DECODE(   alert_state
            , 'Critical'
, '
' || alert_state || '
' , '
' || alert_state || '
') severity
  , target_name                                                   target_name
  , (CASE target_type
         WHEN 'oracle_listener' THEN 'Oracle Listener'
         WHEN 'rac_database'    THEN 'Cluster Database'
         WHEN 'cluster'         THEN 'Clusterware'
         WHEN 'host'            THEN 'Host'
         WHEN 'osm_instance'    THEN 'OSM Instance'
         WHEN 'oracle_database' THEN 'Database Instance'
         WHEN 'oracle_emd'      THEN 'Oracle EMD'
         WHEN 'oracle_emrep'    THEN 'Oracle EMREP'
     ELSE
          target_type
     END)                                                         target_type
  , metric_label                                                  category
  , column_label                                                  name
  , message                                                       message
, '
' || TO_CHAR(collection_timestamp, 'mm/dd/yyyy HH24:MI:SS') || '
' alert_triggered
FROM
    mgmt$alert_current
ORDER BY
    alert_state
  , collection_timestamp;

prompt
[<a class="noLink" href="#top">Top</a>]
<p>



-- +----------------------------------------------------------------------------+
-- |                          - STATISTICS LEVEL -                              |
-- +----------------------------------------------------------------------------+

prompt <a name="statistics_level"></a>
prompt Statistics Level
prompt "Automatic Database Management" was first introduced in Oracle10g where the Oracle database
prompt can now automatically perform many of the routine monitoring and administrative activities that had
prompt to be manually executed by the DBA in previous versions. Several of the new components that make
prompt up this new feature include (1) Automatic Workload Repository (2) Automatic Database Diagnostic
prompt Monitoring (3) Automatic Shared Memory Management and (4) Automatic UNDO Retention Tuning. All
prompt of these new components can only be enabled when the STATISTICS_LEVEL initialization parameter
prompt is set to TYPICAL (the default) or ALL. A value of BASIC turns off these components and disables
prompt all self-tuning capabilities of the database. The view V$STATISTICS_LEVEL shows the statistic 
prompt component, description, and at what level of the STATISTICS_LEVEL parameter the
prompt component is enabled.

CLEAR COLUMNS BREAKS COMPUTES

COLUMN instance_name_print     FORMAT a95    HEADING 'Instance Name'         ENTMAP off
COLUMN statistics_name         FORMAT a95    HEADING 'Statistics Name'       ENTMAP off
COLUMN session_status          FORMAT a95    HEADING 'Session Status'        ENTMAP off
COLUMN system_status           FORMAT a95    HEADING 'System Status'         ENTMAP off
COLUMN activation_level        FORMAT a95    HEADING 'Activation Level'      ENTMAP off
COLUMN statistics_view_name    FORMAT a95    HEADING 'Statistics View Name'  ENTMAP off
COLUMN session_settable        FORMAT a95    HEADING 'Session Settable?'     ENTMAP off

BREAK ON report ON instance_name_print

SELECT
'
' || i.instance_name || '
' instance_name_print , '
' || s.statistics_name || '
' statistics_name
  , DECODE(   s.session_status
            , 'ENABLED'
, '
' || s.session_status || '
' , '
' || s.session_status || '
') session_status
  , DECODE(   s.system_status
            , 'ENABLED'
, '
' || s.system_status || '
' , '
' || s.system_status || '
') system_status
  , (CASE s.activation_level
WHEN 'TYPICAL' THEN '
' || s.activation_level || '
' WHEN 'ALL' THEN '
' || s.activation_level || '
' WHEN 'BASIC' THEN '
' || s.activation_level || '
'
     ELSE
'
' || s.activation_level || '
'
     END)                                                      activation_level
  , s.statistics_view_name                                     statistics_view_name
, '
' || s.session_settable || '
' session_settable
FROM
    gv$statistics_level s
  , gv$instance  i
WHERE
      s.inst_id = i.inst_id
ORDER BY
    i.instance_name
  , s.statistics_name;

prompt
[<a class="noLink" href="#top">Top</a>]
<p>




-- +============================================================================+
-- |                                                                            |
-- |                  <<<<<     SCHEDULER / JOBS     >>>>>                      |
-- |                                                                            |
-- +============================================================================+


prompt
prompt
Scheduler / Jobs


-- +----------------------------------------------------------------------------+
-- |                                 - JOBS -                                   |
-- +----------------------------------------------------------------------------+

prompt <a name="jobs"></a>
prompt Jobs
CLEAR COLUMNS BREAKS COMPUTES

COLUMN job_id     FORMAT a75             HEADING 'Job ID'           ENTMAP off
COLUMN username   FORMAT a75             HEADING 'User'             ENTMAP off
COLUMN what       FORMAT a175            HEADING 'What'             ENTMAP off
COLUMN next_date  FORMAT a110            HEADING 'Next Run Date'    ENTMAP off
COLUMN interval   FORMAT a75             HEADING 'Interval'         ENTMAP off
COLUMN last_date  FORMAT a110            HEADING 'Last Run Date'    ENTMAP off
COLUMN failures   FORMAT a75             HEADING 'Failures'         ENTMAP off
COLUMN broken     FORMAT a75             HEADING 'Broken?'          ENTMAP off

SELECT
    DECODE(   broken
            , 'Y'
, '
' || job || '
' , '
' || job || '
') job_id
  , DECODE(   broken
            , 'Y'
            , '' || log_user || ''
            , log_user )    username
  , DECODE(   broken
            , 'Y'
            , '' || what || ''
            , what )        what
  , DECODE(   broken
            , 'Y'
, '
' || NVL(TO_CHAR(next_date, 'mm/dd/yyyy HH24:MI:SS'), '
') || '
' , '
' || NVL(TO_CHAR(next_date, 'mm/dd/yyyy HH24:MI:SS'), '
') || '
') next_date
  , DECODE(   broken
            , 'Y'
            , '' || interval || ''
            , interval )    interval
  , DECODE(   broken
            , 'Y'
, '
' || NVL(TO_CHAR(last_date, 'mm/dd/yyyy HH24:MI:SS'), '
') || '
' , '
' || NVL(TO_CHAR(last_date, 'mm/dd/yyyy HH24:MI:SS'), '
') || '
') last_date
  , DECODE(   broken
            , 'Y'
, '
' || NVL(failures, 0) || '
' , '
' || NVL(failures, 0) || '
') failures
  , DECODE(   broken
            , 'Y'
, '
' || broken || '
' , '
' || broken || '
') broken
FROM
    dba_jobs
ORDER BY
    job;

prompt
[<a class="noLink" href="#top">Top</a>]
<p>




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


prompt
prompt
Storage


-- +----------------------------------------------------------------------------+
-- |                            - TABLESPACES -                                 |
-- +----------------------------------------------------------------------------+

prompt <a name="tablespaces"></a>
prompt Tablespaces
CLEAR COLUMNS BREAKS COMPUTES

COLUMN status                                  HEADING 'Status'            ENTMAP off
COLUMN name                                    HEADING 'Tablespace Name'   ENTMAP off
COLUMN type        FORMAT a12                  HEADING 'TS Type'           ENTMAP off
COLUMN extent_mgt  FORMAT a10                  HEADING 'Ext. Mgt.'         ENTMAP off
COLUMN segment_mgt FORMAT a9                   HEADING 'Seg. Mgt.'         ENTMAP off
COLUMN ts_size     FORMAT 999,999,999,999,999  HEADING 'Tablespace Size'   ENTMAP off
COLUMN free        FORMAT 999,999,999,999,999  HEADING 'Free (in bytes)'   ENTMAP off
COLUMN used        FORMAT 999,999,999,999,999  HEADING 'Used (in bytes)'   ENTMAP off
COLUMN pct_used                                HEADING 'Pct. Used'         ENTMAP off

BREAK ON report
COMPUTE SUM label 'Total:'   OF ts_size used free ON report

SELECT
    DECODE(   d.status
            , 'OFFLINE'
, '
' || d.status || '
' , '
' || d.status || '
') status
  , '' || d.tablespace_name || ''                               name
  , d.contents                                          type
  , d.extent_management                                 extent_mgt
  , d.segment_space_management                          segment_mgt
  , NVL(a.bytes, 0)                                     ts_size
  , NVL(f.bytes, 0)                                     free
  , NVL(a.bytes - NVL(f.bytes, 0), 0)                   used
, '
' ||
          DECODE (
              (1-SIGN(1-SIGN(TRUNC(NVL((a.bytes - NVL(f.bytes, 0)) / a.bytes * 100, 0)) - 90)))
            , 1
            , ''   || TO_CHAR(TRUNC(NVL((a.bytes - NVL(f.bytes, 0)) / a.bytes * 100, 0))) || ''
            , '' || TO_CHAR(TRUNC(NVL((a.bytes - NVL(f.bytes, 0)) / a.bytes * 100, 0))) || ''
          )
|| '
 %
' 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'
, '
' || d.status || '
' , '
' || d.status || '
') status
  , '' || d.tablespace_name  || ''                              name
  , d.contents                                   type
  , d.extent_management                          extent_mgt
  , d.segment_space_management                   segment_mgt
  , NVL(a.bytes, 0)                              ts_size
  , NVL(a.bytes - NVL(t.bytes,0), 0)             free
  , NVL(t.bytes, 0)                              used
, '
' ||
          DECODE (
              (1-SIGN(1-SIGN(TRUNC(NVL(t.bytes / a.bytes * 100, 0)) - 90)))
            , 1
            , ''   || TO_CHAR(TRUNC(NVL(t.bytes / a.bytes * 100, 0))) || ''
            , '' || TO_CHAR(TRUNC(NVL(t.bytes / a.bytes * 100, 0))) || ''
          )
|| '
 %
' 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
[<a class="noLink" href="#top">Top</a>]
<p>



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

prompt <a name="data_files"></a>
prompt Data Files
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 'Total: ' OF filesize ON report

SELECT /*+ ordered */
    '' || d.tablespace_name  || ''  tablespace
  , '' || d.file_name || ''                                    filename
  , d.bytes                                                             filesize
, '
' || NVL(d.autoextensible, '
') || '
' 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
    '' || d.tablespace_name || ''   tablespace 
  , '' || d.file_name  || ''                                   filename
  , d.bytes                                                             filesize
, '
' || NVL(d.autoextensible, '
') || '
' 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
    '[ ONLINE REDO LOG ]'
  , '' || a.member || ''
  , b.bytes
  , null
  , null
  , null
FROM
    v$logfile a
  , v$log b
WHERE
    a.group# = b.group#
UNION
SELECT
    '[ CONTROL FILE    ]'
  , '' || a.name || ''
  , null
  , null
  , null
  , null
FROM
    v$controlfile a
ORDER BY
    1
  , 2;

prompt
[<a class="noLink" href="#top">Top</a>]
<p>



-- +----------------------------------------------------------------------------+
-- |                          - DATABASE GROWTH -                               |
-- +----------------------------------------------------------------------------+

prompt <a name="database_growth"></a>
prompt Database Growth
CLEAR COLUMNS BREAKS COMPUTES

COLUMN month        FORMAT a75                  HEADING 'Month'
COLUMN growth       FORMAT 999,999,999,999,999  HEADING 'Growth (bytes)'

BREAK ON report
COMPUTE SUM label 'Total:' OF growth ON report

SELECT
'
' || TO_CHAR(creation_time, 'RRRR-MM') || '
' month
  , SUM(bytes)                        growth
FROM     sys.v_$datafile
GROUP BY TO_CHAR(creation_time, 'RRRR-MM')
ORDER BY TO_CHAR(creation_time, 'RRRR-MM');

prompt
[<a class="noLink" href="#top">Top</a>]
<p>



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

prompt <a name="tablespace_extents"></a>
prompt Tablespace Extents
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 'Total:' of largest_ext smallest_ext total_free pieces on report

SELECT 
    '' || tablespace_name || '' 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
[<a class="noLink" href="#top">Top</a>]
<p>



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

prompt <a name="tablespace_to_owner"></a>
prompt Tablespace to Owner
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 'Total: ' of seg_count bytes ON report

SELECT
    '' || tablespace_name || ''  tablespace_name
, '
' || owner || '
' owner , '
' || segment_type || '
' 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
[<a class="noLink" href="#top">Top</a>]
<p>



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

prompt <a name="owner_to_tablespace"></a>
prompt Owner to Tablespace
CLEAR COLUMNS BREAKS COMPUTES

COLUMN owner            FORMAT a75                  HEADING 'Owner'            ENTMAP off
COLUMN tablespace_name  FORMAT a75                  HEADING 'Tablespace Name'  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 owner
compute sum label 'Total: ' of seg_count bytes on report

SELECT
    ''  || owner           || '' owner
, '
' || tablespace_name || '
' tablespace_name , '
' || segment_type || '
' segment_type
  , sum(bytes)                                                       bytes
  , count(*)                                                         seg_count
FROM
    dba_segments
GROUP BY
    owner
  , tablespace_name
  , segment_type
ORDER BY
    owner
  , tablespace_name
  , segment_type;

prompt
[<a class="noLink" href="#top">Top</a>]
<p>




-- +============================================================================+
-- |                                                                            |
-- |                   <<<<<     UNDO Segments     >>>>>                        |
-- |                                                                            |
-- +============================================================================+


prompt
prompt
UNDO Segments


-- +----------------------------------------------------------------------------+
-- |                       - UNDO RETENTION PARAMETERS -                        |
-- +----------------------------------------------------------------------------+

prompt <a name="undo_retention_parameters"></a>
prompt UNDO Retention Parameters
prompt undo_retention is specified in minutes

CLEAR COLUMNS BREAKS COMPUTES

COLUMN instance_name_print   FORMAT a95    HEADING 'Instance Name'     ENTMAP off
COLUMN thread_number_print   FORMAT a95    HEADING 'Thread Number'     ENTMAP off
COLUMN name                  FORMAT a125   HEADING 'Name'              ENTMAP off
COLUMN value                               HEADING 'Value'             ENTMAP off

BREAK ON report ON instance_name_print ON thread_number_print

SELECT
'
' || i.instance_name || '
' instance_name_print , '
' || i.thread# || '
' thread_number_print , '
' || p.name || '
' name
  , (CASE p.name
WHEN 'undo_retention' THEN '
' || TO_CHAR(TO_NUMBER(p.value)/60, '999,999,999,999,999') || '
'
     ELSE
'
' || p.value || '
'
     END)                                                                                            value
FROM
    gv$parameter p
  , gv$instance  i
WHERE
      p.inst_id = i.inst_id
  AND p.name LIKE 'undo%'
ORDER BY
    i.instance_name
  , p.name;

prompt
[<a class="noLink" href="#top">Top</a>]
<p>



-- +----------------------------------------------------------------------------+
-- |                            - UNDO SEGMENTS -                               |
-- +----------------------------------------------------------------------------+

prompt <a name="undo_segments"></a>
prompt UNDO Segments
CLEAR COLUMNS BREAKS COMPUTES

COLUMN instance_name FORMAT a75              HEADING 'Instance Name'      ENTMAP off
COLUMN tablespace    FORMAT a85              HEADING 'Tablspace'          ENTMAP off
COLUMN roll_name                             HEADING 'UNDO Segment Name'  ENTMAP off
COLUMN in_extents                            HEADING 'Init/Next Extents'  ENTMAP off
COLUMN m_extents                             HEADING 'Min/Max Extents'    ENTMAP off
COLUMN status                                HEADING 'Status'             ENTMAP off
COLUMN wraps         FORMAT 999,999,999      HEADING 'Wraps'              ENTMAP off
COLUMN shrinks       FORMAT 999,999,999      HEADING 'Shrinks'            ENTMAP off
COLUMN opt           FORMAT 999,999,999,999  HEADING 'Opt. Size'          ENTMAP off
COLUMN bytes         FORMAT 999,999,999,999  HEADING 'Bytes'              ENTMAP off
COLUMN extents       FORMAT 999,999,999      HEADING 'Extents'            ENTMAP off

CLEAR COMPUTES BREAKS

BREAK ON report ON instance_name ON tablespace
-- COMPUTE sum LABEL 'Total:' OF bytes extents shrinks wraps ON report

SELECT
'
' || NVL(i.instance_name, '
') || '
' instance_name , '
' || a.tablespace_name || '
' tablespace , '
' || a.owner || '.' || a.segment_name || '
' roll_name , '
' ||
    TO_CHAR(a.initial_extent) || ' / ' ||
    TO_CHAR(a.next_extent)    ||
'
' in_extents , '
' ||
    TO_CHAR(a.min_extents)    || ' / ' ||
    TO_CHAR(a.max_extents)    ||
'
' m_extents
  , DECODE(   a.status
            , 'OFFLINE'
, '
' || a.status || '
' , '
' || a.status || '
') status
  , b.bytes                                   bytes
  , b.extents                                 extents
  , d.shrinks                                 shrinks
  , d.wraps                                   wraps
  , d.optsize                                 opt
FROM
    dba_rollback_segs a
  , dba_segments b
  , v$rollname c
  , v$rollstat d
  , gv$parameter p
  , gv$instance  i
WHERE
       a.segment_name  = b.segment_name
  AND  a.segment_name  = c.name (+)
  AND  c.usn           = d.usn (+)
  AND  p.name (+)      = 'undo_tablespace'
  AND  p.value (+)     = a.tablespace_name
  AND  p.inst_id       = i.inst_id (+)
ORDER BY
    a.tablespace_name
  , a.segment_name;

prompt
[<a class="noLink" href="#top">Top</a>]
<p>



-- +----------------------------------------------------------------------------+
-- |                        - UNDO SEGMENT CONTENTION -                         |
-- +----------------------------------------------------------------------------+

prompt <a name="undo_segment_contention"></a>
prompt UNDO Segment Contention
prompt UNDO statistics from V$ROLLSTAT - (ordered by waits)

CLEAR COLUMNS BREAKS COMPUTES

COLUMN roll_name                             HEADING 'UNDO Segment Name'   ENTMAP off
COLUMN gets             FORMAT 999,999,999   HEADING 'Gets'                ENTMAP off
COLUMN waits            FORMAT 999,999,999   HEADING 'Waits'               ENTMAP off
COLUMN immediate_misses FORMAT 999,999,999   HEADING 'Immediate Misses'    ENTMAP off
COLUMN hit_ratio                             HEADING 'Hit Ratio'           ENTMAP off

BREAK ON report
COMPUTE SUM label 'Total:' OF gets waits ON report

SELECT
    '' || b.name || ''  roll_name
  , gets                               gets
  , waits                              waits
, '
' || TO_CHAR(ROUND(((gets - waits)*100)/gets, 2)) || '%
' hit_ratio
FROM 
    sys.v_$rollstat a
  , sys.v_$rollname b
WHERE
    a.USN = b.USN
ORDER BY
    waits DESC;


prompt 
prompt Wait statistics

CLEAR COLUMNS BREAKS COMPUTES

COLUMN class                  HEADING 'Class'    
COLUMN ratio                  HEADING 'Wait Ratio'       

SELECT
    '' || w.class || ''                            class
, '
' || TO_CHAR(ROUND(100*(w.count/SUM(s.value)),8)) || '%
' ratio
FROM
    v$waitstat  w
  , v$sysstat   s
WHERE
      w.class IN (  'system undo header'
                  , 'system undo block'
                  , 'undo header'
                  , 'undo block'
                 )
  AND s.name IN ('db block gets', 'consistent gets')
GROUP BY
    w.class
  , w.count;


prompt
[<a class="noLink" href="#top">Top</a>]
<p>




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


prompt
prompt
Backups


-- +----------------------------------------------------------------------------+
-- |                           - RMAN BACKUP JOBS -                             |
-- +----------------------------------------------------------------------------+

prompt <a name="rman_backup_jobs"></a>
prompt RMAN Backup Jobs
prompt Last 10 RMAN backup jobs

CLEAR COLUMNS BREAKS COMPUTES

COLUMN backup_name           FORMAT a130   HEADING 'Backup Name'          ENTMAP off
COLUMN start_time            FORMAT a75    HEADING 'Start Time'           ENTMAP off
COLUMN elapsed_time          FORMAT a75    HEADING 'Elapsed Time'         ENTMAP off
COLUMN status                              HEADING 'Status'               ENTMAP off
COLUMN input_type                          HEADING 'Input Type'           ENTMAP off
COLUMN output_device_type                  HEADING 'Output Devices'       ENTMAP off
COLUMN input_size                          HEADING 'Input Size'           ENTMAP off
COLUMN output_size                         HEADING 'Output Size'          ENTMAP off
COLUMN output_rate_per_sec                 HEADING 'Output Rate Per Sec'  ENTMAP off

SELECT
'
' || r.command_id || '
' backup_name , '
' || TO_CHAR(r.start_time, 'mm/dd/yyyy HH24:MI:SS') || '
' start_time , '
' || r.time_taken_display || '
' elapsed_time
  , DECODE(   r.status
            , 'COMPLETED'
, '
' || r.status || '
'
            , 'RUNNING'
, '
' || r.status || '
'
            , 'FAILED'
, '
' || r.status || '
' , '
' || r.status || '
'
    )                                                                                       status
  , r.input_type                                                                            input_type
  , r.output_device_type                                                                    output_device_type
, '
' || r.input_bytes_display || '
' input_size , '
' || r.output_bytes_display || '
' output_size , '
' || r.output_bytes_per_sec_display || '
' 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
[<a class="noLink" href="#top">Top</a>]
<p>



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

prompt <a name="rman_configuration"></a>
prompt RMAN Configuration
prompt All non-default RMAN configuration settings

CLEAR COLUMNS BREAKS COMPUTES

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

SELECT
'
' || name || '
' name
  , value
FROM
    v$rman_configuration
ORDER BY
    name;

prompt
[<a class="noLink" href="#top">Top</a>]
<p>



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

prompt <a name="rman_backup_sets"></a>
prompt RMAN Backup Sets
prompt Available backup sets contained in the control file including available and expired backup sets

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 'Total:' OF pieces elapsed_seconds ON report

SELECT
'
' || bs.recid || '
' bs_key
  , DECODE(backup_type
, 'L', '
Archived Redo Logs
' , 'D', '
Datafile Full Backup
' , 'I', '
Incremental Backup
') backup_type , '
' || device_type || '
' device_type , '
' || DECODE(bs.controlfile_included, 'NO', '-', bs.controlfile_included) || '
' controlfile_included , '
' || NVL(sp.spfile_included, '-') || '
' spfile_included
  , bs.incremental_level                                                                                      incremental_level
  , bs.pieces                                                                                                 pieces
, '
' || TO_CHAR(bs.start_time, 'mm/dd/yyyy HH24:MI:SS') || '
' start_time , '
' || TO_CHAR(bs.completion_time, 'mm/dd/yyyy HH24:MI:SS') || '
' completion_time
  , bs.elapsed_seconds                                                                                        elapsed_seconds
  , bp.tag                                                                                                    tag
  , bs.block_size                                                                                             block_size
, '
' || bs.keep || '
' keep , '
' || NVL(TO_CHAR(bs.keep_until, 'mm/dd/yyyy HH24:MI:SS'), '
') || '
' 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
[<a class="noLink" href="#top">Top</a>]
<p>



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

prompt <a name="rman_backup_pieces"></a>
prompt RMAN Backup Pieces
prompt Available backup pieces contained in the control file including available and expired backup sets

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
'
' || bs.recid || '
' bs_key
  , bp.piece#                                                                                          piece#
  , bp.copy#                                                                                           copy#
  , bp.recid                                                                                           bp_key
  , DECODE(   status
, 'A', '
Available
' , 'D', '
Deleted
' , 'X', '
Expired
') status
  , handle                                                                                             handle
, '
' || TO_CHAR(bp.start_time, 'mm/dd/yyyy HH24:MI:SS') || '
' start_time , '
' || TO_CHAR(bp.completion_time, 'mm/dd/yyyy HH24:MI:SS') || '
' 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
[<a class="noLink" href="#top">Top</a>]
<p>



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

prompt <a name="rman_backup_control_files"></a>
prompt RMAN Backup Control Files
prompt Available automatic control files within all available (and expired) backup sets

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
'
' || bs.recid || '
' bs_key
  , bp.piece#                                                                                       piece#
  , bp.copy#                                                                                        copy#
  , bp.recid                                                                                        bp_key
, '
' ||
    DECODE(bs.controlfile_included, 'NO', '-', bs.controlfile_included)  ||
'
' controlfile_included
  , DECODE(   status
, 'A', '
Available
' , 'D', '
Deleted
' , 'X', '
Expired
') 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
[<a class="noLink" href="#top">Top</a>]
<p>



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

prompt <a name="rman_backup_spfile"></a>
prompt RMAN Backup SPFILE
prompt Available automatic SPFILE backups within all available (and expired) backup sets

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
'
' || bs.recid || '
' bs_key
  , bp.piece#                                                                                       piece#
  , bp.copy#                                                                                        copy#
  , bp.recid                                                                                        bp_key
, '
' ||
    NVL(sp.spfile_included, '-')                     ||
'
' spfile_included
  , DECODE(   status
, 'A', '
Available
' , 'D', '
Deleted
' , 'X', '
Expired
') 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
[<a class="noLink" href="#top">Top</a>]
<p>



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

prompt <a name="archiving_mode"></a>
prompt Archiving Mode
CLEAR COLUMNS BREAKS COMPUTES

COLUMN db_log_mode                  FORMAT a95                HEADING 'Database|Log Mode'             ENTMAP off
COLUMN log_archive_start            FORMAT a95                HEADING 'Automatic|Archival'            ENTMAP off
COLUMN oldest_online_log_sequence   FORMAT 999999999999999    HEADING 'Oldest Online |Log Sequence'   ENTMAP off
COLUMN current_log_seq              FORMAT 999999999999999    HEADING 'Current |Log Sequence'         ENTMAP off

SELECT
'
' || d.log_mode || '
' db_log_mode , '
' || p.log_archive_start || '
' log_archive_start
  , c.current_log_seq                                   current_log_seq
  , o.oldest_online_log_sequence                        oldest_online_log_sequence
FROM
    (select
         DECODE(   log_mode
                 , 'ARCHIVELOG', 'Archive Mode'
                 , 'NOARCHIVELOG', 'No Archive Mode'
                 , log_mode
         )   log_mode
     from v$database
    ) d
  , (select
         DECODE(   log_mode
                 , 'ARCHIVELOG', 'Enabled'
                 , 'NOARCHIVELOG', 'Disabled')   log_archive_start
     from v$database
    ) p
  , (select a.sequence#   current_log_seq
     from   v$log a
     where  a.status = 'CURRENT'
       and thread# = &_thread_number
    ) c
  , (select min(a.sequence#) oldest_online_log_sequence
     from   v$log a
     where  thread# = &_thread_number
    ) o
/


prompt
[<a class="noLink" href="#top">Top</a>]
<p>



-- +----------------------------------------------------------------------------+
-- |                         - ARCHIVE DESTINATIONS -                           |
-- +----------------------------------------------------------------------------+

prompt <a name="archive_destinations"></a>
prompt Archive Destinations
CLEAR COLUMNS BREAKS COMPUTES

COLUMN dest_id                                                HEADING 'Destination|ID'            ENTMAP off
COLUMN dest_name                                              HEADING 'Destination|Name'          ENTMAP off
COLUMN destination                                            HEADING 'Destination'               ENTMAP off
COLUMN status                                                 HEADING 'Status'                    ENTMAP off
COLUMN schedule                                               HEADING 'Schedule'                  ENTMAP off
COLUMN archiver                                               HEADING 'Archiver'                  ENTMAP off
COLUMN log_sequence                 FORMAT 999999999999999    HEADING 'Current Log|Sequence'      ENTMAP off

SELECT
'
' || a.dest_id || '
' dest_id
  , a.dest_name                               dest_name
  , a.destination                             destination
  , DECODE(   a.status
, 'VALID', '
' || status || '
' , 'INACTIVE', '
' || status || '
' , '
' || status || '
' ) status
  , DECODE(   a.schedule
, 'ACTIVE', '
' || schedule || '
' , 'INACTIVE', '
' || schedule || '
' , '
' || schedule || '
' ) schedule
  , a.archiver                                archiver
  , a.log_sequence                            log_sequence
FROM
    v$archive_dest a
ORDER BY
    a.dest_id
/


prompt
[<a class="noLink" href="#top">Top</a>]
<p>



-- +----------------------------------------------------------------------------+
-- |                    - ARCHIVING INSTANCE PARAMETERS -                       |
-- +----------------------------------------------------------------------------+

prompt <a name="archiving_instance_parameters"></a>
prompt Archiving Instance Parameters
CLEAR COLUMNS BREAKS COMPUTES

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

SELECT
    '' || a.name || ''    name
  , a.value                                                   value
FROM
    v$parameter a
WHERE
    a.name like 'log_%'
ORDER BY
    a.name;

prompt
[<a class="noLink" href="#top">Top</a>]
<p>



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

prompt <a name="archiving_history"></a>
prompt Archiving History
CLEAR COLUMNS BREAKS COMPUTES

COLUMN thread#          FORMAT a79                   HEADING 'Thread#'           ENTMAP off
COLUMN sequence#        FORMAT a79                   HEADING 'Sequence#'         ENTMAP off
COLUMN name                                          HEADING 'Name'              ENTMAP off
COLUMN first_change#                                 HEADING 'First|Change #'    ENTMAP off
COLUMN first_time       FORMAT a75                   HEADING 'First|Time'        ENTMAP off
COLUMN next_change#                                  HEADING 'Next|Change #'     ENTMAP off
COLUMN next_time        FORMAT a75                   HEADING 'Next|Time'         ENTMAP off
COLUMN log_size         FORMAT 999,999,999,999,999   HEADING 'Size (in bytes)'   ENTMAP off
COLUMN archived         FORMAT a31                   HEADING 'Archived?'         ENTMAP off
COLUMN applied          FORMAT a31                   HEADING 'Applied?'          ENTMAP off
COLUMN deleted          FORMAT a31                   HEADING 'Deleted?'          ENTMAP off
COLUMN status           FORMAT a75                   HEADING 'Status'            ENTMAP off

BREAK ON report ON thread#

SELECT
'
' || thread# || '
' thread# , '
' || sequence# || '
' sequence#
  , name
  , first_change#
, '
' || TO_CHAR(first_time, 'mm/dd/yyyy HH24:MI:SS') || '
' first_time
  , next_change#
, '
' || TO_CHAR(next_time, 'mm/dd/yyyy HH24:MI:SS') || '
' next_time
  , (blocks * block_size)                            log_size
, '
' || archived || '
' archived , '
' || applied || '
' applied , '
' || deleted || '
' deleted
  , DECODE(   status
, 'A', '
Available
' , 'D', '
Deleted
' , 'U', '
Unavailable
' , 'X', '
Expired
'
    ) status
FROM
    v$archived_log
WHERE
    status in ('A')
ORDER BY
    thread#
  , sequence#;

prompt
[<a class="noLink" href="#top">Top</a>]
<p>



-- +----------------------------------------------------------------------------+
-- |                     - FLASH RECOVERY AREA PARAMETERS -                     |
-- +----------------------------------------------------------------------------+

prompt <a name="flash_recovery_area_parameters"></a>
prompt Flash Recovery Area Parameters
prompt db_recovery_file_dest_size is specified in bytes

CLEAR COLUMNS BREAKS COMPUTES

COLUMN instance_name_print   FORMAT a95    HEADING 'Instance Name'     ENTMAP off
COLUMN thread_number_print   FORMAT a95    HEADING 'Thread Number'     ENTMAP off
COLUMN name                  FORMAT a125   HEADING 'Name'              ENTMAP off
COLUMN value                               HEADING 'Value'             ENTMAP off

BREAK ON report ON instance_name_print ON thread_number_print

SELECT
'
' || i.instance_name || '
' instance_name_print , '
' || i.thread# || '
' thread_number_print , '
' || p.name || '
' name
  , (CASE p.name
WHEN 'db_recovery_file_dest_size' THEN '
' || TO_CHAR(p.value, '999,999,999,999,999') || '
'
     ELSE
'
' || NVL(p.value, '(null)') || '
'
     END)                                                                                            value
FROM
    gv$parameter p
  , gv$instance  i
WHERE
      p.inst_id = i.inst_id
  AND p.name IN ('db_recovery_file_dest_size', 'db_recovery_file_dest')
ORDER BY
    1
  , 3;

prompt
[<a class="noLink" href="#top">Top</a>]
<p>



-- +----------------------------------------------------------------------------+
-- |                      - FLASH RECOVERY AREA STATUS -                        |
-- +----------------------------------------------------------------------------+

prompt <a name="flash_recovery_area_status"></a>
prompt Flash Recovery Area Status
prompt Current location, disk quota, space in use, space reclaimable by deleting files, and number of files in the Flash Recovery Area

CLEAR COLUMNS BREAKS COMPUTES

COLUMN name               FORMAT a75                  HEADING 'Name'               ENTMAP off
COLUMN space_limit        FORMAT 99,999,999,999,999   HEADING 'Space Limit'        ENTMAP off
COLUMN space_used         FORMAT 99,999,999,999,999   HEADING 'Space Used'         ENTMAP off
COLUMN space_used_pct     FORMAT 999.99               HEADING '% Used'             ENTMAP off
COLUMN space_reclaimable  FORMAT 99,999,999,999,999   HEADING 'Space Reclaimable'  ENTMAP off
COLUMN pct_reclaimable    FORMAT 999.99               HEADING '% Reclaimable'      ENTMAP off
COLUMN number_of_files    FORMAT 999,999              HEADING 'Number of Files'    ENTMAP off

SELECT
'
' || name || '
' name
  , space_limit                                                                       space_limit
  , space_used                                                                        space_used
  , ROUND((space_used / DECODE(space_limit, 0, 0.000001, space_limit))*100, 2)        space_used_pct
  , space_reclaimable                                                                 space_reclaimable
  , ROUND((space_reclaimable / DECODE(space_limit, 0, 0.000001, space_limit))*100, 2) pct_reclaimable
  , number_of_files                                                                   number_of_files
FROM
    v$recovery_file_dest
ORDER BY
    name;


CLEAR COLUMNS BREAKS COMPUTES

COLUMN file_type                  FORMAT a75     HEADING 'File Type'
COLUMN percent_space_used                        HEADING 'Percent Space Used'
COLUMN percent_space_reclaimable                 HEADING 'Percent Space Reclaimable'
COLUMN number_of_files            FORMAT 999,999 HEADING 'Number of Files'

SELECT
'
' || file_type || '
' file_type
  , percent_space_used                                                                  percent_space_used
  , percent_space_reclaimable                                                           percent_space_reclaimable
  , number_of_files                                                                     number_of_files
FROM
    v$flash_recovery_area_usage;

prompt
[<a class="noLink" href="#top">Top</a>]
<p>




-- +============================================================================+
-- |                                                                            |
-- |               <<<<<     FLASHBACK TECHNOLOGIES     >>>>>                   |
-- |                                                                            |
-- +============================================================================+


prompt
prompt
Flashback Technologies


-- +----------------------------------------------------------------------------+
-- |                     - FLASHBACK DATABASE PARAMETERS -                      |
-- +----------------------------------------------------------------------------+

prompt <a name="flashback_database_parameters"></a>
prompt Flashback Database Parameters
prompt db_flashback_retention_target is specified in minutes
prompt db_recovery_file_dest_size is specified in bytes

CLEAR COLUMNS BREAKS COMPUTES

COLUMN instance_name_print   FORMAT a95    HEADING 'Instance Name'     ENTMAP off
COLUMN thread_number_print   FORMAT a95    HEADING 'Thread Number'     ENTMAP off
COLUMN name                  FORMAT a125   HEADING 'Name'              ENTMAP off
COLUMN value                               HEADING 'Value'             ENTMAP off

BREAK ON report ON instance_name_print ON thread_number_print

SELECT
'
' || i.instance_name || '
' instance_name_print , '
' || i.thread# || '
' thread_number_print , '
' || p.name || '
' name
  , (CASE p.name
WHEN 'db_recovery_file_dest_size' THEN '
' || TO_CHAR(p.value, '999,999,999,999,999') || '
' WHEN 'db_flashback_retention_target' THEN '
' || TO_CHAR(p.value, '999,999,999,999,999') || '
'
     ELSE
'
' || NVL(p.value, '(null)') || '
'
     END)                                                                                            value
FROM
    gv$parameter p
  , gv$instance  i
WHERE
      p.inst_id = i.inst_id
  AND p.name IN ('db_flashback_retention_target', 'db_recovery_file_dest_size', 'db_recovery_file_dest')
ORDER BY
    1
  , 3;

prompt
[<a class="noLink" href="#top">Top</a>]
<p>



-- +----------------------------------------------------------------------------+
-- |                       - FLASHBACK DATABASE STATUS -                        |
-- +----------------------------------------------------------------------------+

prompt <a name="flashback_database_status"></a>
prompt Flashback Database Status
CLEAR COLUMNS BREAKS COMPUTES

COLUMN dbid                                HEADING 'DB ID'              ENTMAP off
COLUMN name             FORMAT A75         HEADING 'DB Name'            ENTMAP off
COLUMN log_mode         FORMAT A75         HEADING 'Log Mode'           ENTMAP off
COLUMN flashback_on     FORMAT A75         HEADING 'Flashback DB On?'   ENTMAP off

SELECT
'
' || dbid || '
' dbid , '
' || name || '
' name , '
' || log_mode || '
' log_mode , '
' || flashback_on || '
' flashback_on
FROM v$database;

CLEAR COLUMNS BREAKS COMPUTES

COLUMN oldest_flashback_time    FORMAT a125               HEADING 'Oldest Flashback Time'     ENTMAP off
COLUMN oldest_flashback_scn                               HEADING 'Oldest Flashback SCN'      ENTMAP off
COLUMN retention_target         FORMAT 999,999            HEADING 'Retention Target (min)'    ENTMAP off
COLUMN retention_target_hours   FORMAT 999,999            HEADING 'Retention Target (hour)'   ENTMAP off
COLUMN flashback_size           FORMAT 9,999,999,999,999  HEADING 'Flashback Size'            ENTMAP off
COLUMN estimated_flashback_size FORMAT 9,999,999,999,999  HEADING 'Estimated Flashback Size'  ENTMAP off

SELECT
'
' || TO_CHAR(oldest_flashback_time,'mm/dd/yyyy HH24:MI:SS') || '
' oldest_flashback_time
  , oldest_flashback_scn             oldest_flashback_scn
  , retention_target                 retention_target
  , retention_target/60              retention_target_hours
  , flashback_size                   flashback_size
  , estimated_flashback_size         estimated_flashback_size
FROM
    v$flashback_database_log
ORDER BY
    1;

prompt
[<a class="noLink" href="#top">Top</a>]
<p>



-- +----------------------------------------------------------------------------+
-- |                  - FLASHBACK DATABASE REDO TIME MATRIX -                   |
-- +----------------------------------------------------------------------------+

prompt <a name="flashback_database_redo_time_matrix"></a>
prompt Flashback Database Redo Time Matrix
CLEAR COLUMNS BREAKS COMPUTES

COLUMN begin_time               FORMAT a75                HEADING 'Begin Time'               ENTMAP off
COLUMN end_time                 FORMAT a75                HEADING 'End Time'                 ENTMAP off
COLUMN flashback_data           FORMAT 9,999,999,999,999  HEADING 'Flashback Data'           ENTMAP off
COLUMN db_data                  FORMAT 9,999,999,999,999  HEADING 'DB Data'                  ENTMAP off
COLUMN redo_data                FORMAT 9,999,999,999,999  HEADING 'Redo Data'                ENTMAP off
COLUMN estimated_flashback_size FORMAT 9,999,999,999,999  HEADING 'Estimated Flashback Size' ENTMAP off

SELECT
'
' || TO_CHAR(begin_time,'mm/dd/yyyy HH24:MI:SS') || '
' begin_time , '
' || TO_CHAR(end_time,'mm/dd/yyyy HH24:MI:SS') || '
' end_time
  , flashback_data
  , db_data
  , redo_data
  , estimated_flashback_size
FROM
    v$flashback_database_stat
ORDER BY
   begin_time;

prompt
[<a class="noLink" href="#top">Top</a>]
<p>




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


prompt
prompt
Performance


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

prompt <a name="sga_information"></a>
prompt SGA Information
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 'Total:' OF value ON instance_name

SELECT
'
' || i.instance_name || '
' instance_name , '
' || s.name || '
' 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
[<a class="noLink" href="#top">Top</a>]
<p>



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

prompt <a name="sga_target_advice"></a>
prompt SGA Target Advice
prompt Modify the SGA_TARGET parameter (up to the size of the SGA_MAX_SIZE, if necessary) to reduce
prompt the number of "Estimated Physical Reads".

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
'
' || i.instance_name || '
' instance_name
  , p.name    name
  , (CASE p.name
WHEN 'sga_max_size' THEN '
' || TO_CHAR(p.value, '999,999,999,999,999') || '
' WHEN 'sga_target' THEN '
' || TO_CHAR(p.value, '999,999,999,999,999') || '
'
     ELSE
'
' || p.value || '
'
     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
'
' || i.instance_name || '
' 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
[<a class="noLink" href="#top">Top</a>]
<p>



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

prompt <a name="sga_asmm_dynamic_components"></a>
prompt SGA (ASMM) Dynamic Components
prompt Provides a summary report of all dynamic components as part of the Automatic Shared Memory
prompt Management (ASMM) configuration. This will display the total real memory allocation for the current
prompt SGA from the V$SGA_DYNAMIC_COMPONENTS view, which contains both manual and autotuned SGA components.
prompt As with the other manageability features of Oracle Database 10g, ASMM requires you to set the 
prompt STATISTICS_LEVEL parameter to at least TYPICAL (the default) before attempting to enable ASMM. ASMM
prompt can be enabled by setting SGA_TARGET to a nonzero value in the initialization parameter file (pfile/spfile).

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
'
' || i.instance_name || '
' 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
, '
' || NVL(TO_CHAR(sdc.last_oper_time, 'mm/dd/yyyy HH24:MI:SS'), '
') || '
' last_oper_time
  , sdc.granule_size
FROM
    gv$sga_dynamic_components sdc
  , gv$instance  i
ORDER BY
    i.instance_name
  , sdc.component DESC;

prompt
[<a class="noLink" href="#top">Top</a>]
<p>



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

prompt <a name="pga_target_advice"></a>
prompt PGA Target Advice
prompt The V$PGA_TARGET_ADVICE view predicts how the statistics cache hit percentage and over
prompt allocation count in V$PGASTAT will be impacted if you change the value of the
prompt initialization parameter PGA_AGGREGATE_TARGET. When you set the PGA_AGGREGATE_TARGET and
prompt WORKAREA_SIZE_POLICY to AUTO then the *_AREA_SIZE parameter are automatically ignored and
prompt Oracle will automatically use the computed value for these parameters. Use the results from
prompt the query below to adequately set the initialization parameter PGA_AGGREGATE_TARGET as to avoid
prompt any over allocation. If column ESTD_OVERALLOCATION_COUNT in the V$PGA_TARGET_ADVICE
prompt view (below) is nonzero, it indicates that PGA_AGGREGATE_TARGET is too small to even
prompt meet the minimum PGA memory needs. If PGA_AGGREGATE_TARGET is set within the over
prompt allocation zone, the memory manager will over-allocate memory and actual PGA memory
prompt consumed will be more than the limit you set. It is therefore meaningless to set a
prompt value of PGA_AGGREGATE_TARGET in that zone. After eliminating over-allocations, the
prompt goal is to maximize the PGA cache hit percentage, based on your response-time requirement
prompt and memory constraints.

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
'
' || i.instance_name || '
' instance_name
  , p.name    name
  , (CASE p.name
WHEN 'pga_aggregate_target' THEN '
' || TO_CHAR(p.value, '999,999,999,999,999') || '
'
     ELSE
'
' || p.value || '
'
     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
'
' || i.instance_name || '
' 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
[<a class="noLink" href="#top">Top</a>]
<p>



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

prompt <a name="file_io_statistics"></a>
prompt File I/O Statistics
prompt Ordered by "Physical Reads" since last startup of the Oracle instance

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 'Total: ' OF phyrds phywrts total_io ON report

SELECT
    '' || df.tablespace_name || ''                      tablespace_name
  , df.file_name                             fname
  , fs.phyrds                                phyrds
, '
' || ROUND((fs.phyrds * 100) / (fst.pr + tst.pr), 2) || '%
' read_pct
  , fs.phywrts                               phywrts
, '
' || ROUND((fs.phywrts * 100) / (fst.pw + tst.pw), 2) || '%
' 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
    '' || tf.tablespace_name || ''                     tablespace_name
  , tf.file_name                           fname
  , ts.phyrds                              phyrds
, '
' || ROUND((ts.phyrds * 100) / (fst.pr + tst.pr), 2) || '%
' read_pct
  , ts.phywrts                             phywrts
, '
' || ROUND((ts.phywrts * 100) / (fst.pw + tst.pw), 2) || '%
' 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
[<a class="noLink" href="#top">Top</a>]
<p>



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

prompt <a name="file_io_timings"></a>
prompt File I/O Timings
prompt Average time (in milliseconds) for an I/O call per datafile since last startup of the Oracle instance - (ordered by Physical Reads)

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
(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
(milliseconds per write)' ENTMAP off BREAK ON REPORT COMPUTE sum LABEL 'Total: ' OF phyrds phywrts ON report COMPUTE avg LABEL 'Average: ' OF read_rate write_rate ON report SELECT '' || d.name || '' 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 '' || t.name || '' 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
[<a class="noLink" href="#top">Top</a>]
<p>



-- +----------------------------------------------------------------------------+
-- |                    - AVERAGE OVERALL I/O PER SECOND -                      |
-- +----------------------------------------------------------------------------+

prompt <a name="average_overall_io_per_sec"></a>
prompt Average Overall I/O per Second
prompt Average overall I/O calls (physical read/write calls) since last startup of the Oracle instance

CLEAR COLUMNS BREAKS COMPUTES

DECLARE

CURSOR get_file_io IS
  SELECT
      NVL(SUM(a.phyrds + a.phywrts), 0)  sum_datafile_io
    , TO_NUMBER(null)                    sum_tempfile_io
  FROM
      v$filestat a
  UNION
  SELECT
      TO_NUMBER(null)                    sum_datafile_io
    , NVL(SUM(b.phyrds + b.phywrts), 0)  sum_tempfile_io
  FROM
      v$tempstat b;

current_time           DATE;
elapsed_time_seconds   NUMBER;
sum_datafile_io        NUMBER;
sum_datafile_io2       NUMBER;
sum_tempfile_io        NUMBER;
sum_tempfile_io2       NUMBER;
total_io               NUMBER;
datafile_io_per_sec    NUMBER;
tempfile_io_per_sec    NUMBER;
total_io_per_sec       NUMBER;

BEGIN
    OPEN get_file_io;
    FOR i IN 1..2 LOOP
      FETCH get_file_io INTO sum_datafile_io, sum_tempfile_io;
      IF i = 1 THEN
        sum_datafile_io2 := sum_datafile_io;
      ELSE
        sum_tempfile_io2 := sum_tempfile_io;
      END IF;
    END LOOP;

    total_io := sum_datafile_io2 + sum_tempfile_io2;
    SELECT sysdate INTO current_time FROM dual;
    SELECT CEIL ((current_time - startup_time)*(60*60*24)) INTO elapsed_time_seconds FROM v$instance;

    datafile_io_per_sec := sum_datafile_io2/elapsed_time_seconds;
    tempfile_io_per_sec := sum_tempfile_io2/elapsed_time_seconds;
    total_io_per_sec    := total_io/elapsed_time_seconds;

DBMS_OUTPUT.PUT_LINE(''); DBMS_OUTPUT.PUT_LINE(''); DBMS_OUTPUT.PUT_LINE(''); DBMS_OUTPUT.PUT_LINE(''); DBMS_OUTPUT.PUT_LINE(''); DBMS_OUTPUT.PUT_LINE('
Elapsed Time (in seconds)' || TO_CHAR(elapsed_time_seconds, '9,999,999,999,999') || '
Datafile I/O Calls per Second' || TO_CHAR(datafile_io_per_sec, '9,999,999,999,999') || '
Tempfile I/O Calls per Second' || TO_CHAR(tempfile_io_per_sec, '9,999,999,999,999') || '
Total I/O Calls per Second' || TO_CHAR(total_io_per_sec, '9,999,999,999,999') || '
');
END;
/

prompt
[<a class="noLink" href="#top">Top</a>]
<p>



-- +----------------------------------------------------------------------------+
-- |                        - REDO LOG CONTENTION -                             |
-- +----------------------------------------------------------------------------+

prompt <a name="redo_log_contention"></a>
prompt Redo Log Contention
prompt All latches like redo% - (ordered by misses)

CLEAR COLUMNS BREAKS COMPUTES

COLUMN name             FORMAT a95                        HEADING 'Latch Name'
COLUMN gets             FORMAT 999,999,999,999,999,999    HEADING 'Gets'
COLUMN misses           FORMAT 999,999,999,999            HEADING 'Misses'
COLUMN sleeps           FORMAT 999,999,999,999            HEADING 'Sleeps'
COLUMN immediate_gets   FORMAT 999,999,999,999,999,999    HEADING 'Immediate Gets'
COLUMN immediate_misses FORMAT 999,999,999,999            HEADING 'Immediate Misses'

BREAK ON report
COMPUTE sum LABEL 'Total:' OF gets misses sleeps immediate_gets immediate_misses ON report

SELECT 
'
' || INITCAP(name) || '
' name
  , gets
  , misses
  , sleeps
  , immediate_gets
  , immediate_misses
FROM sys.v_$latch
WHERE name LIKE 'redo%'
ORDER BY 1;


prompt 
prompt System statistics like redo%

CLEAR COLUMNS BREAKS COMPUTES

COLUMN name    FORMAT a95                   HEADING 'Statistics Name'
COLUMN value   FORMAT 999,999,999,999,999   HEADING 'Value'

SELECT
'
' || INITCAP(name) || '
' name
  , value
FROM v$sysstat
WHERE name LIKE 'redo%'
ORDER BY 1;

prompt
[<a class="noLink" href="#top">Top</a>]
<p>



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

prompt <a name="full_table_scans"></a>
prompt Full Table Scans
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
, '
' || ROUND(100*a.value/DECODE((a.value+b.value),0,1,(a.value+b.value)),2) || '%
' 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
[<a class="noLink" href="#top">Top</a>]
<p>



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

prompt <a name="sorts"></a>
prompt Sorts
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
, '
' || ROUND(100*a.value/DECODE((a.value+b.value),0,1,(a.value+b.value)),2) || '%
' pct_disk_sorts
FROM
    v$sysstat  a
  , v$sysstat  b
WHERE
      a.name = 'sorts (disk)'
  AND b.name = 'sorts (memory)';

prompt
[<a class="noLink" href="#top">Top</a>]
<p>



-- +----------------------------------------------------------------------------+
-- |                               - OUTLINES -                                 |
-- +----------------------------------------------------------------------------+

prompt <a name="dba_outlines"></a>
prompt Outlines
CLEAR COLUMNS BREAKS COMPUTES

COLUMN category       FORMAT a125    HEADING 'Category'     ENTMAP off
COLUMN owner          FORMAT a125    HEADING 'Owner'        ENTMAP off
COLUMN name           FORMAT a125    HEADING 'Name'         ENTMAP off
COLUMN used                          HEADING 'Used?'        ENTMAP off
COLUMN timestamp      FORMAT a125    HEADING 'Time Stamp'   ENTMAP off
COLUMN version                       HEADING 'Version'      ENTMAP off
COLUMN sql_text                      HEADING 'SQL Text'     ENTMAP off

SELECT
'
' || category || '
' category
  , owner
  , name
  , used
, '
' || TO_CHAR(timestamp, 'mm/dd/yyyy HH24:MI:SS') || '
' timestamp
  , version
  , sql_text
FROM
    dba_outlines
ORDER BY
    category
  , owner
  , name;
  
prompt
[<a class="noLink" href="#top">Top</a>]
<p>



-- +----------------------------------------------------------------------------+
-- |                            - OUTLINE HINTS -                               |
-- +----------------------------------------------------------------------------+

prompt <a name="dba_outline_hints"></a>
prompt Outline Hints
CLEAR COLUMNS BREAKS COMPUTES

COLUMN category       FORMAT a125    HEADING 'Category'        ENTMAP off
COLUMN owner          FORMAT a125    HEADING 'Owner'           ENTMAP off
COLUMN name           FORMAT a125    HEADING 'Name'            ENTMAP off
COLUMN node                          HEADING 'Node'            ENTMAP off
COLUMN join_pos                      HEADING 'Join Position'   ENTMAP off
COLUMN hint                          HEADING 'Hint'            ENTMAP off

BREAK ON category ON owner ON name

SELECT
'
' || a.category || '
' category
  , a.owner                                           owner
  , a.name                                            name
, '
' || b.node || '
' node , '
' || b.join_pos || '
' join_pos
  , b.hint                                            hint
FROM
    dba_outlines       a
  , dba_outline_hints  b
WHERE
      a.owner = b.owner
  AND b.name  = b.name
ORDER BY
    category
  , owner
  , name;
  
prompt
[<a class="noLink" href="#top">Top</a>]
<p>



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

prompt <a name="sql_statements_with_most_buffer_gets"></a>
prompt SQL Statements With Most Buffer Gets
prompt Top 100 SQL statements with buffer gets greater than 1000

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 
    '' || UPPER(b.username) || '' 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 < 101
ORDER BY
    a.buffer_gets DESC;

prompt
[<a class="noLink" href="#top">Top</a>]
<p>



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

prompt <a name="sql_statements_with_most_disk_reads"></a>
prompt SQL Statements With Most Disk Reads
prompt Top 100 SQL statements with disk reads greater than 1000

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 
    '' || UPPER(b.username) || '' 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 < 101
ORDER BY
    a.disk_reads DESC;

prompt
[<a class="noLink" href="#top">Top</a>]
<p>




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


prompt
prompt
Automatic Workload Repository - (AWR)


-- +----------------------------------------------------------------------------+
-- |                   - WORKLOAD REPOSITORY INFORMATION -                      |
-- +----------------------------------------------------------------------------+

prompt <a name="awr_workload_repository_information"></a>
prompt Workload Repository Information
prompt Instances found in the "Workload Repository"
prompt The instance running this report (&_instance_name) is indicated in "GREEN"

CLEAR COLUMNS BREAKS COMPUTES

COLUMN dbbid          FORMAT a75           HEAD 'Database ID'      ENTMAP off
COLUMN dbb_name       FORMAT a75           HEAD 'Database Name'    ENTMAP off
COLUMN instt_name     FORMAT a75           HEAD 'Instance Name'    ENTMAP off
COLUMN instt_num      FORMAT 9999999999    HEAD 'Instance Number'  ENTMAP off
COLUMN host           FORMAT a75           HEAD 'Host'             ENTMAP off
COLUMN host_platform  FORMAT a125          HEAD 'Host Platform'    ENTMAP off

SELECT
    DISTINCT (CASE WHEN cd.dbid = wr.dbid
                        AND 
                        cd.name = wr.db_name
                        AND
                        ci.instance_number = wr.instance_number
                        AND
                        ci.instance_name = wr.instance_name
THEN '
' || wr.dbid || '
' ELSE '
' || wr.dbid || '
'
              END)                  dbbid
  , wr.db_name                      dbb_name
  , wr.instance_name                instt_name
  , wr.instance_number              instt_num
  , wr.host_name                    host
  , cd.platform_name                host_platform
FROM
    dba_hist_database_instance wr
  , v$database cd
  , v$instance ci
ORDER BY
    wr.instance_name;

prompt
[<a class="noLink" href="#top">Top</a>]
<p>


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

prompt <a name="awr_snapshot_settings"></a>
prompt AWR Snapshot Settings
prompt Use the DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS procedure to modify the interval
prompt of the snapshot generation and how long the snapshots are retained in the Workload Repository. The
prompt default interval is 60 minutes and can be set to a value between 10 minutes and 5,256,000 (1 year).
prompt The default retention period is 10,080 minutes (7 days) and can be set to a value between
prompt 1,440 minutes (1 day) and 52,560,000 minutes (100 years).

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
'
' || s.dbid || '
' 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
[<a class="noLink" href="#top">Top</a>]
<p>



-- +----------------------------------------------------------------------------+
-- |                           - AWR SNAPSHOT LIST -                            |
-- +----------------------------------------------------------------------------+

prompt <a name="awr_snapshot_list"></a>
prompt AWR Snapshot List
CLEAR COLUMNS BREAKS COMPUTES

COLUMN instance_name_print  FORMAT a75               HEADING 'Instance Name'          ENTMAP off
COLUMN snap_id              FORMAT a75               HEADING 'Snap ID'                ENTMAP off
COLUMN startup_time         FORMAT a75               HEADING 'Instance Startup Time'  ENTMAP off
COLUMN begin_interval_time  FORMAT a75               HEADING 'Begin Interval Time'    ENTMAP off
COLUMN end_interval_time    FORMAT a75               HEADING 'End Interval Time'      ENTMAP off
COLUMN elapsed_time         FORMAT 999,999,999.99    HEADING 'Elapsed Time (min)'     ENTMAP off
COLUMN db_time              FORMAT 999,999,999.99    HEADING 'DB Time (min)'          ENTMAP off
COLUMN pct_db_time          FORMAT a75               HEADING '% DB Time'              ENTMAP off
COLUMN cpu_time             FORMAT 999,999,999.99    HEADING 'CPU Time (min)'         ENTMAP off

BREAK ON instance_name_print ON startup_time

SELECT
'
' || i.instance_name || '
' instance_name_print , '
' || s.snap_id || '
' snap_id , '
' || TO_CHAR(s.startup_time, 'mm/dd/yyyy HH24:MI:SS') || '
' startup_time , '
' || TO_CHAR(s.begin_interval_time, 'mm/dd/yyyy HH24:MI:SS') || '
' begin_interval_time , '
' || TO_CHAR(s.end_interval_time, 'mm/dd/yyyy HH24:MI:SS') || '
' end_interval_time
  , ROUND(EXTRACT(DAY FROM  s.end_interval_time - s.begin_interval_time) * 1440 +
          EXTRACT(HOUR FROM s.end_interval_time - s.begin_interval_time) * 60 +
          EXTRACT(MINUTE FROM s.end_interval_time - s.begin_interval_time) +
          EXTRACT(SECOND FROM s.end_interval_time - s.begin_interval_time) / 60, 2)                                                    elapsed_time
  , ROUND((e.value - b.value)/1000000/60, 2)                                                                                           db_time
, '
' ||
        ROUND(((((e.value - b.value)/1000000/60) / (EXTRACT(DAY FROM  s.end_interval_time - s.begin_interval_time) * 1440 +
                                                    EXTRACT(HOUR FROM s.end_interval_time - s.begin_interval_time) * 60 +
                                                    EXTRACT(MINUTE FROM s.end_interval_time - s.begin_interval_time) +
                                                    EXTRACT(SECOND FROM s.end_interval_time - s.begin_interval_time) / 60) ) * 100), 2) 
|| ' %
' pct_db_time
FROM
    dba_hist_snapshot       s
  , gv$instance             i
  , dba_hist_sys_time_model e
  , dba_hist_sys_time_model b
WHERE
    i.instance_number   = s.instance_number
  AND e.snap_id         = s.snap_id
  AND b.snap_id         = s.snap_id - 1
  AND e.stat_id         = b.stat_id
  AND e.instance_number = b.instance_number
  AND e.instance_number = s.instance_number
  AND e.stat_name       = 'DB time'
ORDER BY
    i.instance_name
  , s.snap_id;

prompt
[<a class="noLink" href="#top">Top</a>]
<p>



-- +----------------------------------------------------------------------------+
-- |                      - AWR SNAPSHOT SIZE ESTIMATES -                       |
-- +----------------------------------------------------------------------------+

prompt <a name="awr_snapshot_size_estimates"></a>
prompt AWR Snapshot Size Estimates
DECLARE

    CURSOR get_instances IS
        SELECT COUNT(DISTINCT instance_number)
        FROM wrm$_database_instance;
  
    CURSOR get_wr_control_info IS
        SELECT snapint_num, retention_num
        FROM wrm$_wr_control;
  
    CURSOR get_snaps IS
        SELECT
            SUM(all_snaps)
          , SUM(good_snaps)
          , SUM(today_snaps)
          , SYSDATE - MIN(begin_interval_time)
        FROM
            (SELECT
                  1 AS all_snaps
                , (CASE WHEN s.status = 0 THEN 1 ELSE 0 END) AS good_snaps
                , (CASE WHEN (s.end_interval_time > SYSDATE - 1) THEN 1 ELSE 0 END) AS today_snaps
                , CAST(s.begin_interval_time AS DATE) AS begin_interval_time
             FROM wrm$_snapshot s
             );

    CURSOR sysaux_occ_usage IS
        SELECT
            occupant_name
          , schema_name
          , space_usage_kbytes/1024 space_usage_mb
        FROM
            v$sysaux_occupants
        ORDER BY
            space_usage_kbytes DESC
          , occupant_name;
  
    mb_format           CONSTANT  VARCHAR2(30)  := '99,999,990.0';
    kb_format           CONSTANT  VARCHAR2(30)  := '999,999,990';
    pct_format          CONSTANT  VARCHAR2(30)  := '990.0';
    snapshot_interval   NUMBER;
    retention_interval  NUMBER;
    all_snaps           NUMBER;
    awr_size            NUMBER;
    snap_size           NUMBER;
    awr_average_size    NUMBER;
    est_today_snaps     NUMBER;
    awr_size_past24     NUMBER;
    good_snaps          NUMBER;
    today_snaps         NUMBER;
    num_days            NUMBER;
    num_instances       NUMBER;

BEGIN

    OPEN get_instances;
    FETCH get_instances INTO num_instances;
    CLOSE get_instances;

    OPEN get_wr_control_info;
    FETCH get_wr_control_info INTO snapshot_interval, retention_interval;
    CLOSE get_wr_control_info;

    OPEN get_snaps;
    FETCH get_snaps INTO all_snaps, good_snaps, today_snaps, num_days;
    CLOSE get_snaps;

    FOR occ_rec IN sysaux_occ_usage
    LOOP
        IF (occ_rec.occupant_name = 'SM/AWR') THEN
            awr_size := occ_rec.space_usage_mb;
        END IF;
    END LOOP;

    snap_size := awr_size/all_snaps;
    awr_average_size := snap_size*86400/snapshot_interval;

    today_snaps := today_snaps / num_instances;

    IF (num_days < 1) THEN
        est_today_snaps := ROUND(today_snaps / num_days);
    ELSE
        est_today_snaps := today_snaps;
    END IF;

    awr_size_past24 := snap_size * est_today_snaps;
    
DBMS_OUTPUT.PUT_LINE(''); DBMS_OUTPUT.PUT_LINE(''); DBMS_OUTPUT.PUT_LINE('' ); DBMS_OUTPUT.PUT_LINE('' );
    IF (num_instances > 1) THEN
DBMS_OUTPUT.PUT_LINE('' );
    END IF;

DBMS_OUTPUT.PUT_LINE(''); DBMS_OUTPUT.PUT_LINE('' ); DBMS_OUTPUT.PUT_LINE('' );
    IF (num_instances > 1) THEN
DBMS_OUTPUT.PUT_LINE('' );
    END IF;
  
DBMS_OUTPUT.PUT_LINE('
Estimates based on ' || ROUND(snapshot_interval/60) || ' minute snapshot intervals
AWR size/day'
                            || TO_CHAR(awr_average_size, mb_format)
|| ' MB
(' || TRIM(TO_CHAR(snap_size*1024, kb_format)) || ' K/snap * ' || ROUND(86400/snapshot_interval) || ' snaps/day)
AWR size/wk'
                            || TO_CHAR(awr_average_size * 7, mb_format)
|| ' MB
(size_per_day * 7) per instance
AWR size/wk'
                            || TO_CHAR(awr_average_size * 7 * num_instances, mb_format)
|| ' MB
(size_per_day * 7) per database
Estimates based on ' || ROUND(today_snaps) || ' snaps in past 24 hours
AWR size/day'
                            || TO_CHAR(awr_size_past24, mb_format)
|| ' MB
('
                            || TRIM(TO_CHAR(snap_size*1024, kb_format)) || ' K/snap and '
                            || ROUND(today_snaps) || ' snaps in past '
|| ROUND(least(num_days*24,24),1) || ' hours)
AWR size/wk'
                            || TO_CHAR(awr_size_past24 * 7, mb_format)
|| ' MB
(size_per_day * 7) per instance
AWR size/wk'
                            || TO_CHAR(awr_size_past24 * 7 * num_instances, mb_format)
|| ' MB
(size_per_day * 7) per database
');
END;
/

prompt
[<a class="noLink" href="#top">Top</a>]
<p>



-- +----------------------------------------------------------------------------+
-- |                              - AWR BASELINES -                             |
-- +----------------------------------------------------------------------------+

prompt <a name="awr_baselines"></a>
prompt AWR Baselines
prompt Use the DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE procedure to create a named baseline.
prompt A baseline (also known as a preserved snapshot set) is a pair of AWR snapshots that represents a
prompt specific period of database usage. The Oracle database server will exempt the AWR snapshots 
prompt assigned to a specific baseline from the automated purge routine. The main purpose of a baseline
prompt is to preserve typical run-time statistics in the AWR repository which can then be compared to 
prompt current performance or similar periods in the past.

CLEAR COLUMNS BREAKS COMPUTES

COLUMN dbbid            FORMAT a75    HEAD 'Database ID'              ENTMAP off
COLUMN dbb_name         FORMAT a75    HEAD 'Database Name'            ENTMAP off
COLUMN baseline_id                    HEAD 'Baseline ID'              ENTMAP off
COLUMN baseline_name    FORMAT a75    HEAD 'Baseline Name'            ENTMAP off
COLUMN start_snap_id                  HEAD 'Beginning Snapshot ID'    ENTMAP off
COLUMN start_snap_time  FORMAT a75    HEAD 'Beginning Snapshot Time'  ENTMAP off
COLUMN end_snap_id                    HEAD 'Ending Snapshot ID'       ENTMAP off
COLUMN end_snap_time    FORMAT a75    HEAD 'Ending Snapshot Time'     ENTMAP off

SELECT
'
' || b.dbid || '
' dbbid
  , d.name                                                                          dbb_name
  , b.baseline_id                                                                   baseline_id
  , baseline_name                                                                   baseline_name
  , b.start_snap_id                                                                 start_snap_id
, '
' || TO_CHAR(b.start_snap_time, 'mm/dd/yyyy HH24:MI:SS') || '
' start_snap_time
  , b.end_snap_id                                                                   end_snap_id
, '
' || TO_CHAR(b.end_snap_time, 'mm/dd/yyyy HH24:MI:SS') || '
' end_snap_time
FROM
    dba_hist_baseline   b
  , v$database          d
WHERE
    b.dbid = d.dbid
ORDER BY
    dbbid
  , b.baseline_id;

prompt
[<a class="noLink" href="#top">Top</a>]
<p>




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


prompt
prompt
Sessions


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

prompt <a name="current_sessions"></a>
prompt Current Sessions
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
'
' || a.instance_name || '
' instance_name_print , '
' || a.thread# || '
' thread_number_print , '
' || TO_CHAR(a.count) || '
' count , '
' || b.value || '
' value , '
' || TO_CHAR(ROUND(100*(a.count / b.value), 2)) || '%
' 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
[<a class="noLink" href="#top">Top</a>]
<p>



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

prompt <a name="user_session_matrix"></a>
prompt User Session Matrix
prompt User sessions (excluding SYS and background processes)

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
'
' || i.instance_name || '
' instance_name_print , '
' || i.thread# || '
' thread_number_print , '
' || NVL(sess.username, '[B.G. Process]') || '
' 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
[<a class="noLink" href="#top">Top</a>]
<p>



-- +----------------------------------------------------------------------------+
-- |                            - ENABLED TRACES -                              |
-- +----------------------------------------------------------------------------+

prompt <a name="dba_enabled_traces"></a>
prompt Enabled Traces
prompt End-to-End Application Tracing from View DBA_ENABLED_TRACES.
prompt
  • Trace Type: Possible values are CLIENT_ID, SESSION, SERVICE, SERVICE_MODULE, SERVICE_MODULE_ACTION, and DATABASE, based on the type of tracing enabled. prompt
  • Primary ID: Specific client identifier (username) or service name. prompt <p> prompt Application tracing is enabled using the DBMS_MONITOR package and the following procedures: prompt
  • CLIENT_ID_TRACE_ENABLE: Enable tracing based on client identifier (username). prompt
  • CLIENT_ID_TRACE_DISABLE: Disable client identifier tracing. prompt
  • SESSION_TRACE_ENABLE: Enable tracing based on SID and SERIAL# of V$SESSION. prompt
  • SESSION_TRACE_DISABLE: Disable session tracing. prompt
  • SERV_MOD_ACT_TRACE_ENABLE: Enable tracing for a given combination of service name, module, and action. prompt
  • SERV_MOD_ACT_TRACE_DISABLE: Disable service, module, and action tracing. prompt
  • DATABASE_TRACE_ENABLE: Enable tracing for the entire database. prompt
  • DATABASE_TRACE_DISABLE: Disable database tracing. prompt <p> prompt Hint: In a shared environment where you have more than one session to trace, it is prompt possible to end up with many trace files when tracing is enabled (i.e. connection pools). prompt Oracle10g introduces the trcsess command-line utility to combine all the relevant prompt trace files based on a session or client identifier or the service name, module name, and prompt action name hierarchy combination. The output trace file from the trcsess command can then be prompt sent to tkprof for a formatted output. Type trcsess at the command-line without any arguments to prompt show the parameters and usage. CLEAR COLUMNS BREAKS COMPUTES COLUMN trace_type FORMAT a75 HEADING 'Trace Type' ENTMAP off COLUMN primary_id FORMAT a75 HEADING 'Primary ID' ENTMAP off COLUMN qualifier_id1 FORMAT a75 HEADING 'Module Name' ENTMAP off COLUMN qualifier_id2 FORMAT a75 HEADING 'Action Name' ENTMAP off COLUMN waits FORMAT a75 HEADING 'Waits?' ENTMAP off COLUMN binds FORMAT a75 HEADING 'Binds?' ENTMAP off COLUMN instance_name_print FORMAT a75 HEADING 'Instance Name' ENTMAP off SELECT '
    ' || trace_type || '
    ' trace_type , '
    ' || NVL(primary_id, '
    ') || '
    ' primary_id , '
    ' || NVL(qualifier_id1, '
    ') || '
    ' qualifier_id1 , '
    ' || NVL(qualifier_id2, '
    ') || '
    ' qualifier_id2 , '
    ' || waits || '
    ' waits , '
    ' || binds || '
    ' binds , '
    ' || NVL(instance_name, '
    ') || '
    ' instance_name_print
    FROM
        dba_enabled_traces
    ORDER BY
        trace_type
      , primary_id
      , qualifier_id1
      , qualifier_id2;
    
    
    prompt
    [<a class="noLink" href="#top">Top</a>]
    <p>



    -- +----------------------------------------------------------------------------+
    -- |                         - ENABLED AGGREGATIONS -                           |
    -- +----------------------------------------------------------------------------+
    
    prompt <a name="dba_enabled_aggregations"></a>
    
    prompt Enabled Aggregations
    prompt Statistics Aggregation from View DBA_ENABLED_AGGREGATIONS.
    
    prompt
  • Aggregation Type: Possible values are CLIENT_ID, SERVICE_MODULE, and SERVICE_MODULE_ACTION, based on the type of statistics being gathered. prompt
  • Primary ID: Specific client identifier (username) or service name. prompt <p> prompt Statistics aggregation is enabled using the DBMS_MONITOR package and the following procedures. prompt Note that statistics gathering is global for the database and is persistent across instance starts prompt and restarts. prompt
  • CLIENT_ID_STAT_ENABLE: Enable statistics gathering based on client identifier (username). prompt
  • CLIENT_ID_STAT_DISABLE: Disable client identifier statistics gathering. prompt
  • SERV_MOD_ACT_STAT_ENABLE: Enable statistics gathering for a given combination of service name, module, and action. prompt
  • SERV_MOD_ACT_STAT_DISABLE: Disable service, module, and action statistics gathering. prompt <p> prompt Hint: While the DBA_ENABLED_AGGREGATIONS provides global statistics for currently enabled prompt statistics, several other views can be used to query statistics aggregation values: V$CLIENT_STATS, prompt V$SERVICE_STATS, V$SERV_MOD_ACT_STATS, and V$SERVICEMETRIC. CLEAR COLUMNS BREAKS COMPUTES COLUMN aggregation_type FORMAT a75 HEADING 'Aggregation Type' ENTMAP off COLUMN primary_id FORMAT a75 HEADING 'Primary ID' ENTMAP off COLUMN qualifier_id1 FORMAT a75 HEADING 'Module Name' ENTMAP off COLUMN qualifier_id2 FORMAT a75 HEADING 'Action Name' ENTMAP off SELECT '
    ' || aggregation_type || '
    ' aggregation_type , '
    ' || NVL(primary_id, '
    ') || '
    ' primary_id , '
    ' || NVL(qualifier_id1, '
    ') || '
    ' qualifier_id1 , '
    ' || NVL(qualifier_id2, '
    ') || '
    ' qualifier_id2
    FROM
        dba_enabled_aggregations
    ORDER BY
        aggregation_type
      , primary_id
      , qualifier_id1
      , qualifier_id2;
    
    
    prompt
    [<a class="noLink" href="#top">Top</a>]
    <p>




    -- +============================================================================+
    -- |                                                                            |
    -- |                      <<<<<     SECURITY     >>>>>                          |
    -- |                                                                            |
    -- +============================================================================+
    
    
    prompt
    
    prompt
    Security


    -- +----------------------------------------------------------------------------+
    -- |                             - USER ACCOUNTS -                              |
    -- +----------------------------------------------------------------------------+
    
    prompt <a name="user_accounts"></a>
    
    prompt User Accounts
    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
        '' || a.username || ''                                            username
      , DECODE(   a.account_status
                , 'OPEN'
    
    , '
    ' || a.account_status || '
    ' , '
    ' || a.account_status || '
    ') account_status , '
    ' || NVL(TO_CHAR(a.expiry_date, 'mm/dd/yyyy HH24:MI:SS'), '
    ') || '
    ' expiry_date
      , a.default_tablespace                                                                                  default_tablespace
      , a.temporary_tablespace                                                                                temporary_tablespace
    
    , '
    ' || TO_CHAR(a.created, 'mm/dd/yyyy HH24:MI:SS') || '
    ' created
      , a.profile                                        profile
    
    , '
    ' || NVL(DECODE(p.sysdba,'TRUE', 'TRUE',), '
    ') || '
    ' sysdba , '
    ' || NVL(DECODE(p.sysoper,'TRUE','TRUE',), '
    ') || '
    ' sysoper
    FROM
        dba_users       a
      , v$pwfile_users  p
    WHERE
        p.username (+) = a.username 
    ORDER BY
        username;
    
    
    prompt
    [<a class="noLink" href="#top">Top</a>]
    <p>



    -- +----------------------------------------------------------------------------+
    -- |                      - USERS WITH DBA PRIVILEGES -                         |
    -- +----------------------------------------------------------------------------+
    
    prompt <a name="users_with_dba_privileges"></a>
    
    prompt Users With DBA Privileges
    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
        '' || grantee       || ''  grantee
    
    , '
    ' || granted_role || '
    ' granted_role
      , DECODE(   admin_option
                , 'YES'
    
    , '
    ' || admin_option || '
    '
                , 'NO'
    
    , '
    ' || admin_option || '
    ' , '
    ' || admin_option || '
    ') admin_option
      , DECODE(   default_role
                , 'YES'
    
    , '
    ' || default_role || '
    '
                , 'NO'
    
    , '
    ' || default_role || '
    ' , '
    ' || default_role || '
    ') default_role
    FROM
        dba_role_privs
    WHERE
        granted_role = 'DBA'
    ORDER BY
        grantee
      , granted_role;
    
    
    prompt
    [<a class="noLink" href="#top">Top</a>]
    <p>



    -- +----------------------------------------------------------------------------+
    -- |                                 - ROLES -                                  |
    -- +----------------------------------------------------------------------------+
    
    prompt <a name="roles"></a>
    
    prompt Roles
    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.role         || ''          role
      , a.grantee                                                               grantee
      , DECODE(   a.admin_option
                , null
                , '
    ' , 'YES'
    , '
    ' || a.admin_option || '
    '
                , 'NO'
    
    , '
    ' || a.admin_option || '
    ' , '
    ' || a.admin_option || '
    ') admin_option
      , DECODE(   a.default_role
                , null
                , '
    ' , 'YES'
    , '
    ' || a.default_role || '
    '
                , 'NO'
    
    , '
    ' || a.default_role || '
    ' , '
    ' || a.default_role || '
    ') default_role
    FROM
        dba_role_privs  a
      , dba_roles       b
    WHERE
        granted_role(+) = b.role
    ORDER BY
        b.role
      , a.grantee;
    
    
    prompt
    [<a class="noLink" href="#top">Top</a>]
    <p>



    -- +----------------------------------------------------------------------------+
    -- |                          - DEFAULT PASSWORDS -                             |
    -- +----------------------------------------------------------------------------+
    
    prompt <a name="default_passwords"></a>
    
    prompt Default Passwords
    prompt User(s) with default password
    
    CLEAR COLUMNS BREAKS COMPUTES
    
    COLUMN username                      HEADING 'Username'        ENTMAP off
    COLUMN account_status   FORMAT a75   HEADING 'Account Status'  ENTMAP off
    
    SELECT
        '' || username        || ''        username
      , DECODE(   account_status
                , 'OPEN'
    
    , '
    ' || account_status || '
    ' , '
    ' || account_status || '
    ') 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
    [<a class="noLink" href="#top">Top</a>]
    <p>



    -- +----------------------------------------------------------------------------+
    -- |                              - DB LINKS -                                  |
    -- +----------------------------------------------------------------------------+
    
    prompt <a name="db_links"></a>
    
    prompt DB Links
    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
        '' || owner || ''  owner
      , db_link
      , username
      , host
    
    , '
    ' || TO_CHAR(created, 'mm/dd/yyyy HH24:MI:SS') || '
    ' created
    FROM dba_db_links
    ORDER BY owner, db_link;
    
    
    prompt
    [<a class="noLink" href="#top">Top</a>]
    <p>




    -- +============================================================================+
    -- |                                                                            |
    -- |                     <<<<<     OBJECTS     >>>>>                            |
    -- |                                                                            |
    -- +============================================================================+
    
    
    prompt
    
    prompt
    Objects


    -- +----------------------------------------------------------------------------+
    -- |                            - OBJECT SUMMARY -                              |
    -- +----------------------------------------------------------------------------+
    
    prompt <a name="object_summary"></a>
    
    prompt Object Summary
    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 'Grand Total: ' of obj_count on report
    COMPUTE sum LABEL 'Total: ' OF obj_count ON report
    
    SELECT
        '' || owner || ''  owner
      , object_type                                            object_type
      , count(*)                                               obj_count
    FROM
        dba_objects
    GROUP BY
        owner
      , object_type
    ORDER BY
        owner
      , object_type;
    
    
    prompt
    [<a class="noLink" href="#top">Top</a>]
    <p>



    -- +----------------------------------------------------------------------------+
    -- |                          - SEGMENT SUMMARY -                               |
    -- +----------------------------------------------------------------------------+
    
    prompt <a name="segment_summary"></a>
    
    prompt Segment Summary
    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 'Total: ' OF seg_count bytes ON report
    
    SELECT
        '' || owner || ''  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
    [<a class="noLink" href="#top">Top</a>]
    <p>



    -- +----------------------------------------------------------------------------+
    -- |                    - TOP 100 SEGMENTS (BY SIZE) -                          |
    -- +----------------------------------------------------------------------------+
    
    prompt <a name="top_100_segments_by_size"></a>
    
    prompt Top 100 Segments (by size)
    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 'Total: ' 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 < 100;
    
    
    prompt
    [<a class="noLink" href="#top">Top</a>]
    <p>



    -- +----------------------------------------------------------------------------+
    -- |                      - TOP 100 SEGMENTS (BY EXTENTS) -                     |
    -- +----------------------------------------------------------------------------+
    
    prompt <a name="top_100_segments_by_extents"></a>
    
    prompt Top 100 Segments (by number of extents)
    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 'Total: ' 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 < 100;
    
    
    prompt
    [<a class="noLink" href="#top">Top</a>]
    <p>



    -- +----------------------------------------------------------------------------+
    -- |                           - DIRECTORIES -                                  |
    -- +----------------------------------------------------------------------------+
    
    prompt <a name="dba_directories"></a>
    
    prompt Directories
    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
    
    '
    ' || owner || '
    ' owner
      , ''                   || directory_name || ''        directory_name
      , '' || directory_path || '' directory_path
    FROM
        dba_directories
    ORDER BY
        owner
      , directory_name;
    
    
    prompt
    [<a class="noLink" href="#top">Top</a>]
    <p>



    -- +----------------------------------------------------------------------------+
    -- |                        - DIRECTORY PRIVILEGES -                            |
    -- +----------------------------------------------------------------------------+
    
    prompt <a name="dba_directory_privileges"></a>
    
    prompt Directory Privileges
    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
        '' || table_name || ''  table_name
      , '' || grantee    || ''  grantee
      , privilege                                                   privilege
      , DECODE(   grantable
                , 'YES'
    
    , '
    ' || grantable || '
    '
                , 'NO'
    
    , '
    ' || grantable || '
    ' , '
    ' || grantable || '
    ') grantable
    FROM
        dba_tab_privs
    WHERE
        privilege IN ('READ', 'WRITE')
    ORDER BY
        table_name
      , grantee
      , privilege;
    
    
    prompt
    [<a class="noLink" href="#top">Top</a>]
    <p>



    -- +----------------------------------------------------------------------------+
    -- |                             - LIBRARIES -                                  |
    -- +----------------------------------------------------------------------------+
    
    prompt <a name="dba_libraries"></a>
    
    prompt Libraries
    CLEAR COLUMNS BREAKS COMPUTES
    
    COLUMN owner          FORMAT a75    HEADING 'Owner'             ENTMAP off
    COLUMN library_name   FORMAT a75    HEADING 'Library Name'      ENTMAP off
    COLUMN file_spec                    HEADING 'File Spec'         ENTMAP off
    COLUMN dynamic        FORMAT a75    HEADING 'Dynamic?'          ENTMAP off
    COLUMN status         FORMAT a75    HEADING 'Status'            ENTMAP off
    
    BREAK ON report ON owner
    
    SELECT
    
    '
    ' || owner || '
    ' owner
      , ''                   || library_name    || ''        library_name
      , file_spec                                                                                file_spec
    
    , '
    ' || dynamic || '
    ' dynamic
      , DECODE(   status
                , 'VALID'
    
    , '
    ' || status || '
    ' , '
    ' || status || '
    ' ) status
    FROM
        dba_libraries
    ORDER BY
        owner
      , library_name;
    
    
    prompt
    [<a class="noLink" href="#top">Top</a>]
    <p>



    -- +----------------------------------------------------------------------------+
    -- |                               - TYPES -                                    |
    -- +----------------------------------------------------------------------------+
    
    prompt <a name="dba_types"></a>
    
    prompt Types
    prompt Excluding all internal system schemas (i.e. CTXSYS, MDSYS, SYS, SYSTEM)
    
    CLEAR COLUMNS BREAKS COMPUTES
    
    COLUMN owner              FORMAT a75        HEADING 'Owner'              ENTMAP off
    COLUMN type_name          FORMAT a75        HEADING 'Type Name'          ENTMAP off
    COLUMN typecode           FORMAT a75        HEADING 'Type Code'          ENTMAP off
    COLUMN attributes         FORMAT a75        HEADING 'Num. Attributes'    ENTMAP off
    COLUMN methods            FORMAT a75        HEADING 'Num. Methods'       ENTMAP off
    COLUMN predefined         FORMAT a75        HEADING 'Predefined?'        ENTMAP off
    COLUMN incomplete         FORMAT a75        HEADING 'Incomplete?'        ENTMAP off
    COLUMN final              FORMAT a75        HEADING 'Final?'             ENTMAP off
    COLUMN instantiable       FORMAT a75        HEADING 'Instantiable?'      ENTMAP off
    COLUMN supertype_owner    FORMAT a75        HEADING 'Super Owner'        ENTMAP off
    COLUMN supertype_name     FORMAT a75        HEADING 'Super Name'         ENTMAP off
    COLUMN local_attributes   FORMAT a75        HEADING 'Local Attributes'   ENTMAP off
    COLUMN local_methods      FORMAT a75        HEADING 'Local Methods'      ENTMAP off
    
    BREAK ON report ON owner
    
    SELECT
    
    '
    ' || t.owner || '
    ' owner , '
    ' || t.type_name || '
    ' type_name , '
    ' || t.typecode || '
    ' typecode , '
    ' || TO_CHAR(t.attributes, '999,999') || '
    ' attributes , '
    ' || TO_CHAR(t.methods, '999,999') || '
    ' methods , '
    ' || t.predefined || '
    ' predefined , '
    ' || t.incomplete || '
    ' incomplete , '
    ' || t.final || '
    ' final , '
    ' || t.instantiable || '
    ' instantiable , '
    ' || NVL(t.supertype_owner, '
    ') || '
    ' supertype_owner , '
    ' || NVL(t.supertype_name, '
    ') || '
    ' supertype_name , '
    ' || NVL(TO_CHAR(t.local_attributes, '999,999'), '
    ') || '
    ' local_attributes , '
    ' || NVL(TO_CHAR(t.local_methods, '999,999'), '
    ') || '
    ' local_methods
    FROM
        dba_types  t
    WHERE
        t.owner NOT IN (    'CTXSYS'
                          , 'DBSNMP'
                          , 'DMSYS'
                          , 'EXFSYS'
                          , 'IX'
                          , 'LBACSYS'
                          , 'MDSYS'
                          , 'OLAPSYS'
                          , 'ORDSYS'
                          , 'OUTLN'
                          , 'SYS'
                          , 'SYSMAN'
                          , 'SYSTEM'
                          , 'WKSYS'
                          , 'WMSYS'
                          , 'XDB')
    ORDER BY
        t.owner
      , t.type_name;
    
    
    prompt
    [<a class="noLink" href="#top">Top</a>]
    <p>



    -- +----------------------------------------------------------------------------+
    -- |                           - TYPE ATTRIBUTES -                              |
    -- +----------------------------------------------------------------------------+
    
    prompt <a name="dba_type_attributes"></a>
    
    prompt Type Attributes
    prompt Excluding all internal system schemas (i.e. CTXSYS, MDSYS, SYS, SYSTEM)
    
    CLEAR COLUMNS BREAKS COMPUTES
    
    COLUMN owner                FORMAT a75        HEADING 'Owner'                ENTMAP off
    COLUMN type_name            FORMAT a75        HEADING 'Type Name'            ENTMAP off
    COLUMN typecode             FORMAT a75        HEADING 'Type Code'            ENTMAP off
    COLUMN attribute_name       FORMAT a75        HEADING 'Attribute Name'       ENTMAP off
    COLUMN attribute_datatype   FORMAT a75        HEADING 'Attribute Data Type'  ENTMAP off
    COLUMN inherited            FORMAT a75        HEADING 'Inherited?'           ENTMAP off
    
    BREAK ON report ON owner ON type_name ON typecode
    
    SELECT
    
    '
    ' || t.owner || '
    ' owner , '
    ' || t.type_name || '
    ' type_name , '
    ' || t.typecode || '
    ' typecode , '
    ' || a.attr_name || '
    ' attribute_name
      , (CASE
           WHEN (a.length IS NOT NULL)
               THEN a.attr_type_name || '(' || a.length || ')'
           WHEN (a.attr_type_name='NUMBER' AND (a.precision IS NOT NULL AND a.scale IS NOT NULL))
               THEN a.attr_type_name || '(' || a.precision || ',' || a.scale || ')'
           WHEN (a.attr_type_name='NUMBER' AND (a.precision IS NOT NULL AND a.scale IS NULL))
               THEN a.attr_type_name || '(' || a.precision || ')'
           ELSE
               a.attr_type_name
         END)                                                     attribute_datatype
      , DECODE(   a.inherited
                , 'YES'
    
    , '
    ' || a.inherited || '
    '
                , 'NO'
    
    , '
    ' || a.inherited || '
    ' , '
    ' || a.inherited || '
    ') inherited
    FROM
        dba_types        t
      , dba_type_attrs   a
    WHERE
          t.owner       = a.owner
      AND t.type_name   = a.type_name
      AND t.owner NOT IN (    'CTXSYS'
                            , 'DBSNMP'
                            , 'DMSYS'
                            , 'EXFSYS'
                            , 'IX'
                            , 'LBACSYS'
                            , 'MDSYS'
                            , 'OLAPSYS'
                            , 'ORDSYS'
                            , 'OUTLN'
                            , 'SYS'
                            , 'SYSMAN'
                            , 'SYSTEM'
                            , 'WKSYS'
                            , 'WMSYS'
                            , 'XDB')
    ORDER BY
        t.owner
      , t.type_name
      , t.typecode
      , a.attr_no;
    
    
    prompt
    [<a class="noLink" href="#top">Top</a>]
    <p>



    -- +----------------------------------------------------------------------------+
    -- |                             - TYPE METHODS -                               |
    -- +----------------------------------------------------------------------------+
    
    prompt <a name="dba_type_methods"></a>
    
    prompt Type Methods
    prompt Excluding all internal system schemas (i.e. CTXSYS, MDSYS, SYS, SYSTEM)
    
    CLEAR COLUMNS BREAKS COMPUTES
    
    COLUMN owner              FORMAT a75        HEADING 'Owner'              ENTMAP off
    COLUMN type_name          FORMAT a75        HEADING 'Type Name'          ENTMAP off
    COLUMN typecode           FORMAT a75        HEADING 'Type Code'          ENTMAP off
    COLUMN method_name        FORMAT a75        HEADING 'Method Name'        ENTMAP off
    COLUMN method_type        FORMAT a75        HEADING 'Method Type'        ENTMAP off
    COLUMN num_parameters     FORMAT a75        HEADING 'Num. Parameters'    ENTMAP off
    COLUMN results            FORMAT a75        HEADING 'Results'            ENTMAP off
    COLUMN final              FORMAT a75        HEADING 'Final?'             ENTMAP off
    COLUMN instantiable       FORMAT a75        HEADING 'Instantiable?'      ENTMAP off
    COLUMN overriding         FORMAT a75        HEADING 'Overriding?'        ENTMAP off
    COLUMN inherited          FORMAT a75        HEADING 'Inherited?'         ENTMAP off
    
    BREAK ON report ON owner ON type_name ON typecode
    
    SELECT
    
    '
    ' || t.owner || '
    ' owner , '
    ' || t.type_name || '
    ' type_name , '
    ' || t.typecode || '
    ' typecode , '
    ' || m.method_name || '
    ' method_name , '
    ' || m.method_type || '
    ' method_type , '
    ' || TO_CHAR(m.parameters, '999,999') || '
    ' num_parameters , '
    ' || TO_CHAR(m.results, '999,999') || '
    ' results , '
    ' || m.final || '
    ' final , '
    ' || m.instantiable || '
    ' instantiable , '
    ' || m.overriding || '
    ' overriding
      , DECODE(   m.inherited
                , 'YES'
    
    , '
    ' || m.inherited || '
    '
                , 'NO'
    
    , '
    ' || m.inherited || '
    ' , '
    ' || m.inherited || '
    ') inherited
    FROM
        dba_types          t
      , dba_type_methods   m
    WHERE
          t.owner       = m.owner
      AND t.type_name   = m.type_name
      AND t.owner NOT IN (    'CTXSYS'
                            , 'DBSNMP'
                            , 'DMSYS'
                            , 'EXFSYS'
                            , 'IX'
                            , 'LBACSYS'
                            , 'MDSYS'
                            , 'OLAPSYS'
                            , 'ORDSYS'
                            , 'OUTLN'
                            , 'SYS'
                            , 'SYSMAN'
                            , 'SYSTEM'
                            , 'WKSYS'
                            , 'WMSYS'
                            , 'XDB')
    ORDER BY
        t.owner
      , t.type_name
      , t.typecode
      , m.method_no;
    
    
    prompt
    [<a class="noLink" href="#top">Top</a>]
    <p>



    -- +----------------------------------------------------------------------------+
    -- |                              - COLLECTIONS -                               |
    -- +----------------------------------------------------------------------------+
    
    prompt <a name="dba_collections"></a>
    
    prompt Collections
    prompt Excluding all internal system schemas (i.e. CTXSYS, MDSYS, SYS, SYSTEM)
    
    CLEAR COLUMNS BREAKS COMPUTES
    
    COLUMN owner                FORMAT a75        HEADING 'Owner'              ENTMAP off
    COLUMN type_name            FORMAT a75        HEADING 'Type Name'          ENTMAP off
    COLUMN coll_type            FORMAT a75        HEADING 'Collection Type'    ENTMAP off
    COLUMN upper_bound          FORMAT a75        HEADING 'VARRAY Limit'       ENTMAP off
    COLUMN elem_type_owner      FORMAT a75        HEADING 'Element Type Owner' ENTMAP off
    COLUMN elem_datatype        FORMAT a75        HEADING 'Element Data Type'  ENTMAP off
    COLUMN character_set_name   FORMAT a75        HEADING 'Character Set'      ENTMAP off
    COLUMN elem_storage         FORMAT a75        HEADING 'Element Storage'    ENTMAP off
    COLUMN nulls_stored         FORMAT a75        HEADING 'Nulls Stored?'      ENTMAP off
    
    BREAK ON report ON owner ON type_name
    
    SELECT
    
    '
    ' || c.owner || '
    ' owner , '
    ' || c.type_name || '
    ' type_name , '
    ' || c.coll_type || '
    ' coll_type , '
    ' || NVL(TO_CHAR(c.upper_bound, '9,999,999,999'), '
    ') || '
    ' upper_bound , '
    ' || NVL(c.elem_type_owner, '
    ') || '
    ' elem_type_owner
      , (CASE
           WHEN (c.length IS NOT NULL)
               THEN c.elem_type_name || '(' || c.length || ')'
           WHEN (c.elem_type_name='NUMBER' AND (c.precision IS NOT NULL AND c.scale IS NOT NULL))
               THEN c.elem_type_name || '(' || c.precision || ',' || c.scale || ')'
           WHEN (c.elem_type_name='NUMBER' AND (c.precision IS NOT NULL AND c.scale IS NULL))
               THEN c.elem_type_name || '(' || c.precision || ')'
           ELSE
               c.elem_type_name
         END)                                    elem_datatype
    
    , '
    ' || NVL(c.character_set_name, '
    ') || '
    ' character_set_name , '
    ' || NVL(c.elem_storage, '
    ') || '
    ' elem_storage
      , DECODE(   c.nulls_stored
                , 'YES'
    
    , '
    ' || c.nulls_stored || '
    '
                , 'NO'
    
    , '
    ' || c.nulls_stored || '
    ' , '
    ' || c.nulls_stored || '
    ') nulls_stored
    FROM
        dba_coll_types  c
    WHERE
        c.owner NOT IN (    'CTXSYS'
                          , 'DBSNMP'
                          , 'DMSYS'
                          , 'EXFSYS'
                          , 'IX'
                          , 'LBACSYS'
                          , 'MDSYS'
                          , 'OLAPSYS'
                          , 'ORDSYS'
                          , 'OUTLN'
                          , 'SYS'
                          , 'SYSMAN'
                          , 'SYSTEM'
                          , 'WKSYS'
                          , 'WMSYS'
                          , 'XDB')
    ORDER BY
        c.owner
      , c.type_name;
    
    
    prompt
    [<a class="noLink" href="#top">Top</a>]
    <p>



    -- +----------------------------------------------------------------------------+
    -- |                           - LOB SEGMENTS -                                 |
    -- +----------------------------------------------------------------------------+
    
    prompt <a name="dba_lob_segments"></a>
    
    prompt LOB Segments
    prompt Excluding all internal system schemas (i.e. CTXSYS, MDSYS, SYS, SYSTEM)
    
    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
    
    '
    ' || l.owner || '
    ' owner , '
    ' || l.table_name || '
    ' table_name , '
    ' || l.column_name || '
    ' column_name , '
    ' || l.segment_name || '
    ' segment_name , '
    ' || s.tablespace_name || '
    ' tablespace_name , '
    ' || TO_CHAR(s.bytes, '999,999,999,999,999') || '
    ' lob_segment_bytes , '
    ' || l.index_name || '
    ' index_name
      , DECODE(   l.in_row
                , 'YES'
    
    , '
    ' || l.in_row || '
    '
                , 'NO'
    
    , '
    ' || l.in_row || '
    ' , '
    ' || l.in_row || '
    ') 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
    [<a class="noLink" href="#top">Top</a>]
    <p>



    -- +----------------------------------------------------------------------------+
    -- |                      - OBJECTS UNABLE TO EXTEND -                          |
    -- +----------------------------------------------------------------------------+
    
    prompt <a name="objects_unable_to_extend"></a>
    
    prompt Objects Unable to Extend
    prompt Segments that cannot extend because of MAXEXTENTS or not enough space
    
    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
    
    '
    ' || ds.owner || '
    ' 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
    [<a class="noLink" href="#top">Top</a>]
    <p>



    -- +----------------------------------------------------------------------------+
    -- |               - OBJECTS WHICH ARE NEARING MAXEXTENTS -                     |
    -- +----------------------------------------------------------------------------+
    
    prompt <a name="objects_which_are_nearing_maxextents"></a>
    
    prompt Objects Which Are Nearing MAXEXTENTS
    prompt Segments where number of EXTENTS is less than 1/2 of MAXEXTENTS
    
    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
    
    , '
    ' || ROUND((extents/max_extents)*100, 2) || '%
    ' pct_util
    FROM
        dba_segments
    WHERE
          extents > max_extents/2
      AND max_extents != 0
    ORDER BY
        (extents/max_extents) DESC;
    
    
    prompt
    [<a class="noLink" href="#top">Top</a>]
    <p>



    -- +----------------------------------------------------------------------------+
    -- |                          - INVALID OBJECTS -                               |
    -- +----------------------------------------------------------------------------+
    
    prompt <a name="invalid_objects"></a>
    
    prompt Invalid Objects
    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 'Grand Total: ' OF object_name ON report
    
    SELECT
    
    '
    ' || owner || '
    ' owner
      , object_name
      , object_type
      , DECODE(   status
                , 'VALID'
    
    , '
    ' || status || '
    ' , '
    ' || status || '
    ' ) status
    FROM dba_objects
    WHERE status <> 'VALID'
    ORDER BY
        owner
      , object_name;
    
    
    prompt
    [<a class="noLink" href="#top">Top</a>]
    <p>



    -- +----------------------------------------------------------------------------+
    -- |                     - PROCEDURAL OBJECT ERRORS -                           |
    -- +----------------------------------------------------------------------------+
    
    prompt <a name="procedural_object_errors"></a>
    
    prompt Procedural Object Errors
    prompt All records from DBA_ERRORS
    
    CLEAR COLUMNS BREAKS COMPUTES
    
    COLUMN owner                FORMAT a85      HEAD 'Schema'        ENTMAP off
    COLUMN name                 FORMAT a30      HEAD 'Object Name'   ENTMAP off
    COLUMN type                 FORMAT a15      HEAD 'Object Type'   ENTMAP off
    COLUMN sequence             FORMAT 999,999  HEAD 'Sequence'      ENTMAP off
    COLUMN line                 FORMAT 999,999  HEAD 'Line'          ENTMAP off
    COLUMN position             FORMAT 999,999  HEAD 'Position'      ENTMAP off
    COLUMN text                                 HEAD 'Text'          ENTMAP off
    
    BREAK ON report ON owner
    
    SELECT
    
    '
    ' || owner || '
    ' owner
      , name
      , type
      , sequence
      , line
      , position
      , text
    FROM
        dba_errors
    ORDER BY
        1
      , 2
      , 3;
    
    
    prompt
    [<a class="noLink" href="#top">Top</a>]
    <p>



    -- +----------------------------------------------------------------------------+
    -- |                     - OBJECTS WITHOUT STATISTICS -                         |
    -- +----------------------------------------------------------------------------+
    
    prompt <a name="objects_without_statistics"></a>
    
    prompt Objects Without Statistics
    CLEAR COLUMNS BREAKS COMPUTES
    
    COLUMN owner            FORMAT a95                HEAD 'Owner'            ENTMAP off
    COLUMN object_type      FORMAT a20                HEAD 'Object Type'      ENTMAP off
    COLUMN count            FORMAT 999,999,999,999    HEAD 'Count'            ENTMAP off
    
    BREAK ON report ON owner
    COMPUTE count LABEL 'Total: ' OF object_name ON report
    
    SELECT
    
    '
    ' || owner || '
    ' owner
      , 'Table'                                                                                     object_type
      , count(*)                                                                                    count
    FROM
        sys.dba_tables 
    WHERE
          last_analyzed IS NULL 
      AND owner NOT IN ('SYS','SYSTEM') 
      AND partitioned = 'NO'
    GROUP BY
        owner
      , 'Table'
    UNION 
    SELECT
    
    '
    ' || owner || '
    ' owner
      , 'Index'                                                                                     object_type
      , count(*)                                                                                    count
    FROM
        sys.dba_indexes 
    WHERE
          last_analyzed IS NULL 
      AND owner NOT IN ('SYS','SYSTEM') 
      AND partitioned = 'NO'
    GROUP BY
        owner
      , 'Index'
    UNION 
    SELECT
    
    '
    ' || table_owner || '
    ' owner
      , 'Table Partition'                                                                           object_type
      , count(*)                                                                                    count
    FROM
        sys.dba_tab_partitions 
    WHERE
          last_analyzed IS NULL 
      AND table_owner NOT IN ('SYS','SYSTEM')
    GROUP BY
        table_owner
      , 'Table Partition'
    UNION 
    SELECT
    
    '
    ' || index_owner || '
    ' owner
      , 'Index Partition'                                                                           object_type
      , count(*)                                                                                    count
    FROM
        sys.dba_ind_partitions 
    WHERE
          last_analyzed IS NULL 
      AND index_owner NOT IN ('SYS','SYSTEM')
    GROUP BY
        index_owner
      , 'Index Partition'
    ORDER BY
        1
      , 2
      , 3;
    
    
    prompt
    [<a class="noLink" href="#top">Top</a>]
    <p>



    -- +----------------------------------------------------------------------------+
    -- |           - TABLES SUFFERING FROM ROW CHAINING/MIGRATION -                 |
    -- +----------------------------------------------------------------------------+
    
    prompt <a name="tables_suffering_from_row_chaining_migration"></a>
    
    prompt Tables Suffering From Row Chaining/Migration
    prompt NOTE: Tables must have statistics gathered
    
    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
    
    , '
    ' || ROUND((chain_cnt/num_rows)*100, 2) || '%
    ' 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
    
    , '
    ' || ROUND((chain_cnt/num_rows)*100, 2) || '%
    ' 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
    [<a class="noLink" href="#top">Top</a>]
    <p>



    -- +----------------------------------------------------------------------------+
    -- |             - USERS WITH DEFAULT TABLESPACE - (SYSTEM) -                   |
    -- +----------------------------------------------------------------------------+
    
    prompt <a name="users_with_default_tablespace_defined_as_system"></a>
    
    prompt Users With Default Tablespace - (SYSTEM)
    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
        '' || username             || '</font>'                  username
    
    , '
    ' || default_tablespace || '
    ' default_tablespace , '
    ' || temporary_tablespace || '
    ' temporary_tablespace , '
    ' || TO_CHAR(created, 'mm/dd/yyyy HH24:MI:SS') || '
    ' created
      , DECODE(   account_status
                , 'OPEN'
    
    , '
    ' || account_status || '
    ' , '
    ' || account_status || '
    ') account_status
    FROM
        dba_users
    WHERE
        default_tablespace = 'SYSTEM'
    ORDER BY
        username;
    
    
    prompt
    [<a class="noLink" href="#top">Top</a>]
    <p>



    -- +----------------------------------------------------------------------------+
    -- |          - USERS WITH DEFAULT TEMPORARY TABLESPACE - (SYSTEM) -            |
    -- +----------------------------------------------------------------------------+
    
    prompt <a name="users_with_default_temporary_tablespace_as_system"></a>
    
    prompt Users With Default Temporary Tablespace - (SYSTEM)
    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
        ''  || username             || '</font>'                  username
    
    , '
    ' || default_tablespace || '
    ' default_tablespace , '
    ' || temporary_tablespace || '
    ' temporary_tablespace , '
    ' || TO_CHAR(created, 'mm/dd/yyyy HH24:MI:SS') || '
    ' created
      , DECODE(   account_status
                , 'OPEN'
    
    , '
    ' || account_status || '
    ' , '
    ' || account_status || '
    ') account_status
    FROM
        dba_users
    WHERE
        temporary_tablespace = 'SYSTEM'
    ORDER BY
        username;
    
    
    prompt
    [<a class="noLink" href="#top">Top</a>]
    <p>



    -- +----------------------------------------------------------------------------+
    -- |                  - OBJECTS IN THE SYSTEM TABLESPACE -                      |
    -- +----------------------------------------------------------------------------+
    
    prompt <a name="objects_in_the_system_tablespace"></a>
    
    prompt Objects in the SYSTEM Tablespace
    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 'Total Count: ' OF segment_name ON report
    COMPUTE sum   LABEL 'Total Bytes: ' OF bytes ON report
    
    SELECT
    
    '
    ' || owner || '
    ' 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
    [<a class="noLink" href="#top">Top</a>]
    <p>



    -- +----------------------------------------------------------------------------+
    -- |                              - RECYCLE BIN -                               |
    -- +----------------------------------------------------------------------------+
    
    prompt <a name="dba_recycle_bin"></a>
    
    prompt Recycle Bin
    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
    
    '
    ' || owner || '
    ' owner
      , original_name
      , type
      , object_name
      , ts_name
      , operation
    
    , '
    ' || NVL(createtime, '
    ') || '
    ' createtime , '
    ' || NVL(droptime, '
    ') || '
    ' droptime
      , DECODE(   can_undrop
                , null
                , '
    ' , 'YES'
    , '
    ' || can_undrop || '
    '
                , 'NO'
    
    , '
    ' || can_undrop || '
    ' , '
    ' || can_undrop || '
    ') can_undrop
      , DECODE(   can_purge
                , null
                , '
    ' , 'YES'
    , '
    ' || can_purge || '
    '
                , 'NO'
    
    , '
    ' || can_purge || '
    ' , '
    ' || can_purge || '
    ') 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
    [<a class="noLink" href="#top">Top</a>]
    <p>




    -- +============================================================================+
    -- |                                                                            |
    -- |         <<<<<     ONLINE ANALYTICAL PROCESSING - (OLAP)     >>>>>          |
    -- |                                                                            |
    -- +============================================================================+
    
    
    prompt
    
    prompt
    Online Analytical Processing - (OLAP)


    -- +----------------------------------------------------------------------------+
    -- |                              - DIMENSIONS -                                |
    -- +----------------------------------------------------------------------------+
    
    prompt <a name="dba_dimensions"></a>
    
    prompt Dimensions
    CLEAR COLUMNS BREAKS COMPUTES
    
    COLUMN owner              FORMAT a75     HEADING 'Owner'            ENTMAP off
    COLUMN dimension_name     FORMAT a75     HEADING 'Dimension Name'   ENTMAP off
    COLUMN invalid            FORMAT a75     HEADING 'Invalid?'         ENTMAP off
    COLUMN compile_state      FORMAT a75     HEADING 'Compile State'    ENTMAP off
    COLUMN revision                          HEADING 'Revision'         ENTMAP off
    
    BREAK ON report ON owner
    
    SELECT
    
    '
    ' || dd.owner || '
    ' owner
      , dd.dimension_name                                                                   dimension_name
    
    , '
    ' || dd.invalid || '
    ' invalid
      , DECODE(   dd.compile_state
                , 'VALID'
    
    , '
    ' || dd.compile_state || '
    ' , '
    ' || dd.compile_state || '
    ' ) compile_state , '
    ' || dd.revision || '
    ' revision
    FROM
        dba_dimensions      dd
    ORDER BY
        dd.owner
      , dd.dimension_name;
    
    
    prompt
    [<a class="noLink" href="#top">Top</a>]
    <p>



    -- +----------------------------------------------------------------------------+
    -- |                            - DIMENSION LEVELS -                            |
    -- +----------------------------------------------------------------------------+
    
    prompt <a name="dba_dimension_levels"></a>
    
    prompt Dimension Levels
    CLEAR COLUMNS BREAKS COMPUTES
    
    COLUMN owner              FORMAT a75                HEADING 'Owner'            ENTMAP off
    COLUMN dimension_name     FORMAT a75                HEADING 'Dimension Name'   ENTMAP off
    COLUMN level_name         FORMAT a75                HEADING 'Level Name'       ENTMAP off
    COLUMN level_table_name   FORMAT a75                HEADING 'Source Table'     ENTMAP off
    COLUMN column_name        FORMAT a75                HEADING 'Column Name(s)'   ENTMAP off
    COLUMN key_position       FORMAT a75                HEADING 'Column Position'  ENTMAP off
    
    BREAK ON owner ON dimension_name ON level_name ON level_table_name
    
    SELECT
    
    '
    ' || d.owner || '
    ' owner
      , d.dimension_name                                    dimension_name
      , l.level_name                                        level_name
      , l.detailobj_owner || '.' || l.detailobj_name        level_table_name
      , k.column_name                                       column_name
    
    , '
    ' || TO_CHAR(k.key_position, '999,999') || '
    ' key_position
    FROM
        dba_dimensions          d
      , dba_dim_levels          l
      , dba_dim_level_key       k
    WHERE
          d.owner          = l.owner
      AND d.dimension_name = l.dimension_name
      AND d.owner          = k.owner
      AND d.dimension_name = k.dimension_name
      AND l.level_name     = k.level_name
    ORDER by
        l.owner
      , l.dimension_name
      , l.level_name
      , level_table_name
      , k.key_position;
    
    
    
    
    prompt
    [<a class="noLink" href="#top">Top</a>]
    <p>



    -- +----------------------------------------------------------------------------+
    -- |                         - DIMENSION ATTRIBUTES -                           |
    -- +----------------------------------------------------------------------------+
    
    prompt <a name="dba_dimension_attributes"></a>
    
    prompt Dimension Attributes
    CLEAR COLUMNS BREAKS COMPUTES
    
    COLUMN owner              FORMAT a75     HEADING 'Owner'                    ENTMAP off
    COLUMN dimension_name     FORMAT a75     HEADING 'Dimension Name'           ENTMAP off
    COLUMN level_name         FORMAT a75     HEADING 'Level Name'               ENTMAP off
    COLUMN level_table_name   FORMAT a75     HEADING 'Source Table'             ENTMAP off
    COLUMN column_name        FORMAT a75     HEADING 'Attribute Source Column'  ENTMAP off
    COLUMN inferred           FORMAT a75     HEADING 'Inferred?'                ENTMAP off
    
    BREAK ON report ON owner ON dimension_name ON level_name
    
    SELECT
    
    '
    ' || d.owner || '
    ' owner
      , d.dimension_name                                 dimension_name
      , l.level_name                                     level_name
      , l.detailobj_owner || '.' || l.detailobj_name     level_table_name
      , a.column_name                                    column_name
    
    , '
    ' || a.inferred || '
    ' inferred
    FROM
        dba_dimensions          d
      , dba_dim_levels          l
      , dba_dim_attributes      a
    WHERE
          d.owner          = l.owner
      AND d.dimension_name = l.dimension_name
      AND d.owner          = a.owner
      AND d.dimension_name = a.dimension_name
      AND l.level_name     = a.level_name
    ORDER by
        l.owner
      , l.dimension_name
      , l.level_name
      , level_table_name;
    
    
    prompt
    [<a class="noLink" href="#top">Top</a>]
    <p>



    -- +----------------------------------------------------------------------------+
    -- |                         - DIMENSION HIERARCHIES -                          |
    -- +----------------------------------------------------------------------------+
    
    prompt <a name="dba_dimension_hierarchies"></a>
    
    prompt Dimension Hierarchies
    CLEAR COLUMNS BREAKS COMPUTES
    
    COLUMN owner              FORMAT a75              HEADING 'Owner'                ENTMAP off
    COLUMN dimension_name     FORMAT a75              HEADING 'Dimension Name'       ENTMAP off
    COLUMN hierarchy_name     FORMAT a75              HEADING 'Hierarchy Name'       ENTMAP off
    COLUMN parent_level_name  FORMAT a75              HEADING 'Parent Level'         ENTMAP off
    COLUMN child_level_name   FORMAT a75              HEADING 'Child Level'          ENTMAP off
    COLUMN position           FORMAT a75              HEADING 'Position'             ENTMAP off
    COLUMN join_key_id        FORMAT a75              HEADING 'Join Key ID'          ENTMAP off
    
    BREAK ON owner ON dimension_name ON hierarchy_name
    
    SELECT
    
    '
    ' || d.owner || '
    ' owner
      , d.dimension_name                                                      dimension_name
      , h.hierarchy_name                                                      hierarchy_name
      , c.parent_level_name                                                   parent_level_name
      , c.child_level_name                                                    child_level_name
    
    , '
    ' || TO_CHAR(c.position, '999,999') || '
    ' position , '
    ' || NVL(c.join_key_id,'
    ') || '
    ' join_key_id
    FROM
        dba_dimensions          d
      , dba_dim_hierarchies     h
      , dba_dim_child_of        c
    WHERE
          d.owner          = h.owner
      AND d.dimension_name = h.dimension_name
      AND d.owner          = c.owner
      AND d.dimension_name = c.dimension_name
      AND h.hierarchy_name = c.hierarchy_name
    ORDER BY
        d.owner
      , d.dimension_name
      , h.hierarchy_name
      , c.position DESC;
    
    
    prompt
    [<a class="noLink" href="#top">Top</a>]
    <p>



    -- +----------------------------------------------------------------------------+
    -- |                                 - CUBES -                                  |
    -- +----------------------------------------------------------------------------+
    
    prompt <a name="dba_cubes"></a>
    
    prompt Cubes
    CLEAR COLUMNS BREAKS COMPUTES
    
    COLUMN owner                    FORMAT a75                 HEADING 'Owner'            ENTMAP off
    COLUMN cube_name                FORMAT a75                 HEADING 'Cube Name'        ENTMAP off
    COLUMN invalid                  FORMAT a75                 HEADING 'Valid?'           ENTMAP off
    COLUMN display_name             FORMAT a75                 HEADING 'Display Name'     ENTMAP off
    COLUMN description              FORMAT a275                HEADING 'Description'      ENTMAP off
    
    BREAK ON report ON owner
    
    SELECT
    
    '
    ' || c.owner || '
    ' owner
      , c.cube_name                                                                      cube_name
      , DECODE(   c.invalid
                , 'O'
    
    , '
    Yes
    '
                , '1'
    
    , '
    No
    '
                , 'Y'
    
    , '
    No
    '
                , 'N'
    
    , '
    Yes
    ' , '
    ' || invalid || '
    ') invalid
      , c.display_name                                                                   display_name 
      , REPLACE(REPLACE(c.description, '<', '\<'), '>', '\>')                      description
    FROM
        dba_olap_cubes   c
    ORDER BY
        c.owner
      , c.cube_name;
    
    
    prompt
    [<a class="noLink" href="#top">Top</a>]
    <p>



    -- +----------------------------------------------------------------------------+
    -- |                          - MATERIALIZED VIEWS -                            |
    -- +----------------------------------------------------------------------------+
    
    prompt <a name="dba_olap_materialized_views"></a>
    
    prompt Materialized Views
    CLEAR COLUMNS BREAKS COMPUTES
    
    COLUMN owner                FORMAT a75     HEADING 'Owner'               ENTMAP off
    COLUMN mview_name           FORMAT a75     HEADING 'MView|Name'          ENTMAP off
    COLUMN master_link          FORMAT a75     HEADING 'Master|Link'         ENTMAP off
    COLUMN updatable            FORMAT a75     HEADING 'Updatable?'          ENTMAP off
    COLUMN update_log           FORMAT a75     HEADING 'Update|Log'          ENTMAP off
    COLUMN rewrite_enabled      FORMAT a75     HEADING 'Rewrite|Enabled?'    ENTMAP off
    COLUMN refresh_mode         FORMAT a75     HEADING 'Refresh|Mode'        ENTMAP off
    COLUMN refresh_method       FORMAT a75     HEADING 'Refresh|Method'      ENTMAP off
    COLUMN build_mode           FORMAT a75     HEADING 'Build|Mode'          ENTMAP off
    COLUMN fast_refreshable     FORMAT a75     HEADING 'Fast|Refreshable'    ENTMAP off
    COLUMN last_refresh_type    FORMAT a75     HEADING 'Last Refresh|Type'   ENTMAP off
    COLUMN last_refresh_date    FORMAT a75     HEADING 'Last Refresh|Date'   ENTMAP off
    COLUMN staleness            FORMAT a75     HEADING 'Staleness'           ENTMAP off
    COLUMN compile_state        FORMAT a75     HEADING 'Compile State'       ENTMAP off
    
    BREAK ON owner
    
    SELECT
    
    '
    ' || m.owner || '
    ' owner
      , m.mview_name                                                                                       mview_name
      , m.master_link                                                                                      master_link
    
    , '
    ' || NVL(m.updatable,'
    ') || '
    ' updatable
      , update_log                                                                                         update_log
    
    , '
    ' || NVL(m.rewrite_enabled,'
    ') || '
    ' rewrite_enabled
      , m.refresh_mode                                                                                     refresh_mode
      , m.refresh_method                                                                                   refresh_method
      , m.build_mode                                                                                       build_mode
      , m.fast_refreshable                                                                                 fast_refreshable
      , m.last_refresh_type                                                                                last_refresh_type
    
    , '
    ' || TO_CHAR(m.last_refresh_date, 'mm/dd/yyyy HH24:MI:SS') || '
    ' last_refresh_date
      , m.staleness                                                                                        staleness
      , DECODE(   m.compile_state
                , 'VALID'
    
    , '
    ' || m.compile_state || '
    ' , '
    ' || m.compile_state || '
    ' ) compile_state
    FROM
      dba_mviews     m 
    ORDER BY
        owner
      , mview_name
    /
    
    
    prompt
    [<a class="noLink" href="#top">Top</a>]
    <p>



    -- +----------------------------------------------------------------------------+
    -- |                        - MATERIALIZED VIEW LOGS -                          |
    -- +----------------------------------------------------------------------------+
    
    prompt <a name="dba_olap_materialized_view_logs"></a>
    
    prompt Materialized View Logs
    CLEAR COLUMNS BREAKS COMPUTES
    
    COLUMN log_owner            FORMAT a75     HEADING 'Log Owner'            ENTMAP off
    COLUMN log_table            FORMAT a75     HEADING 'Log Table'            ENTMAP off
    COLUMN master               FORMAT a75     HEADING 'Master'               ENTMAP off
    COLUMN log_trigger          FORMAT a75     HEADING 'Log Trigger'          ENTMAP off
    COLUMN rowids               FORMAT a75     HEADING 'Rowids?'              ENTMAP off
    COLUMN primary_key          FORMAT a75     HEADING 'Primary Key?'         ENTMAP off
    COLUMN object_id            FORMAT a75     HEADING 'Object ID?'           ENTMAP off
    COLUMN filter_columns       FORMAT a75     HEADING 'Filter Columns?'      ENTMAP off
    COLUMN sequence             FORMAT a75     HEADING 'Sequence?'            ENTMAP off
    COLUMN include_new_values   FORMAT a75     HEADING 'Include New Values?'  ENTMAP off
    
    BREAK ON log_owner
    
    SELECT
    
    '
    ' || ml.log_owner || '
    ' log_owner
      , ml.log_table                                                              log_table
      , ml.master                                                                 master
      , ml.log_trigger                                                            log_trigger
    
    , '
    ' || NVL(ml.rowids,'
    ') || '
    ' rowids , '
    ' || NVL(ml.primary_key,'
    ') || '
    ' primary_key , '
    ' || NVL(ml.object_id,'
    ') || '
    ' object_id , '
    ' || NVL(ml.filter_columns,'
    ') || '
    ' filter_columns , '
    ' || NVL(ml.sequence,'
    ') || '
    ' sequence , '
    ' || NVL(ml.include_new_values,'
    ') || '
    ' include_new_values
    FROM
        dba_mview_logs  ml
    ORDER BY
        ml.log_owner
      , ml.master;
    
    
    prompt
    [<a class="noLink" href="#top">Top</a>]
    <p>



    -- +----------------------------------------------------------------------------+
    -- |                   - MATERIALIZED VIEW REFRESH GROUPS -                     |
    -- +----------------------------------------------------------------------------+
    
    prompt <a name="dba_olap_materialized_view_refresh_groups"></a>
    
    prompt Materialized View Refresh Groups
    CLEAR COLUMNS BREAKS COMPUTES
    
    COLUMN owner         FORMAT a75   HEADING 'Owner'        ENTMAP off
    COLUMN name          FORMAT a75   HEADING 'Name'         ENTMAP off
    COLUMN broken        FORMAT a75   HEADING 'Broken?'      ENTMAP off
    COLUMN next_date     FORMAT a75   HEADING 'Next Date'    ENTMAP off
    COLUMN interval      FORMAT a75   HEADING 'Interval'     ENTMAP off
    
    BREAK ON report ON owner
    
    SELECT
    
    '
    ' || rowner || '
    ' owner , '
    ' || rname || '
    ' name , '
    ' || broken || '
    ' broken , '
    ' || NVL(TO_CHAR(next_date, 'mm/dd/yyyy HH24:MI:SS'), '
    ') || '
    ' next_date , '
    ' || interval || '
    ' interval
    FROM
        dba_refresh 
    ORDER BY
        rowner
      , rname
    /
    
    
    prompt
    [<a class="noLink" href="#top">Top</a>]
    <p>




    -- +============================================================================+
    -- |                                                                            |
    -- |                      <<<<<     DATA PUMP     >>>>>                         |
    -- |                                                                            |
    -- +============================================================================+
    
    
    prompt
    
    prompt
    Data Pump


    -- +----------------------------------------------------------------------------+
    -- |                           - DATA PUMP JOBS -                               |
    -- +----------------------------------------------------------------------------+
    
    prompt <a name="data_pump_jobs"></a>
    
    prompt Data Pump Jobs
    CLEAR COLUMNS BREAKS COMPUTES
    
    COLUMN owner_name         FORMAT a75            HEADING 'Owner Name'         ENTMAP off
    COLUMN job_name           FORMAT a75            HEADING 'Job Name'           ENTMAP off
    COLUMN operation          FORMAT a75            HEADING 'Operation'          ENTMAP off
    COLUMN job_mode           FORMAT a75            HEADING 'Job Mode'           ENTMAP off
    COLUMN state              FORMAT a75            HEADING 'State'              ENTMAP off
    COLUMN degree             FORMAT 999,999,999    HEADING 'Degree'             ENTMAP off
    COLUMN attached_sessions  FORMAT 999,999,999    HEADING 'Attached Sessions'  ENTMAP off
    
    SELECT
    
    '
    ' || dpj.owner_name || '
    ' owner_name
      , dpj.job_name                                                                            job_name
      , dpj.operation                                                                           operation
      , dpj.job_mode                                                                            job_mode
      , dpj.state                                                                               state
      , dpj.degree                                                                              degree
      , dpj.attached_sessions                                                                   attached_sessions
    FROM
        dba_datapump_jobs      dpj
    ORDER BY
        dpj.owner_name
      , dpj.job_name;
    
    
    prompt
    [<a class="noLink" href="#top">Top</a>]
    <p>



    -- +----------------------------------------------------------------------------+
    -- |                          - DATA PUMP SESSIONS -                            |
    -- +----------------------------------------------------------------------------+
    
    prompt <a name="data_pump_sessions"></a>
    
    prompt Data Pump Sessions
    CLEAR COLUMNS BREAKS COMPUTES
    
    COLUMN instance_name_print  FORMAT a75            HEADING 'Instance Name'    ENTMAP off
    COLUMN owner_name           FORMAT a75            HEADING 'Owner Name'       ENTMAP off
    COLUMN job_name             FORMAT a75            HEADING 'Job Name'         ENTMAP off
    COLUMN session_type         FORMAT a75            HEADING 'Session Type'     ENTMAP off
    COLUMN sid                                        HEADING 'SID'              ENTMAP off
    COLUMN serial_no                                  HEADING 'Serial#'          ENTMAP off
    COLUMN oracle_username      FORMAT a75            HEADING 'Oracle Username'  ENTMAP off
    COLUMN os_username          FORMAT a75            HEADING 'O/S Username'     ENTMAP off
    COLUMN os_pid                                     HEADING 'O/S PID'          ENTMAP off
    
    BREAK ON report ON instance_name_print ON owner_name ON job_name
    
    SELECT
    
    '
    ' || i.instance_name || '
    ' instance_name_print
      , dj.owner_name                                                                               owner_name 
      , dj.job_name                                                                                 job_name
      , ds.type                                                                                     session_type
      , s.sid                                                                                       sid
      , s.serial#                                                                                   serial_no
      , s.username                                                                                  oracle_username
      , s.osuser                                                                                    os_username
      , p.spid                                                                                      os_pid
    FROM
        gv$datapump_job         dj
      , gv$datapump_session     ds
      , gv$session              s
      , gv$instance             i
      , gv$process              p
    WHERE
          s.inst_id  = i.inst_id
      AND s.inst_id  = p.inst_id
      AND ds.inst_id = i.inst_id
      AND dj.inst_id = i.inst_id
      AND s.saddr    = ds.saddr
      AND s.paddr    = p.addr (+)
      AND dj.job_id  = ds.job_id
    ORDER BY
        i.instance_name
      , dj.owner_name
      , dj.job_name
      , ds.type;
    
    
    prompt
    [<a class="noLink" href="#top">Top</a>]
    <p>



    -- +----------------------------------------------------------------------------+
    -- |                        - DATA PUMP JOB PROGRESS -                          |
    -- +----------------------------------------------------------------------------+
    
    prompt <a name="data_pump_job_progress"></a>
    
    prompt Data Pump Job Progress
    CLEAR COLUMNS BREAKS COMPUTES
    
    COLUMN instance_name_print  FORMAT a75                 HEADING 'Instance Name'           ENTMAP off
    COLUMN owner_name           FORMAT a75                 HEADING 'Owner Name'              ENTMAP off
    COLUMN job_name             FORMAT a75                 HEADING 'Job Name'                ENTMAP off
    COLUMN session_type         FORMAT a75                 HEADING 'Session Type'            ENTMAP off
    COLUMN start_time                                      HEADING 'Start Time'              ENTMAP off
    COLUMN time_remaining       FORMAT 9,999,999,999,999   HEADING 'Time Remaining (min.)'   ENTMAP off
    COLUMN sofar                FORMAT 9,999,999,999,999   HEADING 'Bytes Completed So Far'  ENTMAP off
    COLUMN totalwork            FORMAT 9,999,999,999,999   HEADING 'Total Bytes for Job'     ENTMAP off
    COLUMN pct_completed                                   HEADING '% Completed'             ENTMAP off
    
    BREAK ON report ON instance_name_print ON owner_name ON job_name
    
    SELECT
    
    '
    ' || i.instance_name || '
    ' instance_name_print
      , dj.owner_name                                                                                owner_name 
      , dj.job_name                                                                                  job_name
      , ds.type                                                                                      session_type
    
    , '
    ' || TO_CHAR(sl.start_time,'mm/dd/yyyy HH24:MI:SS') || '
    ' start_time
      , ROUND(sl.time_remaining/60,0)                                                                time_remaining
      , sl.sofar                                                                                     sofar
      , sl.totalwork                                                                                 totalwork
    
    , '
    ' || TRUNC(ROUND((sl.sofar/sl.totalwork) * 100, 1)) || '%
    ' pct_completed
    FROM
        gv$datapump_job         dj
      , gv$datapump_session     ds
      , gv$session              s
      , gv$instance             i
      , gv$session_longops      sl
    WHERE
          s.inst_id  = i.inst_id
      AND ds.inst_id = i.inst_id
      AND dj.inst_id = i.inst_id
      AND sl.inst_id = i.inst_id
      AND s.saddr    = ds.saddr
      AND dj.job_id  = ds.job_id
      AND sl.sid     = s.sid
      AND sl.serial# = s.serial#
      AND ds.type    = 'MASTER'
    ORDER BY
        i.instance_name
      , dj.owner_name
      , dj.job_name
      , ds.type;
    
    
    prompt
    [<a class="noLink" href="#top">Top</a>]
    <p>




    -- +============================================================================+
    -- |                                                                            |
    -- |                     <<<<<     NETWORKING    >>>>>                          |
    -- |                                                                            |
    -- +============================================================================+
    
    
    prompt
    
    prompt
    Networking


    -- +----------------------------------------------------------------------------+
    -- |                     - MTS DISPATCHER STATISTICS -                          |
    -- +----------------------------------------------------------------------------+
    
    prompt <a name="mts_dispatcher_statistics"></a>
    
    prompt MTS Dispatcher Statistics
    prompt Dispatcher rate
    
    CLEAR COLUMNS BREAKS COMPUTES
    
    COLUMN name                    HEADING 'Name'                  ENTMAP off
    COLUMN avg_loop_rate           HEADING 'Avg|Loop|Rate'         ENTMAP off
    COLUMN avg_event_rate          HEADING 'Avg|Event|Rate'        ENTMAP off
    COLUMN avg_events_per_loop     HEADING 'Avg|Events|Per|Loop'   ENTMAP off
    COLUMN avg_msg_rate            HEADING 'Avg|Msg|Rate'          ENTMAP off
    COLUMN avg_svr_buf_rate        HEADING 'Avg|Svr|Buf|Rate'      ENTMAP off
    COLUMN avg_svr_byte_rate       HEADING 'Avg|Svr|Byte|Rate'     ENTMAP off
    COLUMN avg_svr_byte_per_buf    HEADING 'Avg|Svr|Byte|Per|Buf'  ENTMAP off
    COLUMN avg_clt_buf_rate        HEADING 'Avg|Clt|Buf|Rate'      ENTMAP off
    COLUMN avg_clt_byte_rate       HEADING 'Avg|Clt|Byte|Rate'     ENTMAP off
    COLUMN avg_clt_byte_per_buf    HEADING 'Avg|Clt|Byte|Per|Buf'  ENTMAP off
    COLUMN avg_buf_rate            HEADING 'Avg|Buf|Rate'          ENTMAP off
    COLUMN avg_byte_rate           HEADING 'Avg|Byte|Rate'         ENTMAP off
    COLUMN avg_byte_per_buf        HEADING 'Avg|Byte|Per|Buf'      ENTMAP off
    COLUMN avg_in_connect_rate     HEADING 'Avg|In|Connect|Rate'   ENTMAP off
    COLUMN avg_out_connect_rate    HEADING 'Avg|Out|Connect|Rate'  ENTMAP off
    COLUMN avg_reconnect_rate      HEADING 'Avg|Reconnect|Rate'    ENTMAP off
    
    SELECT
        name
      , avg_loop_rate
      , avg_event_rate
      , avg_events_per_loop
      , avg_msg_rate
      , avg_svr_buf_rate
      , avg_svr_byte_rate
      , avg_svr_byte_per_buf
      , avg_clt_buf_rate
      , avg_clt_byte_rate
      , avg_clt_byte_per_buf
      , avg_buf_rate
      , avg_byte_rate
      , avg_byte_per_buf
      , avg_in_connect_rate
      , avg_out_connect_rate
      , avg_reconnect_rate
    FROM
        v$dispatcher_rate
    ORDER BY
        name;
    
    
    COLUMN protocol           HEADING 'Protocol'         ENTMAP off
    COLUMN total_busy_rate    HEADING 'Total Busy Rate'  ENTMAP off
    
    prompt Dispatcher busy rate
    
    SELECT
        a.network protocol
      , (SUM(a.BUSY) / (SUM(a.BUSY) + SUM(a.IDLE))) total_busy_rate
    FROM
        v$dispatcher a
    GROUP BY
        a.network;
    
    
    prompt
    [<a class="noLink" href="#top">Top</a>]
    <p>



    -- +----------------------------------------------------------------------------+
    -- |             - MTS DISPATCHER RESPONSE QUEUE WAIT STATS -                   |
    -- +----------------------------------------------------------------------------+
    
    prompt <a name="mts_dispatcher_response_queue_wait_stats"></a>
    
    prompt MTS Dispatcher Response Queue Wait Stats
    CLEAR COLUMNS BREAKS COMPUTES
    
    COLUMN type        HEADING 'Type'                         ENTMAP off
    COLUMN avg_wait    HEADING 'Avg Wait Time Per Response'   ENTMAP off
    
    SELECT
        a.type
      , DECODE( SUM(a.totalq), 0, 'NO RESPONSES', SUM(a.wait)/SUM(a.totalq) || ' HUNDREDTHS OF SECONDS') avg_wait
    FROM
        v$queue a
    WHERE
        a.type='DISPATCHER'
    GROUP BY
        a.type;
    
    
    
    prompt
    [<a class="noLink" href="#top">Top</a>]
    <p>



    -- +----------------------------------------------------------------------------+
    -- |                  - MTS SHARED SERVER WAIT STATISTICS -                     |
    -- +----------------------------------------------------------------------------+
    
    prompt <a name="mts_shared_server_wait_statistics"></a>
    
    prompt MTS Shared Server Wait Statistics
    CLEAR COLUMNS BREAKS COMPUTES
    
    COLUMN avg_wait   HEADING 'Average Wait Time Per Request'  ENTMAP off
    
    SELECT
        DECODE(a.totalq, 0, 'No Requests', a.wait/a.totalq || ' HUNDREDTHS OF SECONDS') avg_wait
    FROM
        v$queue a
    WHERE
        a.type='COMMON';
    
    
    prompt
    [<a class="noLink" href="#top">Top</a>]
    <p>




    -- +============================================================================+
    -- |                                                                            |
    -- |                      <<<<<     REPLICATION    >>>>>                        |
    -- |                                                                            |
    -- +============================================================================+
    
    
    prompt
    
    prompt
    Replication


    -- +----------------------------------------------------------------------------+
    -- |                         - REPLICATION SUMMARY -                            |
    -- +----------------------------------------------------------------------------+
    
    prompt <a name="replication_summary"></a>
    
    prompt Replication Summary
    CLEAR COLUMNS BREAKS COMPUTES
    
    COLUMN gname           HEADING 'Current Database Name'       ENTMAP off
    COLUMN admin_request   HEADING '# Admin. Requests'           ENTMAP off
    COLUMN status          HEADING '# Admin. Request Errors'     ENTMAP off
    COLUMN df_txn          HEADING '# Def. Trans'                ENTMAP off
    COLUMN df_error        HEADING '# Def. Tran Errors'          ENTMAP off
    COLUMN complete        HEADING '# Complete Trans in Queue'   ENTMAP off
    
    SELECT
        g.global_name           gname
      , d.admin_request         admin_request
      , e.status                status
      , dt.tran                 df_txn
      , de.error                df_error
      , c.complete              complete
    FROM
        (select global_name from global_name)  g
      , (select count(id) admin_request 
         from sys.dba_repcatlog)               d
      , (select count(status) status 
         from sys.dba_repcatlog 
         where status = 'ERROR')               e
      , (select count(*) tran 
         from deftrandest)                     dt
      , (select count(*) error 
    	from deferror)                     de
      , (select count(a.deferred_tran_id) complete 
         from deftran a 
         where a.deferred_tran_id not in 
               (select b.deferred_tran_id 
                from deftrandest b)
        )                                      c
    /
    
    
    prompt
    [<a class="noLink" href="#top">Top</a>]
    <p>



    -- +----------------------------------------------------------------------------+
    -- |                        - DEFERRED TRANSACTIONS -                           |
    -- +----------------------------------------------------------------------------+
    
    prompt <a name="deferred_transactions"></a>
    
    prompt Deferred Transactions
    CLEAR COLUMNS BREAKS COMPUTES
    
    COLUMN source     HEADING 'Source'              ENTMAP off
    COLUMN dest       HEADING 'Target'              ENTMAP off
    COLUMN trans      HEADING '# Def. Trans'        ENTMAP off
    COLUMN errors     HEADING '# Def. Tran Errors'  ENTMAP off
    
    SELECT
        source
      , dest
      , trans
      , errors
    FROM
        (select
             e.origin_tran_db   source
           , e.destination      dest
           , 'n/a'              trans
           , to_char(count(*))  errors
         from
             deferror e 
         group by
             e.origin_tran_db
           , e.destination 
         union  
         select
             g.global_name      source
           , d.dblink           dest
           , to_char(count(*))  trans
           , 'n/a'              errors
         from
             (select global_name from global_name)  g
           ,  deftran                               t
           ,  deftrandest                           d 
         where
              d.deferred_tran_id = t.deferred_tran_id 
         group by
              g.global_name, d.dblink 
         );
    
    
    prompt
    [<a class="noLink" href="#top">Top</a>]
    <p>



    -- +----------------------------------------------------------------------------+
    -- |                     - ADMINISTRATIVE REQUEST JOBS -                        |
    -- +----------------------------------------------------------------------------+
    
    prompt <a name="administrative_request_jobs"></a>
    
    prompt Administrative Request Jobs
    CLEAR COLUMNS BREAKS COMPUTES
    
    COLUMN job                          HEADING 'Job ID'             ENTMAP off
    COLUMN priv_user                    HEADING 'Privilege Schema'   ENTMAP off
    COLUMN what            FORMAT a175  HEADING 'Definition'         ENTMAP off
    COLUMN status                       HEADING 'Status'             ENTMAP off
    COLUMN next_date       FORMAT a75   HEADING 'Start'              ENTMAP off
    COLUMN interval                     HEADING 'Interval'           ENTMAP off
    
    SELECT
        job                                            job
      , priv_user                                      priv_user
      , what                                           what
      , DECODE(broken, 'Y', 'Broken', 'Normal')        status
    
    , '
    ' || NVL(TO_CHAR(next_date, 'mm/dd/yyyy HH24:MI:SS'), '
    ') || '
    ' next_date
      , interval
    FROM
        sys.dba_jobs 
    WHERE
        what LIKE '%dbms_repcat.do_deferred_repcat_admin%' 
    ORDER BY
        1;
    
    
    prompt
    [<a class="noLink" href="#top">Top</a>]
    <p>



    -- +----------------------------------------------------------------------------+
    -- |                      - INITIALIZATION PARAMETERS -                         |
    -- +----------------------------------------------------------------------------+
    
    prompt <a name="rep_initialization_parameters"></a>
    
    prompt Initialization Parameters
    CLEAR COLUMNS BREAKS COMPUTES
    
    COLUMN pname             FORMAT a55  HEADING 'Parameter Name'    ENTMAP off
    COLUMN value             FORMAT a55  HEADING 'Value'             ENTMAP off
    COLUMN isdefault         FORMAT a55  HEADING 'Is Default?'       ENTMAP off
    COLUMN issys_modifiable  FORMAT a55  HEADING 'Is Dynamic?'       ENTMAP off
    
    SELECT
        DECODE(   isdefault
                , 'FALSE'
                , '' || SUBSTR(name,0,512) || ''
                , '' || SUBSTR(name,0,512) || '' ) pname
      , DECODE(   isdefault
                , 'FALSE'
                , '' || SUBSTR(value,0,512) || ''
                , SUBSTR(value,0,512) ) value
      , DECODE(   isdefault
                , 'FALSE'
    
    , '
    ' || isdefault || '
    ' , '
    ' || isdefault || '
    ') isdefault
      , DECODE(   isdefault
                , 'FALSE'
    
    , '
    ' || issys_modifiable || '
    ' , '
    ' || issys_modifiable || '
    ') issys_modifiable
    FROM
        v$parameter 
    WHERE
        name IN (   'compatible'
                  , 'commit_point_strength'
                  , 'dblink_encrypt_login'
                  , 'distributed_lock_timeout'
                  , 'distributed_recovery_connection_hold_time'
                  , 'distributed_transactions'
                  , 'global_names'
                  , 'job_queue_interval'
                  , 'job_queue_processes'
                  , 'max_transaction_branches'
                  , 'open_links'
                  , 'open_links_per_instance'
                  , 'parallel_automatic_tuning'
                  , 'parallel_max_servers'
                  , 'parallel_min_servers'
                  , 'parallel_server_idle_time'
                  , 'processes'
                  , 'remote_dependencies_mode'
                  , 'replication_dependency_tracking'
                  , 'shared_pool_size'
                  , 'utl_file_dir'
      )
    ORDER BY name;
    
    
    prompt
    [<a class="noLink" href="#top">Top</a>]
    <p>



    -- +----------------------------------------------------------------------------+
    -- |                        - (SCHEDULE) - PURGE JOBS -                         |
    -- +----------------------------------------------------------------------------+
    
    prompt <a name="schedule_purge_jobs"></a>
    
    prompt (Schedule) - Purge Jobs
    CLEAR COLUMNS BREAKS COMPUTES
    
    COLUMN job                          HEADING 'Job ID'            ENTMAP off
    COLUMN priv_user                    HEADING 'Privilege Schema'  ENTMAP off
    COLUMN status                       HEADING 'Status'            ENTMAP off
    COLUMN next_date       FORMAT a75   HEADING 'Start'             ENTMAP off
    COLUMN interval                     HEADING 'Interval'          ENTMAP off
    
    SELECT
        j.job                                           job
      , j.priv_user                                     priv_user
      , decode(broken, 'Y', 'Broken', 'Normal')         status
    
    , '
    ' || NVL(TO_CHAR(s.next_date, 'mm/dd/yyyy HH24:MI:SS'), '
    ') || '
    ' next_date
      , s.interval                                      interval 
    FROM
        sys.defschedule   s
      , sys.dba_jobs      j 
    WHERE
          s.dblink = (select global_name from global_name) 
      AND s.interval is not null AND s.job = j.job 
    ORDER BY
        1;
    
    
    prompt
    [<a class="noLink" href="#top">Top</a>]
    <p>



    -- +----------------------------------------------------------------------------+
    -- |                       - (SCHEDULE) - PUSH JOBS -                           |
    -- +----------------------------------------------------------------------------+
    
    prompt <a name="schedule_push_jobs"></a>
    
    prompt (Schedule) - Push Jobs
    CLEAR COLUMNS BREAKS COMPUTES
    
    COLUMN job                         HEADING 'Job ID'             ENTMAP off
    COLUMN priv_user                   HEADING 'Privilege Schema'   ENTMAP off
    COLUMN dblink                      HEADING 'Target'             ENTMAP off
    COLUMN broken                      HEADING 'Status'             ENTMAP off
    COLUMN next_date      FORMAT a75   HEADING 'Start'              ENTMAP off
    COLUMN interval                    HEADING 'Interval'           ENTMAP off
    
    SELECT
        j.job                                          job
      , j.priv_user                                    priv_user
      , s.dblink                                       dblink
      , decode(j.broken, 'Y', 'Broken', 'Normal')      broken
    
    , '
    ' || NVL(TO_CHAR(s.next_date, 'mm/dd/yyyy HH24:MI:SS'), '
    ') || '
    ' next_date
      , s.interval                                     interval
    FROM
        sys.defschedule  s
      , sys.dba_jobs     j 
    WHERE
          s.dblink != (select global_name from global_name) 
      AND s.interval is not null
      AND s.job = j.job 
    ORDER BY
        1;
    
    
    prompt
    [<a class="noLink" href="#top">Top</a>]
    <p>



    -- +----------------------------------------------------------------------------+
    -- |                      - (SCHEDULE) - REFRESH JOBS -                         |
    -- +----------------------------------------------------------------------------+
    
    prompt <a name="schedule_refresh_jobs"></a>
    
    prompt (Schedule) - Refresh Jobs
    CLEAR COLUMNS BREAKS COMPUTES
    
    COLUMN job                           HEADING 'Job ID'             ENTMAP off
    COLUMN priv_user                     HEADING 'Privilege Schema'   ENTMAP off
    COLUMN refresh_group                 HEADING 'Refresh Group'      ENTMAP off
    COLUMN broken                        HEADING 'Status'             ENTMAP off
    COLUMN next_date         FORMAT a75  HEADING 'Start'              ENTMAP off
    COLUMN interval          FORMAT a75  HEADING 'Interval'           ENTMAP off
    
    SELECT
        j.job                                          job
      , j.priv_user                                    priv_user
      , r.rowner || '.' || r.rname                     refresh_group
      , decode(j.broken, 'Y', 'Broken', 'Normal')      broken
    
    , '
    ' || NVL(TO_CHAR(j.next_date, 'mm/dd/yyyy HH24:MI:SS'), '
    ') || '
    ' next_date , '
    ' || j.interval || '
    ' interval
    FROM
        sys.dba_refresh  r
      , sys.dba_jobs     j
    WHERE
        r.job = j.job 
    order by
        1;
    
    
    prompt
    [<a class="noLink" href="#top">Top</a>]
    <p>



    -- +----------------------------------------------------------------------------+
    -- |                    - (MULTI-MASTER) - MASTER GROUPS -                      |
    -- +----------------------------------------------------------------------------+
    
    prompt <a name="multimaster_master_groups"></a>
    
    prompt (Multi-Master) - Master Groups
    CLEAR COLUMNS BREAKS COMPUTES
    
    COLUMN name                       HEADING 'Master Group'             ENTMAP off
    COLUMN num_def_trans              HEADING '# Def. Trans'             ENTMAP off
    COLUMN num_tran_errors            HEADING '# Def. Tran Errors'       ENTMAP off
    COLUMN num_admin_requests         HEADING '# Admin. Requests'        ENTMAP off
    COLUMN num_admin_request_errors   HEADING '# Admin. Request Errors'  ENTMAP off
    
    SELECT
        g.gname          name
      , NVL(t.cnt1, 0)   num_def_trans
      , NVL(ie.cnt2, 0)  num_tran_errors
      , NVL(a.cnt3, 0)   num_admin_requests
      , NVL(b.cnt4, 0)   num_admin_request_errors
    FROM 
        (select distinct gname 
         from dba_repgroup 
         where master='Y')                             g
      , (select
             rog                        rog
           , count(dt.deferred_tran_id) cnt1 
         from (select distinct
                   ro.gname            rog
                 , d.deferred_tran_id  dft 
               from
                   dba_repobject  ro
                 , defcall        d
                 , deftrANDest    td 
               where
                     ro.sname = d.schemaname 
                 AND ro.oname = d.packagename 
                 AND ro.type in ('TABLE', 'PACKAGE', 'SNAPSHOT') 
                 AND td.deferred_tran_id = d.deferred_tran_id 
              ) t0, deftrANDest dt 
         where
             dt.deferred_tran_id = dft 
         group by rog 
        )                                              t
      , (select distinct
             ro.gname
           , count(distinct e.deferred_tran_id) cnt2 
         from
             dba_repobject  ro
           , defcall        d
           , deferror       e 
         where
               ro.sname = d.schemaname 
           AND ro.oname = d.packagename 
           AND ro.type in ('TABLE', 'PACKAGE', 'SNAPSHOT') 
           AND e.deferred_tran_id = d.deferred_tran_id 
           AND e.callno = d.callno 
         group by ro.gname 
        )                                              ie
      , (select gname, count(*) cnt3 
         from dba_repcatlog 
         group by gname 
        )                                              a
      , (select gname, count(*) cnt4 
         from dba_repcatlog  
         where status = 'ERROR' 
         group BY gname 
        )                                              b 
    WHERE
          g.gname = ie.gname (+) 
      AND g.gname = t.rog (+) 
      AND g.gname = a.gname (+) 
      AND g.gname = b.gname (+) 
    ORDER BY
        g.gname;
    
    
    prompt
    [<a class="noLink" href="#top">Top</a>]
    <p>



    -- +----------------------------------------------------------------------------+
    -- |               - (MULTI-MASTER) - MASTER GROUPS AND SITES -                 |
    -- +----------------------------------------------------------------------------+
    
    prompt <a name="multimaster_master_groups_and_sites"></a>
    
    prompt (Multi-Master) - Master Groups and Sites
    CLEAR COLUMNS BREAKS COMPUTES
    
    COLUMN master_group             HEADING 'Master Group'            ENTMAP off
    COLUMN sites                    HEADING 'Sites'                   ENTMAP off
    COLUMN master_definition_site   HEADING 'Master Definition Site'  ENTMAP off
    
    SELECT
        gname                                     master_group
      , dblink                                    sites
      , DECODE(masterdef, 'Y', 'YES', 'N', 'NO')  master_definition_site
    FROM
        sys.dba_repsites
    WHERE
          master = 'Y' 
      AND gname NOT IN (
                          SELECT gname from sys.dba_repsites 
                          WHERE snapmaster = 'Y'
                        )
    ORDER BY
        gname;
    
    
    prompt
    [<a class="noLink" href="#top">Top</a>]
    <p>



    -- +----------------------------------------------------------------------------+
    -- |               - (MATERIALIZED VIEW) - MASTER SITE SUMMARY -                |
    -- +----------------------------------------------------------------------------+
    
    prompt <a name="materialized_view_master_site_summary"></a>
    
    prompt (Materialized View) - Master Site Summary
    CLEAR COLUMNS BREAKS COMPUTES
    
    COLUMN mgroup     HEADING '# of Master Groups'          ENTMAP off
    COLUMN mvgroup    HEADING '# of Registered MV Groups'   ENTMAP off
    COLUMN mv         HEADING '# of Registered MVs'         ENTMAP off
    COLUMN mvlog      HEADING '# of MV Logs'                ENTMAP off
    COLUMN template   HEADING '# of Templates'              ENTMAP off
    
    SELECT
        a.mgroup      mgroup
      , b.mvgroup     mvgroup
      , c.mv          mv
      , d.mvlog       mvlog
      , e.template    template
    FROM 
        (select count(g.gname) mgroup 
         from sys.dba_repgroup g, sys.dba_repsites s 
         where g.master = 'Y' 
           and s.master = 'Y' 
           and g.gname = s.gname 
           and s.my_dblink = 'Y')                      a
      , (select count(*) mvGROUP 
         from sys.dba_registered_snapshot_groups)      b
      , (select count(*) mv 
         from sys.dba_registered_snapshots)            c
      , (select count(*) mvlog 
         from sys.dba_snapshot_logs)                   d
      , (select count(*) template 
         from sys.dba_repcat_refresh_templates)        e;
    
    
    
    CLEAR COLUMNS BREAKS COMPUTES
    
    COLUMN log_owner        FORMAT a75     HEADING 'Log Owner'         ENTMAP off
    COLUMN log_table                       HEADING 'Log Table'         ENTMAP off
    COLUMN master                          HEADING 'Master'            ENTMAP off
    COLUMN rowids           FORMAT a75     HEADING 'Row ID'            ENTMAP off
    COLUMN primary_key      FORMAT a75     HEADING 'Primary Key'       ENTMAP off
    COLUMN filter_columns   FORMAT a75     HEADING 'Filter Columns'    ENTMAP off
    
    BREAK ON report ON log_owner
    
    SELECT
    
    '
    ' || log_owner || '
    ' log_owner
      , log_table
      , master
    
    , '
    ' || rowids || '
    ' rowids , '
    ' || primary_key || '
    ' primary_key , '
    ' || filter_columns || '
    ' filter_columns
    FROM
        sys.dba_snapshot_logs 
    ORDER BY
        log_owner;
    
    
    CLEAR COLUMNS BREAKS COMPUTES
    
    COLUMN ref_temp_name      HEADING 'Refresh Template Name'      ENTMAP off
    COLUMN owner              HEADING 'Owner'                      ENTMAP off
    COLUMN public_template    HEADING 'Public'                     ENTMAP off
    COLUMN instantiated       HEADING '# of Instantiated Sites'    ENTMAP off
    COLUMN template_comment   HEADING 'Comment'                    ENTMAP off
    
    SELECT
        rt.refresh_template_name                   ref_temp_name
      , owner                                      owner
      , decode(public_template, 'Y', 'YES', 'NO')  public_template
      , rs.instantiated                            instantiated
      , rt.template_comment                        template_comment
    FROM
        sys.dba_repcat_refresh_templates rt
      , (SELECT y.refresh_template_name, count(x.status) instantiated  
         FROM sys.dba_repcat_template_sites x, sys.dba_repcat_refresh_templates y 
         WHERE x.refresh_template_name(+) = y.refresh_template_name 
         GROUP BY y.refresh_template_name) rs 
    WHERE
        rt.refresh_template_name(+) = rs.refresh_template_name 
    ORDER BY
        rt.refresh_template_name;
    
    
    prompt
    [<a class="noLink" href="#top">Top</a>]
    <p>



    -- +----------------------------------------------------------------------------+
    -- |               - (MATERIALIZED VIEW) - MASTER SITE LOGS -                   |
    -- +----------------------------------------------------------------------------+
    
    prompt <a name="materialized_view_master_site_logs"></a>
    
    prompt (Materialized View) - Master Site Logs
    CLEAR COLUMNS BREAKS COMPUTES
    
    COLUMN log_owner        FORMAT a75     HEADING 'Log Owner'         ENTMAP off
    COLUMN log_table                       HEADING 'Log Table'         ENTMAP off
    COLUMN master                          HEADING 'Master'            ENTMAP off
    COLUMN rowids           FORMAT a75     HEADING 'Row ID'            ENTMAP off
    COLUMN primary_key      FORMAT a75     HEADING 'Primary Key'       ENTMAP off
    COLUMN filter_columns   FORMAT a75     HEADING 'Filter Columns'    ENTMAP off
    
    BREAK ON report ON log_owner
    
    SELECT
    
    '
    ' || log_owner || '
    ' log_owner
      , log_table
      , master
    
    , '
    ' || rowids || '
    ' rowids , '
    ' || primary_key || '
    ' primary_key , '
    ' || filter_columns || '
    ' filter_columns
    FROM
        sys.dba_snapshot_logs 
    ORDER BY
        log_owner;
    
    
    prompt
    [<a class="noLink" href="#top">Top</a>]
    <p>



    -- +----------------------------------------------------------------------------+
    -- |             - (MATERIALIZED VIEW) - MASTER SITE TEMPLATES -                |
    -- +----------------------------------------------------------------------------+
    
    prompt <a name="materialized_view_master_site_templates"></a>
    
    prompt (Materialized View) - Master Site Templates
    CLEAR COLUMNS BREAKS COMPUTES
    
    COLUMN owner                   HEADING 'Owner'                     ENTMAP off
    COLUMN refresh_template_name   HEADING 'Refresh Template Name'     ENTMAP off
    COLUMN public_template         HEADING 'Public'                    ENTMAP off
    COLUMN instantiated            HEADING '# of Instantiated Sites'   ENTMAP off
    COLUMN template_comment        HEADING 'Comment'                   ENTMAP off
    
    BREAK ON owner
    
    SELECT
    
    '
    ' || owner || '
    ' owner
      , rt.refresh_template_name                                                       refresh_template_name
      , decode(public_template, 'Y', 'YES', 'NO')                                      public_template
      , rs.instantiated                                                                instantiated
      , rt.template_comment                                                            template_comment
    FROM
        sys.dba_repcat_refresh_templates rt
      , ( SELECT y.refresh_template_name, count(x.status) instantiated  
          FROM sys.dba_repcat_template_sites x, sys.dba_repcat_refresh_templates y 
          WHERE x.refresh_template_name(+) = y.refresh_template_name 
          GROUP BY y.refresh_template_name
        ) rs 
    WHERE
        rt.refresh_template_name(+) = rs.refresh_template_name 
    ORDER BY
        owner;
    
    
    prompt
    [<a class="noLink" href="#top">Top</a>]
    <p>



    -- +----------------------------------------------------------------------------+
    -- |                  - (MATERIALIZED VIEW) - SITE SUMMARY -                    |
    -- +----------------------------------------------------------------------------+
    
    prompt <a name="materialized_view_summary"></a>
    
    prompt (Materialized View) - Site Summary
    CLEAR COLUMNS BREAKS COMPUTES
    
    COLUMN mvgroup   HEADING '# of Materialized View Groups'  ENTMAP off
    COLUMN mv        HEADING '# of Materialized Views'        ENTMAP off
    COLUMN rgroup    HEADING '# of Refresh Groups'            ENTMAP off
    
    SELECT
        a.mvgroup    mvgroup
      , b.mv         mv
      , c.rgroup     rgroup
    FROM
        (  select count(s.gname) mvgroup 
           from sys.dba_repsites s 
           where s.snapmaster = 'Y')         a
      , (  select count(*) mv 
           from sys.dba_snapshots)           b
      , (  select count(*) rgroup
           from sys.dba_refresh)             c;
    
    
    prompt
    [<a class="noLink" href="#top">Top</a>]
    <p>



    -- +----------------------------------------------------------------------------+
    -- |                 - (MATERIALIZED VIEW) - SITE GROUPS -                      |
    -- +----------------------------------------------------------------------------+
    
    prompt <a name="materialized_view_groups"></a>
    
    prompt (Materialized View) - Site Groups
    CLEAR COLUMNS BREAKS COMPUTES
    
    COLUMN gname         HEADING 'Name'           ENTMAP off
    COLUMN dblink        HEADING 'Master'         ENTMAP off
    COLUMN propagation   HEADING 'Propagation'    ENTMAP off
    COLUMN remark        HEADING 'Remark'         ENTMAP off
    
    SELECT
        s.gname                                      gname
      , s.dblink                                     dblink
      , decode(s.prop_updates, 0, 'Async', 'Sync')   propagation
      , g.schema_comment                             remark
    FROM
        sys.dba_repsites  s
      , sys.dba_repgroup  g
    WHERE
          s.gname = g.gname
      AND s.snapmaster = 'Y'
    ORDER BY
        s.gname;
    
    
    prompt
    [<a class="noLink" href="#top">Top</a>]
    <p>



    -- +----------------------------------------------------------------------------+
    -- |            - (MATERIALIZED VIEW) - SITE MATERIALIZED VIEWS -               |
    -- +----------------------------------------------------------------------------+
    
    prompt <a name="materialized_view_materialized_views"></a>
    
    prompt (Materialized View) - Site Materialized Views
    CLEAR COLUMNS BREAKS COMPUTES
    
    COLUMN owner          FORMAT a75  HEADING 'Owner'           ENTMAP off
    COLUMN name                       HEADING 'Name'            ENTMAP off
    COLUMN master_owner               HEADING 'Master Owner'    ENTMAP off
    COLUMN master_table               HEADING 'Master Table'    ENTMAP off
    COLUMN master_link                HEADING 'Master Link'     ENTMAP off
    COLUMN type                       HEADING 'Type'            ENTMAP off
    COLUMN updatable      FORMAT a75  HEADING 'Updatable?'      ENTMAP off
    COLUMN can_use_log    FORMAT a75  HEADING 'Can Use Log?'    ENTMAP off
    COLUMN last_refresh   FORMAT a75  HEADING 'Last Refresh'    ENTMAP off
    
    BREAK ON owner
    
    SELECT
    
    '
    ' || s.owner || '
    ' owner
      , s.name                                                                            name
      , s.master_owner                                                                    master_owner
      , s.master                                                                          master_table
      , s.master_link                                                                     master_link
      , nls_initcap(s.type)                                                               type
    
    , '
    ' || DECODE(s.updatable, 'YES', 'YES', 'NO') || '
    ' updatable , '
    ' || DECODE(s.can_use_log,'YES', 'YES', 'NO') || '
    ' can_use_log , '
    ' || NVL(TO_CHAR(m.last_refresh_date, 'mm/dd/yyyy HH24:MI:SS'), '
    ') || '
    ' last_refresh
    FROM
        sys.dba_snapshots  s
      , sys.dba_mviews     m 
    WHERE
          s.name = m.mview_name 
      AND s.owner = m.owner
    ORDER BY
        s.owner
      , s.name;
    
    
    prompt
    [<a class="noLink" href="#top">Top</a>]
    <p>



    -- +----------------------------------------------------------------------------+
    -- |              - (MATERIALIZED VIEW) - SITE REFRESH GROUPS -                 |
    -- +----------------------------------------------------------------------------+
    
    prompt <a name="materialized_view_refresh_groups"></a>
    
    prompt (Materialized View) - Site Refresh Groups
    CLEAR COLUMNS BREAKS COMPUTES
    
    COLUMN owner         FORMAT a75   HEADING 'Owner'        ENTMAP off
    COLUMN name          FORMAT a75   HEADING 'Name'         ENTMAP off
    COLUMN broken        FORMAT a75   HEADING 'Broken?'      ENTMAP off
    COLUMN next_date     FORMAT a75   HEADING 'Next Date'    ENTMAP off
    COLUMN interval      FORMAT a75   HEADING 'Interval'     ENTMAP off
    
    BREAK ON owner
    
    SELECT
    
    '
    ' || rowner || '
    ' owner , '
    ' || rname || '
    ' name , '
    ' || broken || '
    ' broken , '
    ' || NVL(TO_CHAR(next_date, 'mm/dd/yyyy HH24:MI:SS'), '
    ') || '
    ' next_date , '
    ' || interval || '
    ' interval
    FROM
        sys.dba_refresh
    ORDER BY
        rowner
      , rname;
    
    
    prompt
    [<a class="noLink" href="#top">Top</a>]
    <p>





    -- +----------------------------------------------------------------------------+
    -- |                            - END OF REPORT -                               |
    -- +----------------------------------------------------------------------------+
    
    SPOOL OFF
    
    SET MARKUP HTML OFF
    
    SET TERMOUT ON
    
    prompt 
    prompt Output written to: &FileName._&_dbname._&_spool_time..html
    
    EXIT;