<!-- $Header: emdb/sysman/admin/metadata/instance.xmlp /st_emdbsa_11.2/12 2009/03/31 12:27:01 sadattaw Exp $
   MODIFIED    (MM/DD/YY)
      pbhogara  01/30/09 - Add rdbms group owner property to sga_start metric
      sshastry  01/21/09 - Stremas forward merge from 10.2.0.5.0GC to 11.2 SA
      mkiran    01/17/09 - 6216805: Fix repeating key value problem with
                           "Database Services" metric
      mkiran    01/17/09 - 6361999: Fix repeating key value problem with
                           "Waits by Wait Class" metric
      ychan     12/10/08 - XbranchMerge ychan_bug-6343005 from
                           st_emdbgc_10.2.0.1.0
      jsoule    12/02/08 - Backport jsoule_bug-5857407_main from main
      ychan     11/26/08 - Fix bug 6343005
      kdas      11/18/08 - fix for 7572133
      loliu     10/10/08 - Added adrAlertLogContent
      glavash   10/10/08 - XbranchMerge glavash_proj_26955 from main
      glavash   09/17/08 - add ocm instrumentation metric
      manosing  09/16/08 - 
      loliu     09/12/08 - Backported SWB related metrics from 11g
      loliu     09/08/08 - Added incident_meter metric
      loliu     09/05/08 - Added ADR alert log from EMDBSA 11.2 to EMDBGC 10.2.0.5
      amahalin  09/03/08 - to remove DV status metric
      rtakeish  07/19/07  - Bug6015337, Can't show Bad SQL and Top SQL Report
                            on 9i database home page
      yma       08/29/08 - 
      yma       08/20/08 - 
      yma       07/18/08  - bug 6474029 
      sshastry  06/04/08  - Forward merge of streams/aq metrics from 11.1GC to
                            11.2
      rsamaved  05/08/08  - add 11gR2 version
      jsoule    07/11/07  - use consistent connect string
      rtakeish  03/28/07  - bug5940949, hanganalysis doesn't work for rac
      balnaff   05/24/07  - renabling the incident meter metric
      jsoule    05/11/07  - use proper machine name for sgastart.pl
      keiwong   05/20/07  - fix adrAlertLogError metric
      balnaff   05/10/07  - removing incident meter
      yma       03/29/07  - Fix bug 5941909 
      yma       04/11/07  - Fix bug 5969450 
      mnihalan  03/30/07  - Fix bug 5941130
      keiwong   03/01/07  - fix adrAlertLog metrics
      sudvarma  02/23/07  - To introduce new metric to send mail,when the
                            user's password are about to expire
      loliu     02/20/07  - Removed AdrEnabled property
      keiwong   02/19/07  - add adrAlertLogDataFailure metric
      jsoule    02/15/07  - rename response time per call
      balnaff   01/26/07  - adding incident_meter metric
      jsoule    01/03/07  - add last will operations
      manosing  01/12/07  - XbranchMerge manosing_lastpols from main
      ganessub  01/07/07  - Bug 5724188 fix.
      jsoule    10/23/06  - add new server-generated alerts
      dsukhwal  01/06/07  - XbranchMerge manosing_ntpol from main
      manosing  01/10/07  - flood control for NT policies
      manosing  12/04/06  - bug 5443094
      manosing  11/28/06  - add Windows NT polcies for 11g  
      jsoule    09/18/06  - add new hanganalyze metric
      kdas      10/05/06  - fixes for ADDMmetric
      keiwong   10/31/06 - add adrAlertLogContent
      manosing  10/09/06  - for 10.2.0.4 policies 
      jsoule    10/11/06  - pass version category to sgastart.pl
      kdas      08/23/06  - ADDM fixes
      jsoule    08/29/06  - add 11gR1 version
      rrawat    08/04/06  - Bug-5444241
      kdas      08/09/06  - support ADDM directives
      keiwong   07/13/06  - Add adrAlertLogIncidentError and 
                            adrAlertLogOperationalError
      kdas      06/14/06  - fix task count for ADDM metric 
      kdas      06/13/06  - fix finding count for ADDM metric 
      kdas      04/24/06  - enhance ADDM metric 
      kdas      06/14/06  - fix task count for ADDM metric 
      kdas      06/13/06  - fix finding count for ADDM metric 
      kdas      04/24/06  - enhance ADDM metric 
      ganessub  06/26/06  - Added textLogContent metric 
      lhan      04/28/06  - move UDM to database.xmlp to support RAC
      jsoule    03/13/06  - provide access to SGA data in 10.2.0.3 and later 
      yma       01/11/06  - Fix bug 3467825
      yfeng     08/29/05  - Fix bug 4571407 - privde date format string 
      ychan     08/16/05  - Add charset for alertlog 
      ychan     08/12/05  - Fix bug 3367389 
      swexler   07/14/05  - change health check column names
      dkjain    07/11/05  - Fixed bug 4422016 
      dkjain    07/06/05  - Fixing the ValidMidTierVersions position for ESA 
                            metrics 
      dsukhwal  07/04/05  - ESA support flood control for all metrics 
      dkjain    06/23/05  - Fixed the Bug-4335841
      dsukhwal  06/06/05  - limit number of rows for win32 
      hopark    06/01/05 -  add sga_stop, sga_resume
      blivshit  05/26/05 - fix instance problem in RAC case for 
                           dba_hist_sysmetric_summary 
      lhan      05/25/05 - fix udm bug 3301697
      dsukhwal  05/17/05 - move sqlnetParams to listener 
      dsukhwal  05/09/05 - limit number of rows 
      blivshit  05/06/05 - hide sga_ metrics from all metrics page 
      sresrini  05/03/05 - add 9i support for streams metrics 
      sresrini  04/22/05 - make config false for streams metrics 
      zsyed     04/20/05 - Adding hang analyze fix 
      xuliu     04/05/05 - use perl script collect intrconn inf 
      zsyed     03/30/05 - Adding new getcpu script 
      zsyed     04/05/05 - grabtrans 'zsyed_addcpu' 
      zsyed     03/24/05 - grabtrans 'zsyed_fix_0203' 
      zsyed     03/24/05 - Adding DBControl changes 
      yfeng     04/08/05 - Fix bug 4291390 - add Begin back 
      sresrini  03/14/05 - fix bug 4210766 
      jsoule    02/21/05 - adaptive thresholds 10.2 and up 
      swexler   02/25/05 - reenable health check 
      ysun      02/18/05 - update rac_global_cache of 10g
      ysun      02/16/05 - update based on the files before split
      zsyed     02/07/05 - Adding hanganalyze sql file 
      hxlin     02/04/05 - Modify sql response metric 
      ychan     01/31/05 - Add alertlog filter 
      kdas      01/13/05 - revert ADDM metric 
      blivshit  12/16/04 - add group_id to where cluase for hour_Awr, service 
                           metric 
      zsyed     11/22/04 - Augmenting hang analyze metric 
      zsyed     11/22/04 - Augmenting hang analyze metric 
      lhan      11/16/04 - clean up SQLUDM
      jsoule    09/30/04 - add dbtime_ps metric
      xuliu     09/30/04 - intrconn metric reorg 
      xuliu     09/28/04 - rac intrconn type alert 
      zsyed     09/28/04 - New metric to obtain hostname given type and name 
                           of target 
      xuliu     09/24/04 - fix intrconn 
      zsyed     09/28/04 - Fixing sga start for Solaris 
      hxlin     09/22/04 - Remove USAGE_TYPE from sql_response_collect metric 
      swexler   09/22/04 - health check changes 
      xuliu     09/21/04 - rac interconn traffic 
      blivshit  09/20/04 - fix unique problem in current_AWR hidden query 
      vshah     09/17/04 - Fix for bug 3884600. Avoid getting duplicate rows 
                           from v$servicemetric_history. 
      hxlin     09/14/04 - Rename sql resp time col 
      zsyed     08/20/04 - Adding new SGA start metric 
      swexler   07/28/04 - Health check metric
      blivshit  08/13/04 - fixup hidden metrics for performance reasons for 
                           home pages (DB and RAC) 
      hxlin     08/17/04 - Add collection response time 
      vkgarg    08/05/04 - updating summary_awr sql 
      vkgarg    08/01/04 - correcting aftercode review 
      hxlin     07/16/04 - Add collect sql response time metric 
      kdas      07/21/04 - simpler metric for ADDM 
      vkgarg    07/28/04 - sending start and end date for custom view in AWR 
                           metrics 
      ychan     07/13/04 - Fix bug 3738242 
      ychan     07/09/04 - Remove 10gBeta 
      xuliu     07/01/04 - rac inst interconnects 
      ychan     07/01/04 - Fix comment 
      ychan     06/30/04 - Fix bug 3467825 
      kranjan   06/28/04 - fix for bug 3576903
      lhan      06/25/04 - add NLS support for UDM
      blivshit  06/29/04 - move hidden metrics back to instance, since it 
                           needs instance variables 
      blivshit  06/25/04 - fix query 
      jochen    06/22/04 - Add media failure alert log category 
      blivshit  06/17/04 - change order by for hidden metrics
      blivshit  06/01/04 - add hidden AWR metrics 
      zsyed     07/02/04 - Adding metrics for SGA and Hang Analyze data 
      jochen    05/26/04 - Add 10gR2 
      lhan      05/27/04 - add R2 SQLUDM metric definition
      ysun      04/29/04 - ysun_metadata_split
      ysun      04/26/04 - creation
-->
    <!--
  ======================================================================
  == Category:         SQL Response Time
  == Collection Level: Recommended
  == Purpose:          Alerts, Trending
  ======================================================================
    -->
    
 	<Metric NAME="sql_response" TYPE="TABLE">
		<ValidIf>
			<CategoryProp NAME="MCPkg" CHOICES="2;3"/>
		</ValidIf>
		<Display>
			<Label NLSID="sql_response">SQL Response Time</Label>
		</Display>
		<TableDescriptor>
			<!-- =========================
        == Time This Capture (t2) ==
        ========================= -->
			<ColumnDescriptor NAME="time2" TYPE="NUMBER" TRANSIENT="TRUE" HELP="NO_HELP"/>
                        <ColumnDescriptor NAME="baselineTime" TYPE="NUMBER">
                                <Display FOR_SUMMARY_UI="TRUE">
                                        <Label NLSID="baseline_sql_response_time">Baseline SQL Response Time</Label>
                                        <ShortName NLSID="baseline_sql_response_time_short">Baseline Response</ShortName>
                                </Display>
                        </ColumnDescriptor>
                        <ColumnDescriptor NAME="currentTime" TYPE="NUMBER">
                                <Display FOR_SUMMARY_UI="TRUE">
                                        <Label NLSID="current_sql_response_time">Current SQL Response Time</Label>
                                        <ShortName NLSID="current_sql_response_time_short">Current Response</ShortName>
                                </Display>
                        </ColumnDescriptor>
			<!-- =============================
        == Time Previous Capture (t1) ==
        ============================= -->
			<ColumnDescriptor NAME="time1" TYPE="NUMBER" TRANSIENT="TRUE" HELP="NO_HELP" COMPUTE_EXPR="_time2"/>
			<!-- ===========================
        == Time 2 Captures Ago (t0) ==
        =========================== -->
			<ColumnDescriptor NAME="time0" TYPE="NUMBER" TRANSIENT="TRUE" HELP="NO_HELP" COMPUTE_EXPR="_time1"/>
			<!-- ==============
        == Max(t2, t1) ==
        ============== -->
			<ColumnDescriptor NAME="time1vs2" TYPE="NUMBER" TRANSIENT="TRUE" HELP="NO_HELP" COMPUTE_EXPR="(time1 > time2) ? time1 : time2"/>
			<!-- ==============
        == Max(t2, t0) ==
        ============== -->
			<ColumnDescriptor NAME="time0vs2" TYPE="NUMBER" TRANSIENT="TRUE" HELP="NO_HELP" COMPUTE_EXPR="(time0 > time2) ? time0 : time2"/>
			<!-- ==============
        == Max(t1, t0) ==
        ============== -->
			<ColumnDescriptor NAME="time0vs1" TYPE="NUMBER" TRANSIENT="TRUE" HELP="NO_HELP" COMPUTE_EXPR="_time1vs2"/>
			<!-- =====================
        == Median(t0, t1, t2) ==
        ===================== -->
			<ColumnDescriptor NAME="timeMid" TYPE="NUMBER" TRANSIENT="TRUE" HELP="NO_HELP" COMPUTE_EXPR="((time2 > time0vs1) ? time0vs1 : ((time1 > time0vs2) ? time0vs2 : time1vs2))"/>
			<!-- ==================================================================
        == Time This Capture (if not a spike) otherwise Median of latest 3 ==
        ================================================================== -->
			<ColumnDescriptor NAME="time" TYPE="NUMBER" COMPUTE_EXPR="(time2 > 400) ? timeMid : time2">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="sql_response_time">SQL Response Time (%)</Label>
					<ShortName NLSID="sql_response_time_short">Response</ShortName>
				</Display>
			</ColumnDescriptor>
		</TableDescriptor>
		<QueryDescriptor FETCHLET_ID="SQL">
			<Property NAME="STATEMENT" SCOPE="GLOBAL"><![CDATA[
BEGIN
  IF (:1 = 'READ WRITE') THEN
    ----
    -- For a read-write database appropriately configured, try to evaluate.
    ----
    IF (:2 = '1') THEN
      dbsnmp.mgmt_response.get_metric_curs(:3);
    ELSE
      execute immediate 'begin dbsnmp.mgmt_response.get_latest_curs(:a); end;' using in out :3;
    END IF;
  ELSE
    ----
    -- For a read-only database, do not evaluate, but rather return an empty
    -- cursor.
    ----
    DECLARE
      TYPE        data_cursor_type IS REF CURSOR;
      data_cursor data_cursor_type;
    BEGIN
      OPEN data_cursor FOR
        SELECT -1
          FROM dual
         WHERE 0=1;
      :3 := data_cursor;
    END;
  END IF;
END;
]]></Property>
			<Property NAME="SQLINPARAM1" SCOPE="INSTANCE">OpenMode</Property>
                        <Property NAME="SQLINPARAM2" SCOPE="INSTANCE">MCResponse</Property>
			<Property NAME="SQLOUTPARAMPOS" SCOPE="GLOBAL">3</Property>
			<Property NAME="SQLOUTPARAMTYPE" SCOPE="GLOBAL">SQL_CURSOR</Property>
			<Property NAME="MachineName" SCOPE="INSTANCE">MachineName</Property>
			<Property NAME="Port" SCOPE="INSTANCE">Port</Property>
			<Property NAME="SID" SCOPE="INSTANCE">SID</Property>
			<Property NAME="UserName" SCOPE="INSTANCE">UserName</Property>
			<Property NAME="password" SCOPE="INSTANCE">password</Property>
			<Property NAME="Role" SCOPE="INSTANCE" OPTIONAL="TRUE">Role</Property>
		</QueryDescriptor>
	</Metric>
        <!--
  ======================================================================
  == Category:         Collect SQL Response Time
  == Collection Level: Recommended
  == Purpose:          Alerts, Trending
  ======================================================================
    -->
             <Metric NAME="sql_response_collect" TYPE="TABLE" USAGE_TYPE="HIDDEN_COLLECT">
                <ValidIf>
                        <CategoryProp NAME="MCPkg" CHOICES="2;3"/>
                </ValidIf>
                <Display>
                        <Label NLSID="collect_sql_response">Collect SQL Response Time</Label>
                </Display>
                <TableDescriptor>
                        <ColumnDescriptor NAME="time" TYPE="NUMBER">
                                <Display>
                                        <Label NLSID="sql_response_time">SQL Response Time (%)</Label>
                                        <ShortName NLSID="sql_response_time_short">Response</ShortName>
                                </Display>
                        </ColumnDescriptor>
                </TableDescriptor>
                <QueryDescriptor FETCHLET_ID="SQL">
                        <Property NAME="STATEMENT" SCOPE="GLOBAL"><![CDATA[
BEGIN
  IF (:1 = 'READ WRITE' AND (:2 = '2' OR :2 = '3')) THEN
    ----
    -- For a read-write database appropriately configured, try to evaluate.
    ----
    dbsnmp.mgmt_response.get_metric_curs(:3);
  ELSE
    ----
    -- For a read-only database, do not evaluate, but rather return an empty
    -- cursor.
    ----
    DECLARE
      TYPE        data_cursor_type IS REF CURSOR;
      data_cursor data_cursor_type;
    BEGIN
      OPEN data_cursor FOR
        SELECT -1
          FROM dual
         WHERE 0=1;
      :3 := data_cursor;
    END;
  END IF;
END;
]]></Property>
                        <Property NAME="SQLINPARAM1" SCOPE="INSTANCE">OpenMode</Property>
                        <Property NAME="SQLINPARAM2" SCOPE="INSTANCE">MCResponse</Property>
                        <Property NAME="SQLOUTPARAMPOS" SCOPE="GLOBAL">3</Property>
                        <Property NAME="SQLOUTPARAMTYPE" SCOPE="GLOBAL">SQL_CURSOR</Property>
                        <Property NAME="MachineName" SCOPE="INSTANCE">MachineName</Property>
                        <Property NAME="Port" SCOPE="INSTANCE">Port</Property>
                        <Property NAME="SID" SCOPE="INSTANCE">SID</Property>
                        <Property NAME="UserName" SCOPE="INSTANCE">UserName</Property>
                        <Property NAME="password" SCOPE="INSTANCE">password</Property>
                        <Property NAME="Role" SCOPE="INSTANCE" OPTIONAL="TRUE">Role</Property>
                </QueryDescriptor>
        </Metric>





    <!--
  ======================================================================
  == Category:         Throughput
  == Collection Level: Minimum
  == Purpose:          Alerts, Trending
  ======================================================================
    -->
 	<Metric NAME="instance_throughput" TYPE="TABLE">
		<ValidIf>
			<CategoryProp NAME="VersionCategory" CHOICES="pre8;8i;8iR2;9i;9iR2"/>
		</ValidIf>
		<Display>
			<Label NLSID="instance_throughput">Throughput</Label>
		</Display>
		<TableDescriptor>
			<!-- columns provided by the query descriptor's fetchlet call -->
			<!-- Note: The order of these columns must match the output ADT. -->
			<!--       The field name matches the column name only for clarity. -->
			<ColumnDescriptor NAME="logons_current" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_logons_current">All Sessions</Label>
					<ShortName NLSID="instance_throughput_logons_current">All Sessions</ShortName>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="logons_cumulative" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
				<Display>
					<Label NLSID="instance_throughput_logons_cumulative">logons cumulative</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="parses" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
				<Display>
					<Label NLSID="instance_throughput_parses">parse count (total)</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="hard_parses" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
				<Display>
					<Label NLSID="instance_throughput_hard_parses">parse count (hard)</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="executions" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
				<Display>
					<Label NLSID="instance_throughput_executions">execution count</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="user_calls" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
				<Display>
					<Label NLSID="instance_throughput_user_calls">user calls</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="recursive_calls" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
				<Display>
					<Label NLSID="instance_throughput_recursive_calls">recursive calls</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="sorts_memory" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
				<Display>
					<Label NLSID="instance_throughput_sorts_memory">sorts (memory)</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="sorts_disk" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
				<Display>
					<Label NLSID="instance_throughput_sorts_disk">sorts (disk)</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="sorts_rows" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
				<Display>
					<Label NLSID="instance_throughput_sorts_rows">sorts (rows)</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="logical_reads" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
				<Display>
					<Label NLSID="instance_throughput_logical_reads">session logical reads</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="physical_reads" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
				<Display>
					<Label NLSID="instance_throughput_physical_reads">physical reads</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="table_scans_long" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
				<Display>
					<Label NLSID="instance_throughput_table_scans_long">table scans (long tables)</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="index_ffs_full" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
				<Display>
					<Label NLSID="instance_throughput_index_ffs_full">index fast full scans (full)</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="physical_writes" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
				<Display>
					<Label NLSID="instance_throughput_physical_writes">physical writes</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="bytes_to_client" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
				<Display>
					<Label NLSID="instance_throughput_bytes_to_client">bytes sent via SQL*Net to client</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="bytes_from_client" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
				<Display>
					<Label NLSID="instance_throughput_bytes_from_client">bytes received via SQL*Net from client</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="bytes_to_dblink" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
				<Display>
					<Label NLSID="instance_throughput_bytes_to_dblink">bytes sent via SQL*Net to dblink</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="bytes_from_dblink" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
				<Display>
					<Label NLSID="instance_throughput_bytes_from_dblink">bytes received via SQL*Net from dblink</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="commits" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
				<Display>
					<Label NLSID="instance_throughput_commits">user commits</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="dbwr_checkpoints" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
				<Display>
					<Label NLSID="instance_throughput_dbwr_checkpoints">DBWR checkpoints</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="rollbacks" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
				<Display>
					<Label NLSID="instance_throughput_rollbacks">user rollbacks</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="redo_size" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
				<Display>
					<Label NLSID="instance_throughput_redo_size">redo size</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="redo_writes" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
				<Display>
					<Label NLSID="instance_throughput_redo_writes">redo writes</Label>
				</Display>
			</ColumnDescriptor>
			<!-- intermediate columns to be used in column computations below -->
			<!-- Note: These columns must precede their use. -->
			<ColumnDescriptor NAME="transactions" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP" COMPUTE_EXPR="(commits + rollbacks > _commits + _rollbacks) ? (commits - _commits) + (rollbacks - _rollbacks) : 0">
				<Display>
					<Label NLSID="instance_throughput_transactions">transactions</Label>
				</Display>
			</ColumnDescriptor>
			<!-- columns based on deltas or other computations from counters -->
			<ColumnDescriptor NAME="transactions_ps" TYPE="NUMBER" IS_KEY="FALSE" COMPUTE_EXPR="transactions/__interval">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_transactions_ps">Number of Transactions (per second)</Label>
					<ShortName NLSID="instance_throughput_transactions_ps_short">Transactions/s</ShortName>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="physreads_ps" TYPE="NUMBER" IS_KEY="FALSE" COMPUTE_EXPR="(_physical_reads > physical_reads) ? (1/0) : (physical_reads - _physical_reads)/__interval">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_physreads_ps">Physical Reads (per second)</Label>
					<ShortName NLSID="instance_throughput_physreads_ps_short">Physical Reads/s</ShortName>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="physreads_pt" TYPE="NUMBER" IS_KEY="FALSE" COMPUTE_EXPR="(_physical_reads > physical_reads) ? (1/0) : (physical_reads - _physical_reads)/transactions">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_physreads_pt">Physical Reads (per transaction)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="physwrites_ps" TYPE="NUMBER" IS_KEY="FALSE" COMPUTE_EXPR="(_physical_writes > physical_writes) ? (1/0) : (physical_writes - _physical_writes)/__interval">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_physwrites_ps">Physical Writes (per second)</Label>
					<ShortName NLSID="instance_throughput_physwrites_ps_short">Phys Writes/sec</ShortName>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="physwrites_pt" TYPE="NUMBER" IS_KEY="FALSE" COMPUTE_EXPR="(_physical_writes > physical_writes) ? (1/0) : (physical_writes - _physical_writes)/transactions">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_physwrites_pt">Physical Writes (per transaction)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="redosize_ps" TYPE="NUMBER" IS_KEY="FALSE" COMPUTE_EXPR="(_redo_size > redo_size) ? (1/0) : (redo_size - _redo_size)/__interval">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_redosize_ps">Redo Generated (per second)</Label>
					<ShortName NLSID="instance_throughput_redosize_ps_short">Redo Size/sec</ShortName>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="redosize_pt" TYPE="NUMBER" IS_KEY="FALSE" COMPUTE_EXPR="(_redo_size > redo_size) ? (1/0) : (redo_size - _redo_size)/transactions">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_redosize_pt">Redo Generated (per transaction)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="logons_ps" TYPE="NUMBER" IS_KEY="FALSE" COMPUTE_EXPR="(_logons_cumulative > logons_cumulative) ? (1/0) : (logons_cumulative - _logons_cumulative)/__interval">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_logons_ps">Cumulative Logons (per second)</Label>
					<ShortName NLSID="instance_throughput_logons_ps_short">Logons/sec</ShortName>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="logons_pt" TYPE="NUMBER" IS_KEY="FALSE" COMPUTE_EXPR="(_logons_cumulative > logons_cumulative) ? (1/0) : (logons_cumulative - _logons_cumulative)/transactions">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_logons_pt">Cumulative Logons (per transaction)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="commits_ps" TYPE="NUMBER" IS_KEY="FALSE" COMPUTE_EXPR="(_commits > commits) ? (1/0) : (commits - _commits)/__interval">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_commits_ps">User Commits (per second)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="commits_pt" TYPE="NUMBER" IS_KEY="FALSE" COMPUTE_EXPR="(_commits > commits) ? (1/0) : (commits - _commits)/transactions">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_commits_pt">User Commits (per transaction)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="rollbacks_ps" TYPE="NUMBER" IS_KEY="FALSE" COMPUTE_EXPR="(_rollbacks > rollbacks) ? (1/0) : (rollbacks - _rollbacks)/__interval">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_rollbacks_ps">User Rollbacks (per second)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="rollbacks_pt" TYPE="NUMBER" IS_KEY="FALSE" COMPUTE_EXPR="(_rollbacks > rollbacks) ? (1/0) : (rollbacks - _rollbacks)/transactions">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_rollbacks_pt">User Rollbacks (per transaction)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="usercalls_ps" TYPE="NUMBER" IS_KEY="FALSE" COMPUTE_EXPR="(_user_calls > user_calls) ? (1/0) : (user_calls - _user_calls)/__interval">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_usercalls_ps">User Calls (per second)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="usercalls_pt" TYPE="NUMBER" IS_KEY="FALSE" COMPUTE_EXPR="(_user_calls > user_calls) ? (1/0) : (user_calls - _user_calls)/transactions">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_usercalls_pt">User Calls (per transaction)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="recurscalls_ps" TYPE="NUMBER" IS_KEY="FALSE" COMPUTE_EXPR="(_recursive_calls > recursive_calls) ? (1/0) : (recursive_calls - _recursive_calls)/__interval">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_recurscalls_ps">Recursive Calls (per second)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="recurscalls_pt" TYPE="NUMBER" IS_KEY="FALSE" COMPUTE_EXPR="(_recursive_calls > recursive_calls) ? (1/0) : (recursive_calls - _recursive_calls)/transactions">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_recurscalls_pt">Recursive Calls (per transaction)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="logreads_ps" TYPE="NUMBER" IS_KEY="FALSE" COMPUTE_EXPR="(_logical_reads > logical_reads) ? (1/0) : (logical_reads - _logical_reads)/__interval">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_logreads_ps">Session Logical Reads (per second)</Label>
					<ShortName NLSID="instance_throughput_logreads_ps_short">Logical Reads/s</ShortName>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="logreads_pt" TYPE="NUMBER" IS_KEY="FALSE" COMPUTE_EXPR="(_logical_reads > logical_reads) ? (1/0) : (logical_reads - _logical_reads)/transactions">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_logreads_pt">Session Logical Reads (per transaction)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="dbwrcheckpoints_ps" TYPE="NUMBER" IS_KEY="FALSE" COMPUTE_EXPR="(_dbwr_checkpoints > dbwr_checkpoints) ? (1/0) : (dbwr_checkpoints - _dbwr_checkpoints)/__interval">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_dbwrcheckpoints_ps">DBWR Checkpoints (per second)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="redowrites_ps" TYPE="NUMBER" IS_KEY="FALSE" COMPUTE_EXPR="(_redo_writes > redo_writes) ? (1/0) : (redo_writes - _redo_writes)/__interval">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_redowrites_ps">Redo Writes (per second)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="redowrites_pt" TYPE="NUMBER" IS_KEY="FALSE" COMPUTE_EXPR="(_redo_writes > redo_writes) ? (1/0) : (redo_writes - _redo_writes)/transactions">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_redowrites_pt">Redo Writes (per transaction)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="tabscanslong_ps" TYPE="NUMBER" IS_KEY="FALSE" COMPUTE_EXPR="(_table_scans_long > table_scans_long) ? (1/0) : (table_scans_long - _table_scans_long)/__interval">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_tabscanslong_ps">Scans on Long Tables (per second)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="tabscanslong_pt" TYPE="NUMBER" IS_KEY="FALSE" COMPUTE_EXPR="(_table_scans_long > table_scans_long) ? (1/0) : (table_scans_long - _table_scans_long)/transactions">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_tabscanslong_pt">Scans on Long Tables (per transaction)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="parses_ps" TYPE="NUMBER" IS_KEY="FALSE" COMPUTE_EXPR="(_parses > parses) ? (1/0) : (parses - _parses)/__interval">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_parses_ps">Total Parses (per second)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="parses_pt" TYPE="NUMBER" IS_KEY="FALSE" COMPUTE_EXPR="(_parses > parses) ? (1/0) : (parses - _parses)/transactions">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_parses_pt">Total Parses (per transaction)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="hardparses_ps" TYPE="NUMBER" IS_KEY="FALSE" COMPUTE_EXPR="(_hard_parses > hard_parses) ? (1/0) : (hard_parses - _hard_parses)/__interval">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_hardparses_ps">Hard Parses (per second)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="hardparses_pt" TYPE="NUMBER" IS_KEY="FALSE" COMPUTE_EXPR="(_hard_parses > hard_parses) ? (1/0) : (hard_parses - _hard_parses)/transactions">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_hardparses_pt">Hard Parses (per transaction)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="executions_ps" TYPE="NUMBER" IS_KEY="FALSE" COMPUTE_EXPR="(_executions > executions) ? (1/0) : (executions - _executions)/__interval">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_executions_ps">Executes (per second)</Label>
					<ShortName NLSID="instance_throughput_executions_ps_short">SQL Executions/s</ShortName>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="sortsdisk_ps" TYPE="NUMBER" IS_KEY="FALSE" COMPUTE_EXPR="(_sorts_disk > sorts_disk) ? (1/0) : (sorts_disk - _sorts_disk)/__interval">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_sortsdisk_ps">Sorts to Disk (per second)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="sortsdisk_pt" TYPE="NUMBER" IS_KEY="FALSE" COMPUTE_EXPR="(_sorts_disk > sorts_disk) ? (1/0) : (sorts_disk - _sorts_disk)/transactions">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_sortsdisk_pt">Sorts to Disk (per transaction)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="rows_psort" TYPE="NUMBER" IS_KEY="FALSE" COMPUTE_EXPR="(_sorts_rows + _sorts_disk + _sorts_memory > sorts_rows + sorts_disk + sorts_memory) ? (1/0) : (sorts_rows - _sorts_rows)/((sorts_disk - _sorts_disk) + (sorts_memory - _sorts_memory))">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_rows_psort">Rows Processed (per sort)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="executeswoparse_pct" TYPE="NUMBER" IS_KEY="FALSE" COMPUTE_EXPR="(_parses + _executions > parses + executions) ? (1/0) : (((executions - _executions) > (parses - _parses)) ? (100 * (((executions - _executions) - (parses - _parses))/(executions - _executions))) : 0)">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_executeswoparse_pct">Executes Performed without Parses (%)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="softparse_pct" TYPE="NUMBER" IS_KEY="FALSE" COMPUTE_EXPR="(_parses + _hard_parses > parses + hard_parses) ? (1/0) : 100 * (((parses - _parses) - (hard_parses - _hard_parses))/(parses - _parses))">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_softparse_pct">Soft Parse (%)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="usercall_pct" TYPE="NUMBER" IS_KEY="FALSE" COMPUTE_EXPR="(_user_calls + _recursive_calls > user_calls + recursive_calls) ? (1/0) : 100 * ((user_calls - _user_calls)/((user_calls - _user_calls) + (recursive_calls - _recursive_calls)))">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_usercall_pct">User Calls (%)</Label>

				</Display>
			</ColumnDescriptor>               
           
			<ColumnDescriptor NAME="tabscanstotal_ps" TYPE="NUMBER" IS_KEY="FALSE" COMPUTE_EXPR="(_table_scans_long + _index_ffs_full > table_scans_long + index_ffs_full) ? (1/0) : ((table_scans_long - _table_scans_long) + (index_ffs_full - _index_ffs_full))/__interval">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_tabscanstotal_ps">Total Table Scans (per second)</Label>

				</Display>
			</ColumnDescriptor>
            
			<ColumnDescriptor NAME="tabscanstotal_pt" TYPE="NUMBER" IS_KEY="FALSE" COMPUTE_EXPR="(_table_scans_long + _index_ffs_full > table_scans_long + index_ffs_full) ? (1/0) : ((table_scans_long - _table_scans_long) + (index_ffs_full - _index_ffs_full))/transactions">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_tabscanstotal_pt">Total Table Scans (per transaction)</Label>

				</Display>
			</ColumnDescriptor>

            <ColumnDescriptor NAME="networkbytes_ps" TYPE="NUMBER" IS_KEY="FALSE" COMPUTE_EXPR="(_bytes_to_client + _bytes_from_client + _bytes_to_dblink + _bytes_from_dblink > bytes_to_client + bytes_from_client + bytes_to_dblink + bytes_from_dblink) ? (1/0) : ((bytes_to_client - _bytes_to_client) + (bytes_from_client - _bytes_from_client) + (bytes_to_dblink - _bytes_to_dblink) + (bytes_from_dblink - _bytes_from_dblink))/__interval">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_networkbytes_ps">Network Bytes (per second)</Label>

				</Display>
			</ColumnDescriptor>    
		</TableDescriptor>
		<QueryDescriptor FETCHLET_ID="SQL">
			<Property NAME="STATEMENT" SCOPE="GLOBAL"><![CDATA[
DECLARE
  logons_current    NUMBER := NULL;
  logons_cumulative NUMBER := NULL;
  parses            NUMBER := NULL;
  hard_parses       NUMBER := NULL;
  executions        NUMBER := NULL;
  user_calls        NUMBER := NULL;
  recursive_calls   NUMBER := NULL;
  sorts_memory      NUMBER := NULL;
  sorts_disk        NUMBER := NULL;
  sorts_rows        NUMBER := NULL;
  logical_reads     NUMBER := NULL;
  physical_reads    NUMBER := NULL;
  table_scans_long  NUMBER := NULL;
  index_ffs_full    NUMBER := NULL;
  physical_writes   NUMBER := NULL;
  bytes_to_client   NUMBER := NULL;
  bytes_from_client NUMBER := NULL;
  bytes_to_dblink   NUMBER := NULL;
  bytes_from_dblink NUMBER := NULL;
  commits           NUMBER := NULL;
  dbwr_checkpoints  NUMBER := NULL;
  rollbacks         NUMBER := NULL;
  redo_size         NUMBER := NULL;
  redo_writes       NUMBER := NULL;

  TYPE        data_cursor_type IS REF CURSOR;
  data_cursor data_cursor_type;

BEGIN

  FOR name_value_pair IN
    (SELECT sn.name, sv.value
       FROM v$statname sn, v$sysstat sv
      WHERE sn.name IN
            ('DBWR checkpoints',
             'bytes received via SQL*Net from client',
             'bytes received via SQL*Net from dblink',
             'bytes sent via SQL*Net to client',
             'bytes sent via SQL*Net to dblink',
             'execute count',
             'index fast full scans (full)',
             'logons cumulative',
             'logons current',
             'parse count (hard)',
             'parse count (total)',
             'physical reads',
             'physical writes',
             'recursive calls',
             'redo size',
             'redo writes',
             'session logical reads',
             'sorts (disk)',
             'sorts (memory)',
             'sorts (rows)',
             'table scans (long tables)',
             'user calls',
             'user commits',
             'user rollbacks')
        AND sn.statistic# = sv.statistic#)
  LOOP

    IF name_value_pair.name = 'DBWR checkpoints' THEN
      dbwr_checkpoints := name_value_pair.value;
    ELSIF name_value_pair.name = 'bytes received via SQL*Net from client' THEN
      bytes_from_client := name_value_pair.value;
    ELSIF name_value_pair.name = 'bytes received via SQL*Net from dblink' THEN
      bytes_from_dblink := name_value_pair.value;
    ELSIF name_value_pair.name = 'bytes sent via SQL*Net to client' THEN
      bytes_to_client := name_value_pair.value;
    ELSIF name_value_pair.name = 'bytes sent via SQL*Net to dblink' THEN
      bytes_to_dblink := name_value_pair.value;
    ELSIF name_value_pair.name = 'execute count' THEN
      executions := name_value_pair.value;
    ELSIF name_value_pair.name = 'index fast full scans (full)' THEN
      index_ffs_full := name_value_pair.value;
    ELSIF name_value_pair.name = 'logons cumulative' THEN
      logons_cumulative := name_value_pair.value;
    ELSIF name_value_pair.name = 'logons current' THEN
      logons_current := name_value_pair.value;
    ELSIF name_value_pair.name = 'parse count (hard)' THEN
      hard_parses := name_value_pair.value;
    ELSIF name_value_pair.name = 'parse count (total)' THEN
      parses := name_value_pair.value;
    ELSIF name_value_pair.name = 'physical reads' THEN
      physical_reads := name_value_pair.value;
    ELSIF name_value_pair.name = 'physical writes' THEN
      physical_writes := name_value_pair.value;
    ELSIF name_value_pair.name = 'recursive calls' THEN
      recursive_calls := name_value_pair.value;
    ELSIF name_value_pair.name = 'redo size' THEN
      redo_size := name_value_pair.value;
    ELSIF name_value_pair.name = 'redo writes' THEN
      redo_writes := name_value_pair.value;
    ELSIF name_value_pair.name = 'session logical reads' THEN
      logical_reads := name_value_pair.value;
    ELSIF name_value_pair.name = 'sorts (disk)' THEN
      sorts_disk := name_value_pair.value;
    ELSIF name_value_pair.name = 'sorts (memory)' THEN
      sorts_memory := name_value_pair.value;
    ELSIF name_value_pair.name = 'sorts (rows)' THEN
      sorts_rows := name_value_pair.value;
    ELSIF name_value_pair.name = 'table scans (long tables)' THEN
      table_scans_long := name_value_pair.value;
    ELSIF name_value_pair.name = 'user calls' THEN
      user_calls := name_value_pair.value;
    ELSIF name_value_pair.name = 'user commits' THEN
      commits := name_value_pair.value;
    ELSIF name_value_pair.name = 'user rollbacks' THEN
      rollbacks := name_value_pair.value;
    END IF;

  END LOOP;

  -- open the cursor to return
  OPEN data_cursor FOR
    SELECT logons_current,
           logons_cumulative,
           parses,
           hard_parses,
           executions,
           user_calls,
           recursive_calls,
           sorts_memory,
           sorts_disk,
           sorts_rows,
           logical_reads,
           physical_reads,
           table_scans_long,
           index_ffs_full,
           physical_writes,
           bytes_to_client,
           bytes_from_client,
           bytes_to_dblink,
           bytes_from_dblink,
           commits,
           dbwr_checkpoints,
           rollbacks,
           redo_size,
           redo_writes
      FROM dual;

  :1 := data_cursor;
END;
]]></Property>
			<Property NAME="SQLOUTPARAMPOS" SCOPE="GLOBAL">1</Property>
			<Property NAME="SQLOUTPARAMTYPE" SCOPE="GLOBAL">SQL_CURSOR</Property>
			<Property NAME="MachineName" SCOPE="INSTANCE">MachineName</Property>
			<Property NAME="Port" SCOPE="INSTANCE">Port</Property>
			<Property NAME="SID" SCOPE="INSTANCE">SID</Property>
			<Property NAME="UserName" SCOPE="INSTANCE">UserName</Property>
			<Property NAME="password" SCOPE="INSTANCE">password</Property>
			<Property NAME="Role" SCOPE="INSTANCE" OPTIONAL="TRUE">Role</Property>
		</QueryDescriptor>
	</Metric>

    <!--
  ======================================================================
  == Category:         Efficiency
  == Collection Level: Complete
  == Purpose:          Alerts
  ======================================================================
    -->
	<Metric NAME="instance_efficiency" TYPE="TABLE">
		<ValidIf>
			<CategoryProp NAME="VersionCategory" CHOICES="pre8;8i;8iR2;9i;9iR2"/>
		</ValidIf>
		<Display>
			<Label NLSID="instance_efficiency">Efficiency</Label>
		</Display>
		<TableDescriptor>
			<!-- columns provided by the query descriptor's fetchlet call -->
			<!-- Note: The order of these columns must match the output ADT. -->
			<!--       The field name matches the column name only for clarity. -->
			<ColumnDescriptor NAME="sorts_memory" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
				<Display>
					<Label NLSID="instance_efficiency_sorts_memory">sorts (memory)</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="sorts_disk" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
				<Display>
					<Label NLSID="instance_efficiency_sorts_disk">sorts (disk)</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="logical_reads" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
				<Display>
					<Label NLSID="instance_efficiency_logical_reads">session logical reads</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="physical_reads" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
				<Display>
					<Label NLSID="instance_efficiency_physical_reads">physical reads</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="physical_reads_direct" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
				<Display>
					<Label NLSID="instance_efficiency_physical_reads_direct">physical reads direct</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="redo_entries" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
				<Display>
					<Label NLSID="instance_efficiency_redo_entries">redo entries</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="redo_space_requests" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
				<Display>
					<Label NLSID="instance_efficiency_redo_space_requests">redo log space requests</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="libcache_pins" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
				<Display>
					<Label NLSID="instance_efficiency_libcache_pins">libcache pins</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="libcache_pinhits" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
				<Display>
					<Label NLSID="instance_efficiency_libcache_pinhits">libcache pinhits</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="dictionary_gets" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
				<Display>
					<Label NLSID="instance_efficiency_dictionary_gets">dictionary gets</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="dictionary_misses" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
				<Display>
					<Label NLSID="instance_efficiency_dictionary_misses">dictionary misses</Label>
				</Display>
			</ColumnDescriptor>
			<!-- intermediate columns to be used in column computations below -->
			<!-- columns based on deltas or other computations from counters -->
			<ColumnDescriptor NAME="bufcachehit_pct" TYPE="NUMBER" IS_KEY="FALSE" COMPUTE_EXPR="(_logical_reads + _physical_reads + _physical_reads_direct > logical_reads + physical_reads + physical_reads_direct) ? (1/0) : ((logical_reads > _logical_reads) ? (100 * (1 - (((physical_reads - _physical_reads) - (physical_reads_direct - _physical_reads_direct))/(logical_reads - _logical_reads)))) : 100)">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_efficiency_bufcachehit_pct">Buffer Cache Hit (%)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="libcache_hit_pct" TYPE="NUMBER" IS_KEY="FALSE" COMPUTE_EXPR="(_libcache_pins + _libcache_pinhits > libcache_pins + libcache_pinhits) ? (1/0) : ((libcache_pins > _libcache_pins) ? (100 * (libcache_pinhits - _libcache_pinhits)/(libcache_pins - _libcache_pins)) : 100)">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_efficiency_libcache_hit_pct">Library Cache Hit (%)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="dictionaryhit_pct" TYPE="NUMBER" IS_KEY="FALSE" COMPUTE_EXPR="(_dictionary_gets + _dictionary_misses > dictionary_gets + dictionary_misses) ? (1/0) : ((dictionary_gets > _dictionary_gets) ? (100 * ((dictionary_gets - _dictionary_gets) - (dictionary_misses - _dictionary_misses))/(dictionary_gets - _dictionary_gets)) : 100)">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_efficiency_dictionaryhit_pct">Data Dictionary Hit (%)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="inmem_sort_pct" TYPE="NUMBER" IS_KEY="FALSE" COMPUTE_EXPR="(_sorts_memory + _sorts_disk > sorts_memory + sorts_disk) ? (1/0) : ((sorts_memory + sorts_disk > _sorts_memory + _sorts_disk) ? (100 * (sorts_memory - _sorts_memory)/((sorts_memory - _sorts_memory) + (sorts_disk - _sorts_disk))) : 100)">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_efficiency_inmem_sort_pct">Sorts in Memory (%)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="redologalloc_hit_pct" TYPE="NUMBER" IS_KEY="FALSE" COMPUTE_EXPR="(_redo_entries + _redo_space_requests > redo_entries + redo_space_requests) ? (1/0) : ((redo_entries > _redo_entries) ? (100 * ((redo_entries - _redo_entries) - (redo_space_requests - _redo_space_requests))/(redo_entries - _redo_entries)) : 100)">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_efficiency_redologalloc_hit_pct">Redo Log Allocation Hit (%)</Label>

				</Display>
			</ColumnDescriptor>
		</TableDescriptor>
		<QueryDescriptor FETCHLET_ID="SQL">
			<Property NAME="STATEMENT" SCOPE="GLOBAL"><![CDATA[
DECLARE
  sorts_memory                 NUMBER := 0;
  sorts_disk                   NUMBER := 0;
  logical_reads                NUMBER := 0;
  physical_reads               NUMBER := 0;
  physical_reads_direct        NUMBER := 0;
  redo_entries                 NUMBER := 0;
  redo_space_requests          NUMBER := 0;
  libcache_pins                NUMBER := 0;
  libcache_pinhits             NUMBER := 0;
  dictionary_gets              NUMBER := 0;
  dictionary_misses            NUMBER := 0;

  TYPE num_sequence IS TABLE OF NUMBER;

  --
  -- The statistic#'s of the v$sysstat statistics we're interested in.
  -- These numbers are ordered alphabetically, according to the stat name.
  --
  ordered_stat#s num_sequence := num_sequence();

  -- keep the MAX(statistic#) as a pseudo-statistic which represents a miss
  -- in the name lookup
  max_stat#      NUMBER := 0;

  -- Note: This must be alphabetical (and ending with NULL)!
  TYPE name_list IS TABLE OF VARCHAR2(64);
  stat_names CONSTANT name_list :=
   name_list('physical reads',
             'physical reads direct',
             'redo entries',
             'redo log space requests',
             'session logical reads',
             'sorts (disk)',
             'sorts (memory)',
             NULL);
  curr_stat#_ord INTEGER := 1;

  -- since misses are not expected, we'll keep a counter and only post-
  -- process the stat# array if there were any
  statname_misses INTEGER := 0;

  sysstat_vals        num_sequence := num_sequence();

  i NUMBER;

  TYPE        data_cursor_type IS REF CURSOR;
  data_cursor data_cursor_type;

BEGIN

  ----
  -- initialize ordered_stat#s with the statistic#s (+1, since these are
  -- PL/SQL array indices) for the statistics we're interested in
  ----

  FOR name_stat#_pair IN
    (SELECT name, statistic# stat#
       FROM v$statname
      ORDER BY name)
  LOOP

    -- (compute MAX(statistic#) for the purpose of misses)
    max_stat# := GREATEST(max_stat#, name_stat#_pair.stat#);

    IF name_stat#_pair.name = stat_names(curr_stat#_ord) THEN

      ----
      -- log the found statistic#
      ----

      ordered_stat#s.EXTEND;
      ordered_stat#s(curr_stat#_ord) := name_stat#_pair.stat# + 1;
      curr_stat#_ord := curr_stat#_ord + 1;

    ELSIF name_stat#_pair.name > stat_names(curr_stat#_ord) THEN

      ----
      -- we've had a miss, so post-process the array, setting our NULL
      -- statistic#s to our pseudo-statistic#
      -- this can only happen if
      --  a statistic is deprecated by the server (which it doesn't do), or
      --  a misspelling of a valid statistic name in the list, or
      --  an incorrect alphabetical ordering of the list
      ----

      ordered_stat#s.EXTEND;
      ordered_stat#s(curr_stat#_ord) := NULL;
      curr_stat#_ord := curr_stat#_ord + 1;
      statname_misses := statname_misses + 1;

    END IF;

  END LOOP;

  IF statname_misses > 0 THEN

    -- (post-process the misses)
    FOR stat_ord IN 1..ordered_stat#s.COUNT LOOP
      IF ordered_stat#s(stat_ord) IS NULL THEN
        ordered_stat#s(stat_ord) := max_stat# + 2;
      END IF;
    END LOOP;

  END IF;

  ----
  -- query data into sysstat_vals, indexed by statistic#, leaving a zeroed
  -- slot at the end for misses
  ----

  -- (supply a value for misses)
  sysstat_vals.EXTEND(max_stat# + 2);
  sysstat_vals(max_stat# + 2) := 0;

  -- (populate the stat# table)
  FOR stat#_val_pair IN
    (SELECT statistic# stat#, value
       FROM v$sysstat)
  LOOP
    sysstat_vals(stat#_val_pair.stat# + 1) := stat#_val_pair.value;
  END LOOP;

  ----
  -- populate the SYSSTAT regions of the output record
  --
  -- Note: The order of this list must match the alphabetical order of
  --       statistic names!
  ----

  i := 1;
  physical_reads        := sysstat_vals(ordered_stat#s(i)); i := i + 1;
  physical_reads_direct := sysstat_vals(ordered_stat#s(i)); i := i + 1;
  redo_entries          := sysstat_vals(ordered_stat#s(i)); i := i + 1;
  redo_space_requests   := sysstat_vals(ordered_stat#s(i)); i := i + 1;
  logical_reads         := sysstat_vals(ordered_stat#s(i)); i := i + 1;
  sorts_disk            := sysstat_vals(ordered_stat#s(i)); i := i + 1;
  sorts_memory          := sysstat_vals(ordered_stat#s(i)); i := i + 1;

  ----
  -- get library cache pin data
  ----
  SELECT SUM(pins), SUM(pinhits)
    INTO libcache_pins, libcache_pinhits
    FROM v$librarycache;

  ----
  -- get dictionary gets data
  ----
  SELECT SUM(gets), SUM(getmisses)
    INTO dictionary_gets, dictionary_misses
    FROM v$rowcache;

  -- open the cursor to return
  OPEN data_cursor FOR
    SELECT sorts_memory,
           sorts_disk,
           logical_reads,
           physical_reads,
           physical_reads_direct,
           redo_entries,
           redo_space_requests,
           libcache_pins,
           libcache_pinhits,
           dictionary_gets,
           dictionary_misses
      FROM dual;

  :1 := data_cursor;
END;
]]></Property>
			<Property NAME="SQLOUTPARAMPOS" SCOPE="GLOBAL">1</Property>
			<Property NAME="SQLOUTPARAMTYPE" SCOPE="GLOBAL">SQL_CURSOR</Property>
			<Property NAME="MachineName" SCOPE="INSTANCE">MachineName</Property>
			<Property NAME="Port" SCOPE="INSTANCE">Port</Property>
			<Property NAME="SID" SCOPE="INSTANCE">SID</Property>
			<Property NAME="UserName" SCOPE="INSTANCE">UserName</Property>
			<Property NAME="password" SCOPE="INSTANCE">password</Property>
			<Property NAME="Role" SCOPE="INSTANCE" OPTIONAL="TRUE">Role</Property>
		</QueryDescriptor>
	</Metric>

       <!--
  ======================================================================
  == Category:         SGA Pool Wastage
  == Collection Level: Minimum
  == Purpose:          Alerts, Trending
  ======================================================================
    -->
 	<Metric NAME="sga_pool_wastage" TYPE="TABLE">
		<ValidIf>
			<CategoryProp NAME="VersionCategory" CHOICES="pre8;8i;8iR2;9i;9iR2"/>
		</ValidIf>
		<Display>
			<Label NLSID="sga_pool_wastage">SGA Pool Wastage</Label>
		</Display>
		<TableDescriptor>
			<ColumnDescriptor NAME="shared_free_pct" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="sga_pool_wastage_shared_free_pct">Shared Pool Free (%)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="large_free_pct" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="sga_pool_wastage_large_free_pct">Large Pool Free (%)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="java_free_pct" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="sga_pool_wastage_java_free_pct">Java Pool Free (%)</Label>

				</Display>
			</ColumnDescriptor>
		</TableDescriptor>
		<QueryDescriptor FETCHLET_ID="SQL">
			<Property NAME="STATEMENT" SCOPE="GLOBAL"><![CDATA[
DECLARE

  shared_free_pct NUMBER;
  large_free_pct  NUMBER;
  java_free_pct   NUMBER;

  TYPE        data_cursor_type IS REF CURSOR;
  data_cursor data_cursor_type;

BEGIN

  ----
  -- compute each percentage
  ----
  FOR pool_pct_pair IN
    (SELECT pool,
            DECODE(total_bytes, 0, NULL, 100 * free_bytes / total_bytes) pct
       FROM (SELECT pool,
                    SUM(bytes) total_bytes,
                    SUM(DECODE(name, 'free memory', bytes, 0)) free_bytes
               FROM v$sgastat
              GROUP BY pool))
  LOOP
    IF pool_pct_pair.pool = 'shared pool' THEN
      shared_free_pct := pool_pct_pair.pct;
    ELSIF pool_pct_pair.pool = 'java pool' THEN
      java_free_pct   := pool_pct_pair.pct;
    ELSIF pool_pct_pair.pool = 'large pool' THEN
      large_free_pct  := pool_pct_pair.pct;
    END IF;
  END LOOP;

  -- open the cursor to return
  OPEN data_cursor FOR
    SELECT shared_free_pct,
           large_free_pct,
           java_free_pct
      FROM dual;

  :1 := data_cursor;
END;
]]></Property>
			<Property NAME="SQLOUTPARAMPOS" SCOPE="GLOBAL">1</Property>
			<Property NAME="SQLOUTPARAMTYPE" SCOPE="GLOBAL">SQL_CURSOR</Property>
			<Property NAME="MachineName" SCOPE="INSTANCE">MachineName</Property>
			<Property NAME="Port" SCOPE="INSTANCE">Port</Property>
			<Property NAME="SID" SCOPE="INSTANCE">SID</Property>
			<Property NAME="UserName" SCOPE="INSTANCE">UserName</Property>
			<Property NAME="password" SCOPE="INSTANCE">password</Property>
			<Property NAME="Role" SCOPE="INSTANCE" OPTIONAL="TRUE">Role</Property>
		</QueryDescriptor>
	</Metric>

  <!--
  ======================================================================
  == Category:         Wait Bottlenecks
  == Collection Level: Minimum
  == Purpose:          Alerts, Trending
  ======================================================================
    -->
<Metric NAME="wait_bottlenecks" TYPE="TABLE">
    <ValidIf>
       <CategoryProp NAME="VersionCategory" CHOICES="pre8;8i;8iR2;9i;9iR2"/>
    </ValidIf>
    <Display>
      <Label NLSID="wait_bottlenecks">Wait Bottlenecks</Label>
    </Display>

    <TableDescriptor>

      <!-- columns provided by the query descriptor's fetchlet call -->

      <!-- Note: The order of these columns must match the output ADT. -->
      <!--       The field name matches the column name only for clarity. -->
      <ColumnDescriptor NAME="local_write_wait_time" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
        <Display>
          <Label NLSID="wait_bottlenecks_local_write_wait_time">local_write_wait_time</Label>
        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="net_reset_to_client_time" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
        <Display>
          <Label NLSID="wait_bottlenecks_net_reset_to_client_time">net_reset_to_client_time</Label>
        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="net_reset_to_dblink_time" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
        <Display>
          <Label NLSID="wait_bottlenecks_net_reset_to_dblink_time">net_reset_to_dblink_time</Label>
        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="enqueue_dml_time" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
        <Display>
          <Label NLSID="wait_bottlenecks_enqueue_dml_time">enqueue_dml_time</Label>
        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="enqueue_row_lock_time" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
        <Display>
          <Label NLSID="wait_bottlenecks_enqueue_row_lock_time">enqueue_row_lock_time</Label>
        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="enqueue_userdef_time" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
        <Display>
          <Label NLSID="wait_bottlenecks_enqueue_userdef_time">enqueue_userdef_time</Label>
        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="log_file_sync_time" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
        <Display>
          <Label NLSID="wait_bottlenecks_log_file_sync_time">log_file_sync_time</Label>
        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="buffer_busy_waits_time" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
        <Display>
          <Label NLSID="wait_bottlenecks_buffer_busy_waits_time">buffer_busy_waits_time</Label>
        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="latch_cache_buffer_chains_time" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
        <Display>
          <Label NLSID="wait_bottlenecks_latch_cache_buffer_chains_time">latch_cache_buffer_chains_time</Label>
        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="latch_library_cache_time" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
        <Display>
          <Label NLSID="wait_bottlenecks_latch_library_cache_time">latch_library_cache_time</Label>
        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="library_cache_load_lock_time" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
        <Display>
          <Label NLSID="wait_bottlenecks_library_cache_load_lock_time">library_cache_load_lock_time</Label>
        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="library_cache_lock_time" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
        <Display>
          <Label NLSID="wait_bottlenecks_library_cache_lock_time">library_cache_lock_time</Label>
        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="library_cache_pin_time" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
        <Display>
          <Label NLSID="wait_bottlenecks_library_cache_pin_time">library_cache_pin_time</Label>
        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="pipe_put_time" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
        <Display>
          <Label NLSID="wait_bottlenecks_pipe_put_time">pipe_put_time</Label>
        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="row_cache_lock_time" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
        <Display>
          <Label NLSID="wait_bottlenecks_row_cache_lock_time">row_cache_lock_time</Label>
        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="enqueue_hw_time" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
        <Display>
          <Label NLSID="wait_bottlenecks_enqueue_hw_time">enqueue_hw_time</Label>
        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="enqueue_st_time" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
        <Display>
          <Label NLSID="wait_bottlenecks_enqueue_st_time">enqueue_st_time</Label>
        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="enqueue_alloc_itl_time" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
        <Display>
          <Label NLSID="wait_bottlenecks_enqueue_alloc_itl_time">enqueue_alloc_itl_time</Label>
        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="free_buffer_waits_time" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
        <Display>
          <Label NLSID="wait_bottlenecks_free_buffer_waits_time">free_buffer_waits_time</Label>
        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="latch_redo_copy_time" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
        <Display>
          <Label NLSID="wait_bottlenecks_latch_redo_copy_time">latch_redo_copy_time</Label>
        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="latch_shared_pool_time" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
        <Display>
          <Label NLSID="wait_bottlenecks_latch_shared_pool_time">latch_shared_pool_time</Label>
        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="log_buffer_space_time" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
        <Display>
          <Label NLSID="wait_bottlenecks_log_buffer_space_time">log_buffer_space_time</Label>
        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="log_file_switch_arch_time" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
        <Display>
          <Label NLSID="wait_bottlenecks_log_file_switch_arch_time">log_file_switch_arch_time</Label>
        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="log_file_switch_ckpt_time" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
        <Display>
          <Label NLSID="wait_bottlenecks_log_file_switch_ckpt_time">log_file_switch_ckpt_time</Label>
        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="log_file_switch_complete_time" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
        <Display>
          <Label NLSID="wait_bottlenecks_log_file_switch_complete_time">log_file_switch_complete_time</Label>
        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="log_switch_arch_time" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
        <Display>
          <Label NLSID="wait_bottlenecks_log_switch_arch_time">log_switch_arch_time</Label>
        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="write_complete_waits_time" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
        <Display>
          <Label NLSID="wait_bottlenecks_write_complete_waits_time">write_complete_waits_time</Label>
        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="net_msg_to_client_time" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
        <Display>
          <Label NLSID="wait_bottlenecks_net_msg_to_client_time">net_msg_to_client_time</Label>
        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="net_msg_to_dblink_time" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
        <Display>
          <Label NLSID="wait_bottlenecks_net_msg_to_dblink_time">net_msg_to_dblink_time</Label>
        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="net_more_from_client_time" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
        <Display>
          <Label NLSID="wait_bottlenecks_net_more_from_client_time">net_more_from_client_time</Label>
        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="net_more_from_dblink_time" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
        <Display>
          <Label NLSID="wait_bottlenecks_net_more_from_dblink_time">net_more_from_dblink_time</Label>
        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="net_more_to_client_time" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
        <Display>
          <Label NLSID="wait_bottlenecks_net_more_to_client_time">net_more_to_client_time</Label>
        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="net_more_to_dblink_time" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
        <Display>
          <Label NLSID="wait_bottlenecks_net_more_to_dblink_time">net_more_to_dblink_time</Label>
        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="db_file_scattered_read_time" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
        <Display>
          <Label NLSID="wait_bottlenecks_db_file_scattered_read_time">db_file_scattered_read_time</Label>
        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="db_file_sequential_read_time" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
        <Display>
          <Label NLSID="wait_bottlenecks_db_file_sequential_read_time">db_file_sequential_read_time</Label>
        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="db_file_single_write_time" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
        <Display>
          <Label NLSID="wait_bottlenecks_db_file_single_write_time">db_file_single_write_time</Label>
        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="direct_path_read_time" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
        <Display>
          <Label NLSID="wait_bottlenecks_direct_path_read_time">direct_path_read_time</Label>
        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="direct_path_read_lob_time" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
        <Display>
          <Label NLSID="wait_bottlenecks_direct_path_read_lob_time">direct_path_read_lob_time</Label>
        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="direct_path_write_time" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
        <Display>
          <Label NLSID="wait_bottlenecks_direct_path_write_time">direct_path_write_time</Label>
        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="direct_path_write_lob_time" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
        <Display>
          <Label NLSID="wait_bottlenecks_direct_path_write_lob_time">direct_path_write_lob_time</Label>
        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="latch_free_time" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
        <Display>
          <Label NLSID="wait_bottlenecks_latch_free_time">latch_free_time</Label>
        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="enqueue_time" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
        <Display>
          <Label NLSID="wait_bottlenecks_enqueue_time">enqueue_time</Label>
        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="user_wait_time" TYPE="NUMBER" TRANSIENT="TRUE" HELP="NO_HELP">
        <Display>
          <Label NLSID="wait_bottlenecks_user_wait_time">Wait Time (sec)</Label>
        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="user_cpu_time" TYPE="NUMBER" TRANSIENT="TRUE" HELP="NO_HELP">
        <Display>
          <Label NLSID="wait_bottlenecks_user_cpu_time">CPU Time (sec)</Label>
        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="userio_time" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
        <Display>
          <Label NLSID="wait_bottlenecks_userio_wait_time">User I/O Wait Time (sec)</Label>
        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="cpu_cnt" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
        <Display>
          <Label NLSID="wait_bottlenecks_cpu_cnt">CPU Count</Label>
        </Display>
      </ColumnDescriptor>

      <ColumnDescriptor NAME="service_time_fg_delta" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP"
                        COMPUTE_EXPR="(_user_wait_time > user_wait_time) ? 0 : ((_user_cpu_time > user_cpu_time) ? 0 : (user_wait_time - _user_wait_time) + (user_cpu_time - _user_cpu_time))">
        <Display>
          <Label NLSID="wait_bottlenecks_service_time_fg">Service Time Delta (sec)</Label>
        </Display>
      </ColumnDescriptor>

      <!-- columns based on deltas or other computations from counters -->

      <ColumnDescriptor NAME="local_write_wait_pct" TYPE="NUMBER" IS_KEY="FALSE"
                        COMPUTE_EXPR="(local_write_wait_time > _local_write_wait_time) ? 100*(local_write_wait_time - _local_write_wait_time)/service_time_fg_delta : 0">
        <Display FOR_SUMMARY_UI="TRUE">
          <Label NLSID="wait_bottlenecks_local_write_wait_pct">Local write wait (%)</Label>

        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="net_reset_to_client_pct" TYPE="NUMBER" IS_KEY="FALSE"
                        COMPUTE_EXPR="(net_reset_to_client_time > _net_reset_to_client_time) ? 100*(net_reset_to_client_time - _net_reset_to_client_time)/service_time_fg_delta : 0">
        <Display FOR_SUMMARY_UI="TRUE">
          <Label NLSID="wait_bottlenecks_net_reset_to_client_pct">SQL*Net break/reset to client (%)</Label>

        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="net_reset_to_dblink_pct" TYPE="NUMBER" IS_KEY="FALSE"
                        COMPUTE_EXPR="(net_reset_to_dblink_time > _net_reset_to_dblink_time) ? 100*(net_reset_to_dblink_time - _net_reset_to_dblink_time)/service_time_fg_delta : 0">
        <Display FOR_SUMMARY_UI="TRUE">
          <Label NLSID="wait_bottlenecks_net_reset_to_dblink_pct">SQL*Net break/reset to dblink (%)</Label>

        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="enqueue_dml_pct" TYPE="NUMBER" IS_KEY="FALSE"
                        COMPUTE_EXPR="(enqueue_dml_time > _enqueue_dml_time) ? 100*(enqueue_dml_time - _enqueue_dml_time)/service_time_fg_delta : 0">
        <Display FOR_SUMMARY_UI="TRUE">
          <Label NLSID="wait_bottlenecks_enqueue_dml_pct">Enqueue: DML - contention (%)</Label>

        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="enqueue_row_lock_pct" TYPE="NUMBER" IS_KEY="FALSE"
                        COMPUTE_EXPR="(enqueue_row_lock_time > _enqueue_row_lock_time) ? 100*(enqueue_row_lock_time - _enqueue_row_lock_time)/service_time_fg_delta : 0">
        <Display FOR_SUMMARY_UI="TRUE">
          <Label NLSID="wait_bottlenecks_enqueue_row_lock_pct">Enqueue: TM, TX, Transaction - row lock contention (%)</Label>
          <ShortName NLSID="wait_bottlenecks_enqueue_row_lock_pct_sht">Enqueue: TM, TX, Txn (%)</ShortName>
        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="enqueue_userdef_pct" TYPE="NUMBER" IS_KEY="FALSE"
                        COMPUTE_EXPR="(enqueue_userdef_time > _enqueue_userdef_time) ? 100*(enqueue_userdef_time - _enqueue_userdef_time)/service_time_fg_delta : 0">
        <Display FOR_SUMMARY_UI="TRUE">
          <Label NLSID="wait_bottlenecks_enqueue_userdef_pct">Enqueue: UL: User-defined - contention (%)</Label>
          <ShortName NLSID="wait_bottlenecks_enqueue_userdef_pct_sht">Enqueue: UL (%)</ShortName>
        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="log_file_sync_pct" TYPE="NUMBER" IS_KEY="FALSE"
                        COMPUTE_EXPR="(log_file_sync_time > _log_file_sync_time) ? 100*(log_file_sync_time - _log_file_sync_time)/service_time_fg_delta : 0">
        <Display FOR_SUMMARY_UI="TRUE">
          <Label NLSID="wait_bottlenecks_log_file_sync_pct">Log file sync (%)</Label>

        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="buffer_busy_waits_pct" TYPE="NUMBER" IS_KEY="FALSE"
                        COMPUTE_EXPR="(buffer_busy_waits_time > _buffer_busy_waits_time) ? 100*(buffer_busy_waits_time - _buffer_busy_waits_time)/service_time_fg_delta : 0">
        <Display FOR_SUMMARY_UI="TRUE">
          <Label NLSID="wait_bottlenecks_buffer_busy_waits_pct">Buffer busy waits (%)</Label>

        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="latch_cache_buffer_chains_pct" TYPE="NUMBER" IS_KEY="FALSE"
                        COMPUTE_EXPR="(latch_cache_buffer_chains_time > _latch_cache_buffer_chains_time) ? 100*(latch_cache_buffer_chains_time - _latch_cache_buffer_chains_time)/service_time_fg_delta : 0">
        <Display FOR_SUMMARY_UI="TRUE">
          <Label NLSID="wait_bottlenecks_latch_cache_buffer_chains_pct">Latch: cache buffer chains (%)</Label>

        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="latch_library_cache_pct" TYPE="NUMBER" IS_KEY="FALSE"
                        COMPUTE_EXPR="(latch_library_cache_time > _latch_library_cache_time) ? 100*(latch_library_cache_time - _latch_library_cache_time)/service_time_fg_delta : 0">
        <Display FOR_SUMMARY_UI="TRUE">
          <Label NLSID="wait_bottlenecks_latch_library_cache_pct">Latch: library cache (%)</Label>

        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="library_cache_load_lock_pct" TYPE="NUMBER" IS_KEY="FALSE"
                        COMPUTE_EXPR="(library_cache_load_lock_time > _library_cache_load_lock_time) ? 100*(library_cache_load_lock_time - _library_cache_load_lock_time)/service_time_fg_delta : 0">
        <Display FOR_SUMMARY_UI="TRUE">
          <Label NLSID="wait_bottlenecks_library_cache_load_lock_pct">Library cache load lock (%)</Label>

        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="library_cache_lock_pct" TYPE="NUMBER" IS_KEY="FALSE"
                        COMPUTE_EXPR="(library_cache_lock_time > _library_cache_lock_time) ? 100*(library_cache_lock_time - _library_cache_lock_time)/service_time_fg_delta : 0">
        <Display FOR_SUMMARY_UI="TRUE">
          <Label NLSID="wait_bottlenecks_library_cache_lock_pct">Library cache lock (%)</Label>

        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="library_cache_pin_pct" TYPE="NUMBER" IS_KEY="FALSE"
                        COMPUTE_EXPR="(library_cache_pin_time > _library_cache_pin_time) ? 100*(library_cache_pin_time - _library_cache_pin_time)/service_time_fg_delta : 0">
        <Display FOR_SUMMARY_UI="TRUE">
          <Label NLSID="wait_bottlenecks_library_cache_pin_pct">Library cache pin (%)</Label>

        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="pipe_put_pct" TYPE="NUMBER" IS_KEY="FALSE"
                        COMPUTE_EXPR="(pipe_put_time > _pipe_put_time) ? 100*(pipe_put_time - _pipe_put_time)/service_time_fg_delta : 0">
        <Display FOR_SUMMARY_UI="TRUE">
          <Label NLSID="wait_bottlenecks_pipe_put_pct">Pipe put (%)</Label>

        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="row_cache_lock_pct" TYPE="NUMBER" IS_KEY="FALSE"
                        COMPUTE_EXPR="(row_cache_lock_time > _row_cache_lock_time) ? 100*(row_cache_lock_time - _row_cache_lock_time)/service_time_fg_delta : 0">
        <Display FOR_SUMMARY_UI="TRUE">
          <Label NLSID="wait_bottlenecks_row_cache_lock_pct">Row cache lock (%)</Label>

        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="enqueue_hw_pct" TYPE="NUMBER" IS_KEY="FALSE"
                        COMPUTE_EXPR="(enqueue_hw_time > _enqueue_hw_time) ? 100*(enqueue_hw_time - _enqueue_hw_time)/service_time_fg_delta : 0">
        <Display FOR_SUMMARY_UI="TRUE">
          <Label NLSID="wait_bottlenecks_enqueue_hw_pct">Enqueue: HW, Segment High Water Mark - contention (%)</Label>
          <ShortName NLSID="wait_bottlenecks_enqueue_hw_pct_sht">Enqueue: HW Segment HWM (%)</ShortName>
        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="enqueue_st_pct" TYPE="NUMBER" IS_KEY="FALSE"
                        COMPUTE_EXPR="(enqueue_st_time > _enqueue_st_time) ? 100*(enqueue_st_time - _enqueue_st_time)/service_time_fg_delta : 0">
        <Display FOR_SUMMARY_UI="TRUE">
          <Label NLSID="wait_bottlenecks_enqueue_st_pct">Enqueue: ST, Space Transaction - contention (%)</Label>
          <ShortName NLSID="wait_bottlenecks_enqueue_st_pct_sht">Enqueue: ST, Space Txn (%)</ShortName>
        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="enqueue_alloc_itl_pct" TYPE="NUMBER" IS_KEY="FALSE"
                        COMPUTE_EXPR="(enqueue_alloc_itl_time > _enqueue_alloc_itl_time) ? 100*(enqueue_alloc_itl_time - _enqueue_alloc_itl_time)/service_time_fg_delta : 0">
        <Display FOR_SUMMARY_UI="TRUE">
          <Label NLSID="wait_bottlenecks_enqueue_alloc_itl_pct">Enqueue: TX mode 4, Transaction - allocate ITL entry (%)</Label>
          <ShortName NLSID="wait_bottlenecks_enqueue_alloc_itl_pct_sht">Enqueue: TX mode 4, Txn (%)</ShortName>
        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="free_buffer_waits_pct" TYPE="NUMBER" IS_KEY="FALSE"
                        COMPUTE_EXPR="(free_buffer_waits_time > _free_buffer_waits_time) ? 100*(free_buffer_waits_time - _free_buffer_waits_time)/service_time_fg_delta : 0">
        <Display FOR_SUMMARY_UI="TRUE">
          <Label NLSID="wait_bottlenecks_free_buffer_waits_pct">Free buffer waits (%)</Label>

        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="latch_redo_copy_pct" TYPE="NUMBER" IS_KEY="FALSE"
                        COMPUTE_EXPR="(latch_redo_copy_time > _latch_redo_copy_time) ? 100*(latch_redo_copy_time - _latch_redo_copy_time)/service_time_fg_delta : 0">
        <Display FOR_SUMMARY_UI="TRUE">
          <Label NLSID="wait_bottlenecks_latch_redo_copy_pct">Latch: redo copy (%)</Label>

        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="latch_shared_pool_pct" TYPE="NUMBER" IS_KEY="FALSE"
                        COMPUTE_EXPR="(latch_shared_pool_time > _latch_shared_pool_time) ? 100*(latch_shared_pool_time - _latch_shared_pool_time)/service_time_fg_delta : 0">
        <Display FOR_SUMMARY_UI="TRUE">
          <Label NLSID="wait_bottlenecks_latch_shared_pool_pct">Latch: shared pool (%)</Label>

        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="log_buffer_space_pct" TYPE="NUMBER" IS_KEY="FALSE"
                        COMPUTE_EXPR="(log_buffer_space_time > _log_buffer_space_time) ? 100*(log_buffer_space_time - _log_buffer_space_time)/service_time_fg_delta : 0">
        <Display FOR_SUMMARY_UI="TRUE">
          <Label NLSID="wait_bottlenecks_log_buffer_space_pct">Log buffer space (%)</Label>

        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="log_file_switch_arch_pct" TYPE="NUMBER" IS_KEY="FALSE"
                        COMPUTE_EXPR="(log_file_switch_arch_time > _log_file_switch_arch_time) ? 100*(log_file_switch_arch_time - _log_file_switch_arch_time)/service_time_fg_delta : 0">
        <Display FOR_SUMMARY_UI="TRUE">
          <Label NLSID="wait_bottlenecks_log_file_switch_arch_pct">Log file switch (archiving needed) (%)</Label>

        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="log_file_switch_ckpt_pct" TYPE="NUMBER" IS_KEY="FALSE"
                        COMPUTE_EXPR="(log_file_switch_ckpt_time > _log_file_switch_ckpt_time) ? 100*(log_file_switch_ckpt_time - _log_file_switch_ckpt_time)/service_time_fg_delta : 0">
        <Display FOR_SUMMARY_UI="TRUE">
          <Label NLSID="wait_bottlenecks_log_file_switch_ckpt_pct">Log file switch (checkpoint complete) (%)</Label>
          <ShortName NLSID="wait_bottlenecks_log_file_switch_ckpt_pct_sht">Log file switch (ckpt complete) (%)</ShortName>
        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="log_file_switch_complete_pct" TYPE="NUMBER" IS_KEY="FALSE"
                        COMPUTE_EXPR="(log_file_switch_complete_time > _log_file_switch_complete_time) ? 100*(log_file_switch_complete_time - _log_file_switch_complete_time)/service_time_fg_delta : 0">
        <Display FOR_SUMMARY_UI="TRUE">
          <Label NLSID="wait_bottlenecks_log_file_switch_complete_pct">Log file switch completion (%)</Label>

        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="log_switch_arch_pct" TYPE="NUMBER" IS_KEY="FALSE"
                        COMPUTE_EXPR="(log_switch_arch_time > _log_switch_arch_time) ? 100*(log_switch_arch_time - _log_switch_arch_time)/service_time_fg_delta : 0">
        <Display FOR_SUMMARY_UI="TRUE">
          <Label NLSID="wait_bottlenecks_log_switch_arch_pct">Log switch/archive (%)</Label>

        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="write_complete_waits_pct" TYPE="NUMBER" IS_KEY="FALSE"
                        COMPUTE_EXPR="(write_complete_waits_time > _write_complete_waits_time) ? 100*(write_complete_waits_time - _write_complete_waits_time)/service_time_fg_delta : 0">
        <Display FOR_SUMMARY_UI="TRUE">
          <Label NLSID="wait_bottlenecks_write_complete_waits_pct">Write complete waits (%)</Label>

        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="net_msg_to_client_pct" TYPE="NUMBER" IS_KEY="FALSE"
                        COMPUTE_EXPR="(net_msg_to_client_time > _net_msg_to_client_time) ? 100*(net_msg_to_client_time - _net_msg_to_client_time)/service_time_fg_delta : 0">
        <Display FOR_SUMMARY_UI="TRUE">
          <Label NLSID="wait_bottlenecks_net_msg_to_client_pct">SQL*Net message to client (%)</Label>

        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="net_msg_to_dblink_pct" TYPE="NUMBER" IS_KEY="FALSE"
                        COMPUTE_EXPR="(net_msg_to_dblink_time > _net_msg_to_dblink_time) ? 100*(net_msg_to_dblink_time - _net_msg_to_dblink_time)/service_time_fg_delta : 0">
        <Display FOR_SUMMARY_UI="TRUE">
          <Label NLSID="wait_bottlenecks_net_msg_to_dblink_pct">SQL*Net message to dblink (%)</Label>

        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="net_more_from_client_pct" TYPE="NUMBER" IS_KEY="FALSE"
                        COMPUTE_EXPR="(net_more_from_client_time > _net_more_from_client_time) ? 100*(net_more_from_client_time - _net_more_from_client_time)/service_time_fg_delta : 0">
        <Display FOR_SUMMARY_UI="TRUE">
          <Label NLSID="wait_bottlenecks_net_more_from_client_pct">SQL*Net more data from client (%)</Label>

        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="net_more_from_dblink_pct" TYPE="NUMBER" IS_KEY="FALSE"
                        COMPUTE_EXPR="(net_more_from_dblink_time > _net_more_from_dblink_time) ? 100*(net_more_from_dblink_time - _net_more_from_dblink_time)/service_time_fg_delta : 0">
        <Display FOR_SUMMARY_UI="TRUE">
          <Label NLSID="wait_bottlenecks_net_more_from_dblink_pct">SQL*Net more data from dblink (%)</Label>

        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="net_more_to_client_pct" TYPE="NUMBER" IS_KEY="FALSE"
                        COMPUTE_EXPR="(net_more_to_client_time > _net_more_to_client_time) ? 100*(net_more_to_client_time - _net_more_to_client_time)/service_time_fg_delta : 0">
        <Display FOR_SUMMARY_UI="TRUE">
          <Label NLSID="wait_bottlenecks_net_more_to_client_pct">SQL*Net more data to client (%)</Label>

        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="net_more_to_dblink_pct" TYPE="NUMBER" IS_KEY="FALSE"
                        COMPUTE_EXPR="(net_more_to_dblink_time > _net_more_to_dblink_time) ? 100*(net_more_to_dblink_time - _net_more_to_dblink_time)/service_time_fg_delta : 0">
        <Display FOR_SUMMARY_UI="TRUE">
          <Label NLSID="wait_bottlenecks_net_more_to_dblink_pct">SQL*Net more data to dblink (%)</Label>

        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="db_file_scattered_read_pct" TYPE="NUMBER" IS_KEY="FALSE"
                        COMPUTE_EXPR="(db_file_scattered_read_time > _db_file_scattered_read_time) ? 100*(db_file_scattered_read_time - _db_file_scattered_read_time)/service_time_fg_delta : 0">
        <Display FOR_SUMMARY_UI="TRUE">
          <Label NLSID="wait_bottlenecks_db_file_scattered_read_pct">DB file scattered read (%)</Label>

        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="db_file_sequential_read_pct" TYPE="NUMBER" IS_KEY="FALSE"
                        COMPUTE_EXPR="(db_file_sequential_read_time > _db_file_sequential_read_time) ? 100*(db_file_sequential_read_time - _db_file_sequential_read_time)/service_time_fg_delta : 0">
        <Display FOR_SUMMARY_UI="TRUE">
          <Label NLSID="wait_bottlenecks_db_file_sequential_read_pct">DB file sequential read (%)</Label>

        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="db_file_single_write_pct" TYPE="NUMBER" IS_KEY="FALSE"
                        COMPUTE_EXPR="(db_file_single_write_time > _db_file_single_write_time) ? 100*(db_file_single_write_time - _db_file_single_write_time)/service_time_fg_delta : 0">
        <Display FOR_SUMMARY_UI="TRUE">
          <Label NLSID="wait_bottlenecks_db_file_single_write_pct">DB file single write (%)</Label>

        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="direct_path_read_pct" TYPE="NUMBER" IS_KEY="FALSE"
                        COMPUTE_EXPR="(direct_path_read_time > _direct_path_read_time) ? 100*(direct_path_read_time - _direct_path_read_time)/service_time_fg_delta : 0">
        <Display FOR_SUMMARY_UI="TRUE">
          <Label NLSID="wait_bottlenecks_direct_path_read_pct">Direct path read (%)</Label>

        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="direct_path_read_lob_pct" TYPE="NUMBER" IS_KEY="FALSE"
                        COMPUTE_EXPR="(direct_path_read_lob_time > _direct_path_read_lob_time) ? 100*(direct_path_read_lob_time - _direct_path_read_lob_time)/service_time_fg_delta : 0">
        <Display FOR_SUMMARY_UI="TRUE">
          <Label NLSID="wait_bottlenecks_direct_path_read_lob_pct">Direct path read (lob) (%)</Label>

        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="direct_path_write_pct" TYPE="NUMBER" IS_KEY="FALSE"
                        COMPUTE_EXPR="(direct_path_write_time > _direct_path_write_time) ? 100*(direct_path_write_time - _direct_path_write_time)/service_time_fg_delta : 0">
        <Display FOR_SUMMARY_UI="TRUE">
          <Label NLSID="wait_bottlenecks_direct_path_write_pct">Direct path write (%)</Label>

        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="direct_path_write_lob_pct" TYPE="NUMBER" IS_KEY="FALSE"
                        COMPUTE_EXPR="(direct_path_write_lob_time > _direct_path_write_lob_time) ? 100*(direct_path_write_lob_time - _direct_path_write_lob_time)/service_time_fg_delta : 0">
        <Display FOR_SUMMARY_UI="TRUE">
          <Label NLSID="wait_bottlenecks_direct_path_write_lob_pct">Direct path write (lob) (%)</Label>

        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="latch_free_pct" TYPE="NUMBER" IS_KEY="FALSE"
                        COMPUTE_EXPR="(latch_free_time > _latch_free_time) ? 100*(latch_free_time - _latch_free_time)/service_time_fg_delta : 0">
        <Display FOR_SUMMARY_UI="TRUE">
          <Label NLSID="wait_bottlenecks_latch_free_pct">Latch free - other (%)</Label>

        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="enqueue_pct" TYPE="NUMBER" IS_KEY="FALSE"
                        COMPUTE_EXPR="(enqueue_time > _enqueue_time) ? 100*(enqueue_time - _enqueue_time)/service_time_fg_delta : 0">
        <Display FOR_SUMMARY_UI="TRUE">
          <Label NLSID="wait_bottlenecks_enqueue_pct">Enqueue - other (%)</Label>

        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="user_wait_time_pct" TYPE="NUMBER" IS_KEY="FALSE"
                        COMPUTE_EXPR="(user_wait_time > _user_wait_time) ? 100*(user_wait_time - _user_wait_time)/service_time_fg_delta : 0">
        <Display FOR_SUMMARY_UI="TRUE">
          <Label NLSID="wait_bottlenecks_user_wait_time_pct">Wait Time (%)</Label>
          <ShortName NLSID="wait_bottlenecks_user_wait_time_pct_short">Wait Time %</ShortName>
        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="user_cpu_time_delta" TYPE="NUMBER" IS_KEY="FALSE"
                        COMPUTE_EXPR="_user_cpu_time > user_cpu_time ? (1/0) : user_cpu_time - _user_cpu_time">
        <Display FOR_SUMMARY_UI="TRUE">
          <Label NLSID="wait_bottlenecks_user_cpu_time_delta">CPU Time Delta (sec)</Label>
          <ShortName NLSID="wait_bottlenecks_user_cpu_time_delta_short">CPU (sec)</ShortName>
        </Display>
      </ColumnDescriptor>

      <ColumnDescriptor NAME="wait_time_delta" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP"
                        COMPUTE_EXPR="_user_wait_time > user_wait_time ? (1/0) : user_wait_time - _user_wait_time">
        <Display>
          <Label NLSID="wait_bottlenecks_wait_time_delta">Wait Time Delta (sec)</Label>
        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="userio_time_delta" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP"
                        COMPUTE_EXPR="_userio_time > userio_time ? (1/0) : userio_time - _userio_time">
        <Display>
          <Label NLSID="wait_bottlenecks_wait_time_delta">User I/O Wait Time Delta (sec)</Label>
        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="active_sessions" TYPE="NUMBER" IS_KEY="FALSE"
                        COMPUTE_EXPR="service_time_fg_delta/__interval"
                        TRANSIENT="TRUE">
        <Display FOR_SUMMARY_UI="TRUE">
          <Label NLSID="wait_bottlenecks_active_sessions">Active Sessions</Label>

        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="userio_wait_cnt" TYPE="NUMBER" IS_KEY="FALSE"
                        COMPUTE_EXPR="userio_time_delta/__interval">
        <Display FOR_SUMMARY_UI="TRUE">
          <Label NLSID="wait_bottlenecks_userio_wait_cnt">Active Sessions Waiting: I/O</Label>
          <ShortName NLSID="wait_bottlenecks_userio_wait_cnt_short">Sessions: I/O</ShortName>
        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="user_cpu_time_cnt" TYPE="NUMBER" IS_KEY="FALSE"
                        COMPUTE_EXPR="user_cpu_time_delta/__interval">
        <Display FOR_SUMMARY_UI="TRUE">
          <Label NLSID="wait_bottlenecks_user_cpu_time_cnt">Active Sessions Using CPU</Label>
          <ShortName NLSID="wait_bottlenecks_user_cpu_time_cnt_short">Sessions: CPU</ShortName>
        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="other_wait_cnt" TYPE="NUMBER"
                        COMPUTE_EXPR="active_sessions - user_cpu_time_cnt - userio_wait_cnt">
        <Display FOR_SUMMARY_UI="TRUE">
          <Label NLSID="wait_bottlenecks_other_wait_cnt">Active Sessions Waiting: Other</Label>
          <ShortName NLSID="wait_bottlenecks_other_wait_cnt_short">Sessions: Other</ShortName>
        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="avg_user_cpu_time_pct" TYPE="NUMBER" IS_KEY="FALSE"
                        COMPUTE_EXPR="(user_cpu_time_delta/(__interval*cpu_cnt)*100) > 100 ? 100 : (user_cpu_time_delta/(__interval*cpu_cnt)*100)">
        <Display FOR_SUMMARY_UI="TRUE">
          <Label NLSID="wait_bottlenecks_avg_user_cpu_time_pct">Average Instance CPU (%)</Label>
          <ShortName NLSID="wait_bottlenecks_avg_user_cpu_time_pct_short">Instance CPU (%)</ShortName>
        </Display>
      </ColumnDescriptor>

    </TableDescriptor>

    <QueryDescriptor FETCHLET_ID="SQL">
      <Property NAME="STATEMENT" SCOPE="GLOBAL">
<![CDATA[
DECLARE
  local_write_wait_time          NUMBER := NULL;
  net_reset_to_client_time       NUMBER := NULL;
  net_reset_to_dblink_time       NUMBER := NULL;
  enqueue_dml_time               NUMBER := NULL;
  enqueue_row_lock_time          NUMBER := NULL;
  enqueue_userdef_time           NUMBER := NULL;
  log_file_sync_time             NUMBER := NULL;
  buffer_busy_waits_time         NUMBER := NULL;
  latch_cache_buffer_chains_time NUMBER := NULL;
  latch_library_cache_time       NUMBER := NULL;
  library_cache_load_lock_time   NUMBER := NULL;
  library_cache_lock_time        NUMBER := NULL;
  library_cache_pin_time         NUMBER := NULL;
  pipe_put_time                  NUMBER := NULL;
  row_cache_lock_time            NUMBER := NULL;
  enqueue_hw_time                NUMBER := NULL;
  enqueue_st_time                NUMBER := NULL;
  enqueue_alloc_itl_time         NUMBER := NULL;
  free_buffer_waits_time         NUMBER := NULL;
  latch_redo_copy_time           NUMBER := NULL;
  latch_shared_pool_time         NUMBER := NULL;
  log_buffer_space_time          NUMBER := NULL;
  log_file_switch_arch_time      NUMBER := NULL;
  log_file_switch_ckpt_time      NUMBER := NULL;
  log_file_switch_complete_time  NUMBER := NULL;
  log_switch_arch_time           NUMBER := NULL;
  write_complete_waits_time      NUMBER := NULL;
  net_msg_to_client_time         NUMBER := NULL;
  net_msg_to_dblink_time         NUMBER := NULL;
  net_more_from_client_time      NUMBER := NULL;
  net_more_from_dblink_time      NUMBER := NULL;
  net_more_to_client_time        NUMBER := NULL;
  net_more_to_dblink_time        NUMBER := NULL;
  db_file_scattered_read_time    NUMBER := NULL;
  db_file_sequential_read_time   NUMBER := NULL;
  db_file_single_write_time      NUMBER := NULL;
  direct_path_read_time          NUMBER := NULL;
  direct_path_read_lob_time      NUMBER := NULL;
  direct_path_write_time         NUMBER := NULL;
  direct_path_write_lob_time     NUMBER := NULL;
  latch_free_time                NUMBER := NULL;
  enqueue_time                   NUMBER := NULL;
  user_wait_time                 NUMBER := NULL;
  user_cpu_time                  NUMBER := NULL;
  userio_time                    NUMBER := NULL;
  cpu_cnt                        NUMBER       := :1;
  timed_statistics               VARCHAR2(16) := :2;

  TYPE userio_type IS TABLE OF VARCHAR2(64);
  userio userio_type := userio_type('BFILE read', 'buffer read retry', 'db file parallel read', 'db file scattered read', 'db file sequential read', 'db file single write', 'direct path read', 'direct path read (lob)', 'direct path write', 'direct path write (lob)' );

  TYPE        data_cursor_type IS REF CURSOR;
  data_cursor data_cursor_type;

BEGIN

  IF timed_statistics = 'TRUE' THEN

    ----
    -- initialize the time breakdown accumulators
    ----
    user_wait_time := 0;
    userio_time := 0;

    ----
    -- get CPU time (total)
    ----
    SELECT NVL(value, 0)/100
      INTO user_cpu_time
      FROM v$sysstat
     WHERE statistic# = (SELECT statistic#
                           FROM v$statname
                          WHERE name = 'CPU used when call started');

    ----
    -- get wait time (total)
    -- deduct idle waits and purely background waits
    ----
    FOR event_time_pair IN
      (SELECT event, time_waited/100 time_waited
         FROM v$system_event
        WHERE event NOT IN
             ('ARCH random i/o',
              'ARCH sequential i/o',
              'KXFX: execution message dequeue - Slaves',
              'LGWR random i/o',
              'LGWR sequential i/o',
              'LGWR wait for redo copy',
              'Null event',
              'PL/SQL lock timer',
              'PX Deq Credit: need buffer',
              'PX Deq: Execute Reply',
              'PX Deq: Execution Msg',
              'PX Deq: Index Merge Close',
              'PX Deq: Index Merge Execute',
              'PX Deq: Index Merge Reply',
              'PX Deq: Join ACK',
              'PX Deq: Msg Fragment',
              'PX Deq: Par Recov Change Vector',
              'PX Deq: Par Recov Execute',
              'PX Deq: Par Recov Reply',
              'PX Deq: Parse Reply',
              'PX Deq: Table Q Normal',
              'PX Deq: Table Q Sample',
              'PX Deq: Txn Recovery Reply',
              'PX Deq: Txn Recovery Start',
              'PX Deque wait',
              'PX Idle Wait',
              'Queue Monitor Shutdown Wait',
              'Queue Monitor Slave Wait',
              'Queue Monitor Wait',
              'RFS random i/o',
              'RFS sequential i/o',
              'RFS write',
              'SQL*Net message from client',
              'SQL*Net message from dblink',
              'STREAMS apply coord waiting for slave message',
              'STREAMS apply coord waiting for some work to finish',
              'STREAMS apply slave idle wait',
              'STREAMS capture process filter callback wait for ruleset',
              'STREAMS fetch slave waiting for txns',
              'WMON goes to sleep',
              'async disk IO',
              'client message',
              'control file parallel write',
              'control file sequential read',
              'control file single write',
              'db file single write',
              'db file parallel write',
              'dispatcher timer',
              'gcs log flush sync',
              'gcs remote message',
              'ges reconfiguration to start',
              'ges remote message',
              'io done',
              'jobq slave wait',
              'lock manager wait for remote message',
              'log file parallel write',
              'log file sequential read',
              'log file single write',
              'parallel dequeue wait',
              'parallel recovery coordinator waits for cleanup of slaves',
              'parallel query dequeue',
              'parallel query idle wait - Slaves',
              'pipe get',
              'pmon timer',
              'queue messages',
              'rdbms ipc message',
              'recovery read',
              'single-task message',
              'slave wait',
              'smon timer',
              'statement suspended, wait error to be cleared',
              'unread message',
              'virtual circuit',
              'virtual circuit status',
              'wait for activate message',
              'wait for transaction',
              'wait for unread message on broadcast channel',
              'wait for unread message on multiple broadcast channels',
              'wakeup event for builder',
              'wakeup event for preparer',
              'wakeup event for reader',
              'wakeup time manager'))
    LOOP

      IF event_time_pair.event = 'SQL*Net break/reset to client' THEN
        net_reset_to_client_time := event_time_pair.time_waited;
      ELSIF event_time_pair.event = 'SQL*Net break/reset to dblink' THEN
        net_reset_to_dblink_time := event_time_pair.time_waited;
      ELSIF event_time_pair.event = 'SQL*Net message to client' THEN
        net_msg_to_client_time := event_time_pair.time_waited;
      ELSIF event_time_pair.event = 'SQL*Net message to dblink' THEN
        net_msg_to_dblink_time := event_time_pair.time_waited;
      ELSIF event_time_pair.event = 'SQL*Net more data from client' THEN
        net_more_from_client_time := event_time_pair.time_waited;
      ELSIF event_time_pair.event = 'SQL*Net more data from dblink' THEN
        net_more_from_dblink_time := event_time_pair.time_waited;
      ELSIF event_time_pair.event = 'SQL*Net more data to client' THEN
        net_more_to_client_time := event_time_pair.time_waited;
      ELSIF event_time_pair.event = 'SQL*Net more data to dblink' THEN
        net_more_to_dblink_time := event_time_pair.time_waited;
      ELSIF event_time_pair.event = 'buffer busy waits' THEN
        buffer_busy_waits_time := event_time_pair.time_waited;
      ELSIF event_time_pair.event = 'db file scattered read' THEN
        db_file_scattered_read_time := event_time_pair.time_waited;
      ELSIF event_time_pair.event = 'db file sequential read' THEN
        db_file_sequential_read_time := event_time_pair.time_waited;
      ELSIF event_time_pair.event = 'db file single write' THEN
        db_file_single_write_time := event_time_pair.time_waited;
      ELSIF event_time_pair.event = 'direct path read' THEN
        direct_path_read_time := event_time_pair.time_waited;
      ELSIF event_time_pair.event = 'direct path read (lob)' THEN
        direct_path_read_lob_time := event_time_pair.time_waited;
      ELSIF event_time_pair.event = 'direct path write' THEN
        direct_path_write_time := event_time_pair.time_waited;
      ELSIF event_time_pair.event = 'direct path write (lob)' THEN
        direct_path_write_lob_time := event_time_pair.time_waited;
      ELSIF event_time_pair.event = 'enqueue: DML - contention' THEN
        enqueue_dml_time := event_time_pair.time_waited;
      ELSIF event_time_pair.event = 'enqueue: HW, Segment High Water Mark - contention' THEN
        enqueue_hw_time := event_time_pair.time_waited;
      ELSIF event_time_pair.event = 'enqueue: ST, Space Transaction - contention' THEN
        enqueue_st_time := event_time_pair.time_waited;
      ELSIF event_time_pair.event = 'enqueue: TM,TX, Transaction - row lock contention' THEN
        enqueue_row_lock_time := event_time_pair.time_waited;
      ELSIF event_time_pair.event = 'enqueue: TX mode 4, Transaction - allocate ITL entry' THEN
        enqueue_alloc_itl_time := event_time_pair.time_waited;
      ELSIF event_time_pair.event = 'enqueue: UL: User-defined - contention' THEN
        enqueue_userdef_time := event_time_pair.time_waited;
      ELSIF event_time_pair.event LIKE 'enqueue%' THEN
        enqueue_time := NVL(enqueue_time, 0) + event_time_pair.time_waited;
      ELSIF event_time_pair.event = 'free buffer waits' THEN
        free_buffer_waits_time := event_time_pair.time_waited;
      ELSIF event_time_pair.event = 'latch: cache buffers chains' THEN
        latch_cache_buffer_chains_time := event_time_pair.time_waited;
      ELSIF event_time_pair.event = 'latch: library cache' THEN
        latch_library_cache_time := event_time_pair.time_waited;
      ELSIF event_time_pair.event = 'latch: redo copy' THEN
        latch_redo_copy_time := event_time_pair.time_waited;
      ELSIF event_time_pair.event = 'latch: shared pool' THEN
        latch_shared_pool_time := event_time_pair.time_waited;
      ELSIF event_time_pair.event LIKE 'latch%' THEN
        latch_free_time := NVL(latch_free_time, 0) + event_time_pair.time_waited;
      ELSIF event_time_pair.event = 'library cache load lock' THEN
        library_cache_load_lock_time := event_time_pair.time_waited;
      ELSIF event_time_pair.event = 'library cache lock' THEN
        library_cache_lock_time := event_time_pair.time_waited;
      ELSIF event_time_pair.event = 'library cache pin' THEN
        library_cache_pin_time := event_time_pair.time_waited;
      ELSIF event_time_pair.event = 'local write wait' THEN
        local_write_wait_time := event_time_pair.time_waited;
      ELSIF event_time_pair.event = 'log buffer space' THEN
        log_buffer_space_time := event_time_pair.time_waited;
      ELSIF event_time_pair.event = 'log file switch (archiving needed)' THEN
        log_file_switch_arch_time := event_time_pair.time_waited;
      ELSIF event_time_pair.event = 'log file switch (checkpoint incomplete)' THEN
        log_file_switch_ckpt_time := event_time_pair.time_waited;
      ELSIF event_time_pair.event = 'log file switch completion' THEN
        log_file_switch_complete_time := event_time_pair.time_waited;
      ELSIF event_time_pair.event = 'log file sync' THEN
        log_file_sync_time := event_time_pair.time_waited;
      ELSIF event_time_pair.event = 'log switch/archive' THEN
        log_file_switch_arch_time := event_time_pair.time_waited;
      ELSIF event_time_pair.event = 'pipe put' THEN
        pipe_put_time := event_time_pair.time_waited;
      ELSIF event_time_pair.event = 'row cache lock' THEN
        row_cache_lock_time := event_time_pair.time_waited;
      ELSIF event_time_pair.event = 'write complete waits' THEN
        write_complete_waits_time := event_time_pair.time_waited;
      END IF;

      ----
      -- add to the accumulated wait time
      ----
      user_wait_time := user_wait_time + event_time_pair.time_waited;

      -- compute the user io wait time
      FOR i IN userio.FIRST .. userio.LAST
      LOOP
        IF userio(i) = event_time_pair.event THEN
          userio_time := userio_time + event_time_pair.time_waited;
        END IF;
      END LOOP;
    END LOOP;

    -- open the cursor to return
    OPEN data_cursor FOR
      SELECT local_write_wait_time,
             net_reset_to_client_time,
             net_reset_to_dblink_time,
             enqueue_dml_time,
             enqueue_row_lock_time,
             enqueue_userdef_time,
             log_file_sync_time,
             buffer_busy_waits_time,
             latch_cache_buffer_chains_time,
             latch_library_cache_time,
             library_cache_load_lock_time,
             library_cache_lock_time,
             library_cache_pin_time,
             pipe_put_time,
             row_cache_lock_time,
             enqueue_hw_time,
             enqueue_st_time,
             enqueue_alloc_itl_time,
             free_buffer_waits_time,
             latch_redo_copy_time,
             latch_shared_pool_time,
             log_buffer_space_time,
             log_file_switch_arch_time,
             log_file_switch_ckpt_time,
             log_file_switch_complete_time,
             log_switch_arch_time,
             write_complete_waits_time,
             net_msg_to_client_time,
             net_msg_to_dblink_time,
             net_more_from_client_time,
             net_more_from_dblink_time,
             net_more_to_client_time,
             net_more_to_dblink_time,
             db_file_scattered_read_time,
             db_file_sequential_read_time,
             db_file_single_write_time,
             direct_path_read_time,
             direct_path_read_lob_time,
             direct_path_write_time,
             direct_path_write_lob_time,
             latch_free_time,
             enqueue_time,
             user_wait_time,
             user_cpu_time,
             userio_time,
             cpu_cnt

        FROM dual;

  ELSE

    -- open the cursor to return
    OPEN data_cursor FOR
      SELECT local_write_wait_time,
             net_reset_to_client_time,
             net_reset_to_dblink_time,
             enqueue_dml_time,
             enqueue_row_lock_time,
             enqueue_userdef_time,
             log_file_sync_time,
             buffer_busy_waits_time,
             latch_cache_buffer_chains_time,
             latch_library_cache_time,
             library_cache_load_lock_time,
             library_cache_lock_time,
             library_cache_pin_time,
             pipe_put_time,
             row_cache_lock_time,
             enqueue_hw_time,
             enqueue_st_time,
             enqueue_alloc_itl_time,
             free_buffer_waits_time,
             latch_redo_copy_time,
             latch_shared_pool_time,
             log_buffer_space_time,
             log_file_switch_arch_time,
             log_file_switch_ckpt_time,
             log_file_switch_complete_time,
             log_switch_arch_time,
             write_complete_waits_time,
             net_msg_to_client_time,
             net_msg_to_dblink_time,
             net_more_from_client_time,
             net_more_from_dblink_time,
             net_more_to_client_time,
             net_more_to_dblink_time,
             db_file_scattered_read_time,
             db_file_sequential_read_time,
             db_file_single_write_time,
             direct_path_read_time,
             direct_path_read_lob_time,
             direct_path_write_time,
             direct_path_write_lob_time,
             latch_free_time,
             enqueue_time,
             user_wait_time,
             user_cpu_time,
             userio_time,
             cpu_cnt

        FROM dual
       WHERE 0 = 1;

  END IF;

  :3 := data_cursor;

END;
]]>
      </Property>
      <Property NAME="SQLINPARAM1" SCOPE="INSTANCE">CPUCount</Property>
      <Property NAME="SQLINPARAM2" SCOPE="INSTANCE">TimedStatistics</Property>
      <Property NAME="SQLOUTPARAMPOS" SCOPE="GLOBAL">3</Property>
      <Property NAME="SQLOUTPARAMTYPE" SCOPE="GLOBAL">SQL_CURSOR</Property>
      <Property NAME="MachineName" SCOPE="INSTANCE">MachineName</Property>
      <Property NAME="Port" SCOPE="INSTANCE">Port</Property>
      <Property NAME="SID" SCOPE="INSTANCE" OPTIONAL="TRUE">SID</Property>
      <Property NAME="UserName" SCOPE="INSTANCE">UserName</Property>
      <Property NAME="password" SCOPE="INSTANCE">password</Property>
      <Property NAME="Role" SCOPE="INSTANCE" OPTIONAL="TRUE">Role</Property>
    </QueryDescriptor>
  </Metric>

     <!--
  ======================================================================
  == Category:         Dump Area
  == Collection Level: Minimum
  == Purpose:          Alerts, Trending
  ======================================================================
    -->
	<Metric NAME="dumpFull" TYPE="TABLE">
		<Display>
			<Label NLSID="dump">Dump Area</Label>
		</Display>
		<TableDescriptor>
			<ColumnDescriptor NAME="dumpType" TYPE="STRING" IS_KEY="TRUE">
				<Display>
					<Label NLSID="dump_dumpType">Type of Dump Area</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="dumpDir" TYPE="STRING" IS_KEY="FALSE">
				<Display>
					<Label NLSID="dump_dumpDir">Dump Area Directory</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="dumpTotal" TYPE="NUMBER" IS_KEY="FALSE">
				<Display>
					<Label NLSID="dump_dumpTotal">Total Dump Area (KB)</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="dumpUsed" TYPE="NUMBER" IS_KEY="FALSE">
				<Display>
					<Label NLSID="dump_dumpUsed">Dump Area Used (KB)</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="dumpUsedPercent" TYPE="NUMBER" IS_KEY="FALSE">
				<Display>
					<Label NLSID="dump_dumpUsedPercent">Dump Area Used (%)</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="dumpAvail" TYPE="NUMBER" IS_KEY="FALSE" COMPUTE_EXPR="dumpTotal - dumpUsed">
				<Display>
					<Label NLSID="dump_dumpAvail">Free Dump Area (KB)</Label>
				</Display>
			</ColumnDescriptor>
		</TableDescriptor>
		<QueryDescriptor FETCHLET_ID="OSLineToken">
			<Property NAME="perlBin" SCOPE="SYSTEMGLOBAL">perlBin</Property>
			<Property NAME="scriptsDir" SCOPE="SYSTEMGLOBAL">scriptsDir</Property>
			<Property NAME="background_dump_dest" SCOPE="INSTANCE">background_dump_dest</Property>
			<Property NAME="core_dump_dest" SCOPE="INSTANCE">core_dump_dest</Property>
			<Property NAME="user_dump_dest" SCOPE="INSTANCE">user_dump_dest</Property>
			<Property NAME="command" SCOPE="GLOBAL">
             %perlBin%/perl %scriptsDir%/db/dbdumpfull.pl %background_dump_dest% %core_dump_dest% %user_dump_dest%
      </Property>
			<Property NAME="startsWith" SCOPE="GLOBAL">em_result=</Property>
			<Property NAME="delimiter" SCOPE="GLOBAL">|</Property>
			<Property NAME="ENVEM_TARGET_NAME" SCOPE="INSTANCE">NAME</Property>
			<Property NAME="ENVEM_TARGET_ROLE" SCOPE="INSTANCE" OPTIONAL="TRUE">Role</Property>
			<Property NAME="MachineName" SCOPE="INSTANCE">MachineName</Property>
			<Property NAME="Port" SCOPE="INSTANCE">Port</Property>
			<Property NAME="SID" SCOPE="INSTANCE">SID</Property>
			<Property NAME="ENVEM_TARGET_ADDRESS" SCOPE="GLOBAL">(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=%MachineName%)(Port=%Port%))(CONNECT_DATA=(SID=%SID%)))
      </Property>
			<Property NAME="ENVEM_TARGET_ORACLE_HOME" SCOPE="INSTANCE">OracleHome</Property>
		</QueryDescriptor>
	</Metric>
     <!--
  ======================================================================
  == Category:         Archive Area
  == Collection Level: Minimum
  == Purpose:          Alerts, Trending
  ======================================================================
    -->
	<Metric NAME="archFull" TYPE="TABLE">
		<Display>
			<Label NLSID="arch">Archive Area</Label>
		</Display>
		<TableDescriptor>
			<ColumnDescriptor NAME="archDir" TYPE="STRING" IS_KEY="TRUE">
				<Display>
					<Label NLSID="arch_archDir">Archive Area Destination</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="archTotal" TYPE="NUMBER" IS_KEY="FALSE">
				<Display>
					<Label NLSID="arch_archTotal">Total Archive Area (KB)</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="archUsed" TYPE="NUMBER" IS_KEY="FALSE">
				<Display>
					<Label NLSID="arch_archUsed">Archive Area Used (KB)</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="archUsedPercent" TYPE="NUMBER" IS_KEY="FALSE">
				<Display>
					<Label NLSID="arch_archUsedPercent">Archive Area Used (%)</Label>
					<ShortName NLSID="arch_archUsedPercent_short">Archive Area %</ShortName>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="archAvail" TYPE="NUMBER" IS_KEY="FALSE" COMPUTE_EXPR="archTotal - archUsed">
				<Display>
					<Label NLSID="arch_archAvail">Free Archive Area (KB)</Label>
				</Display>
			</ColumnDescriptor>
		</TableDescriptor>
		<QueryDescriptor FETCHLET_ID="OSLineToken">
			<Property NAME="perlBin" SCOPE="SYSTEMGLOBAL">perlBin</Property>
			<Property NAME="scriptsDir" SCOPE="SYSTEMGLOBAL">scriptsDir</Property>
			<Property NAME="command" SCOPE="GLOBAL">
             %perlBin%/perl %scriptsDir%/db/dbarchfull.pl
      </Property>
			<Property NAME="startsWith" SCOPE="GLOBAL">em_result=</Property>
			<Property NAME="delimiter" SCOPE="GLOBAL">|</Property>
			<Property NAME="ENVEM_TARGET_NAME" SCOPE="INSTANCE">NAME</Property>
			<Property NAME="STDINEM_TARGET_USERNAME" SCOPE="INSTANCE">UserName</Property>
			<Property NAME="STDINEM_TARGET_PASSWORD" SCOPE="INSTANCE">password</Property>
			<Property NAME="ENVEM_TARGET_ROLE" SCOPE="INSTANCE" OPTIONAL="TRUE">Role</Property>
			<Property NAME="MachineName" SCOPE="INSTANCE">MachineName</Property>
			<Property NAME="Port" SCOPE="INSTANCE">Port</Property>
			<Property NAME="SID" SCOPE="INSTANCE">SID</Property>
			<Property NAME="ENVEM_TARGET_ADDRESS" SCOPE="GLOBAL">(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=%MachineName%)(Port=%Port%))(CONNECT_DATA=(SID=%SID%)))
      </Property>
			<Property NAME="ENVEM_TARGET_ORACLE_HOME" SCOPE="INSTANCE">OracleHome</Property>
		</QueryDescriptor>
	</Metric>

    <!--
  ======================================================================
  == Category:         Response
  == Collection Level: Minimum
  == Purpose:          Alerts, Trending
  ======================================================================
    -->
	<Metric NAME="Response" TYPE="TABLE">
		<Display>
			<Label NLSID="resp">Response</Label>
		</Display>
		<TableDescriptor>
			<ColumnDescriptor NAME="userLogon" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="resp_userLogon">User Logon Time (msec)</Label>
					<ShortName NLSID="resp_userLogon_short">Logon Time(ms)</ShortName>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="Status" TYPE="NUMBER" IS_KEY="FALSE">
				<Display>
					<Label NLSID="resp_status">Status</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="State" TYPE="STRING" IS_KEY="FALSE">
				<Display>
					<Label NLSID="resp_state">State</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="oraerr" TYPE="STRING" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
				<Display>
					<Label NLSID="resp_oraerr">ORA- Error</Label>
				</Display>
			</ColumnDescriptor>
		</TableDescriptor>
		<QueryDescriptor FETCHLET_ID="OSLineToken">
			<Property NAME="perlBin" SCOPE="SYSTEMGLOBAL">perlBin</Property>
			<Property NAME="scriptsDir" SCOPE="SYSTEMGLOBAL">scriptsDir</Property>
			<Property NAME="command" SCOPE="GLOBAL">
         %perlBin%/perl %scriptsDir%/db/dbresp.pl
      </Property>
			<Property NAME="startsWith" SCOPE="GLOBAL">em_result=</Property>
			<Property NAME="delimiter" SCOPE="GLOBAL">|</Property>
			<Property NAME="ENVEM_TARGET_NAME" SCOPE="INSTANCE">NAME</Property>
			<Property NAME="STDINEM_TARGET_USERNAME" SCOPE="INSTANCE">UserName</Property>
			<Property NAME="STDINEM_TARGET_PASSWORD" SCOPE="INSTANCE">password</Property>
			<Property NAME="ENVEM_TARGET_ROLE" SCOPE="INSTANCE" OPTIONAL="TRUE">Role</Property>
			<Property NAME="MachineName" SCOPE="INSTANCE">MachineName</Property>
			<Property NAME="Port" SCOPE="INSTANCE">Port</Property>
			<Property NAME="SID" SCOPE="INSTANCE">SID</Property>
			<Property NAME="ENVEM_TARGET_ORACLE_HOME" SCOPE="INSTANCE">OracleHome</Property>
			<Property NAME="ENVEM_TARGET_ADDRESS" SCOPE="GLOBAL">(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=%MachineName%)(Port=%Port%))(CONNECT_DATA=(SID=%SID%)))
      </Property>
		</QueryDescriptor>
	</Metric>
        <!--
  ======================================================================
  == Category:         Database Limits
  == Collection Level: Minimum
  == Purpose:          Alerts, Trending
  ======================================================================
    -->
	<Metric NAME="Database_Resource_Usage" TYPE="TABLE">
		<ValidIf>
			<CategoryProp NAME="VersionCategory" CHOICES="pre8;8i;8iR2;9i;9iR2"/>
		</ValidIf>
		<Display>
			<Label NLSID="resource_usage">Database Limits</Label>
		</Display>
		<TableDescriptor>
			<ColumnDescriptor NAME="lock_usage" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="lock_usage_name">Lock Limit Usage (%)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="process_usage" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="process_usage">Process Limit Usage (%)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="session_usage" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="session_usage">Session Limit Usage (%)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="user_limit" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="user_limit">User Limit Usage (%)</Label>

				</Display>
			</ColumnDescriptor>
		</TableDescriptor>
		<QueryDescriptor FETCHLET_ID="SQL">
			<Property NAME="transpose" SCOPE="GLOBAL">TRUE</Property>
			<Property NAME="STATEMENT" SCOPE="GLOBAL"><![CDATA[
     SELECT usage
     FROM (select RESOURCE_NAME name, 100*DECODE(initial_allocation,' UNLIMITED',0, current_utilization /
             initial_allocation) usage
           from v$resource_limit
           where LTRIM(limit_value) != '0' and LTRIM(initial_allocation) != '0'
             and resource_name in ('dml_locks', 'processes', 'sessions')
           union all
             select  'user'  name
                ,100* DECODE(sessions_max,0,0,sessions_current/sessions_max)  usage
             from v$license
           )
     order by name
]]></Property>
			<Property NAME="MachineName" SCOPE="INSTANCE">MachineName</Property>
			<Property NAME="Port" SCOPE="INSTANCE">Port</Property>
			<Property NAME="SID" SCOPE="INSTANCE">SID</Property>
			<Property NAME="UserName" SCOPE="INSTANCE">UserName</Property>
			<Property NAME="password" SCOPE="INSTANCE">password</Property>
			<Property NAME="Role" SCOPE="INSTANCE" OPTIONAL="TRUE">Role</Property>
		</QueryDescriptor>
	</Metric>
        <!--
  ======================================================================
  == Category:         Alert Log
  == Collection Level: Minimum
  == Purpose:          Alerts
  ======================================================================
    -->
 	<Metric NAME="alertLog" TYPE="TABLE">
		<ValidIf>
			<CategoryProp NAME="VersionCategory" CHOICES="pre8;8i;8iR2;9i;9iR2;10gR1;10gR2;10gR203"/>
		</ValidIf>
		<Display>
			<Label NLSID="alertLog">Alert Log</Label>
		</Display>
		<TableDescriptor>
                        <ColumnDescriptor NAME="alertTime" TYPE="STRING" IS_TIMESTAMP="TRUE" TRANSIENT="TRUE" HELP="NO_HELP">
                                <Display>
                                        <Label NLSID="alert_time">Alert Time</Label>
                                </Display>
                        </ColumnDescriptor>
			<ColumnDescriptor NAME="timeLine" TYPE="STRING" IS_KEY="TRUE">
				<Display>
					<Label NLSID="alertLog_timeLine">Time/Line Number</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="genericErrStack" TYPE="STRING" STATELESS_ALERTS="TRUE">
				<Display>
					<Label NLSID="alertLog_genericErrStack">Generic Alert Log Error</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="archiveHungErrStack" TYPE="STRING" STATELESS_ALERTS="TRUE">
				<Display>
					<Label NLSID="alertLog_archiveHungErrStack">Archiver Hung Alert Log Error</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="blockCorruptErrStack" TYPE="STRING" STATELESS_ALERTS="TRUE">
				<Display>
					<Label NLSID="alertLog_blockCorruptErrStack">Data Block Corruption Alert Log Error</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="sessTerminateErrStack" TYPE="STRING" STATELESS_ALERTS="TRUE">
				<Display>
					<Label NLSID="alertLog_sessTerminateErrStack">Session Terminated Alert Log Error</Label>
				</Display>
			</ColumnDescriptor>
      <ColumnDescriptor NAME="mediaFailureErrStack" TYPE="STRING" STATELESS_ALERTS="TRUE">
        <Display>
          <Label NLSID="alertLog_mediaFailureErrStack">Media Failure Alert Log Error</Label>
        </Display>
      </ColumnDescriptor>
			<ColumnDescriptor NAME="traceFileName" TYPE="STRING" IS_KEY="FALSE">
				<Display>
					<Label NLSID="alertLog_traceFileName">Alert Log Error Trace File</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="errCodes" TYPE="STRING" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
				<Display>
					<Label NLSID="alertLog_errCodes">Witnessed Error Codes</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="alertLogName" TYPE="STRING" IS_KEY="FALSE">
				<Display>
					<Label NLSID="alertLog_fileName">Alert Log Name</Label>
				</Display>
			</ColumnDescriptor>
		</TableDescriptor>
		<QueryDescriptor FETCHLET_ID="OSLineToken">
			<Property NAME="perlBin" SCOPE="SYSTEMGLOBAL">perlBin</Property>
			<Property NAME="scriptsDir" SCOPE="SYSTEMGLOBAL">scriptsDir</Property>
			<Property NAME="startsWith" SCOPE="GLOBAL">em_result=</Property>
			<Property NAME="delimiter" SCOPE="GLOBAL">|</Property>
                        <Property NAME="log_file_absolute" SCOPE="INSTANCE">alert_log_file</Property>
                        <Property NAME="log_timestamp_format" SCOPE="GLOBAL"><![CDATA[(\w+) (\w+)( |  )31 023:059:059 02037]]></Property>
			<Property NAME="background_dump_dest" SCOPE="INSTANCE">background_dump_dest</Property>
			<Property NAME="user_dump_dest" SCOPE="INSTANCE">user_dump_dest</Property>
			<Property NAME="limitSwitch" SCOPE="USER">limitSwitch</Property>
			<Property NAME="ignorePattern" SCOPE="USER" OPTIONAL="TRUE">ignorePattern</Property>
			<Property NAME="command" SCOPE="GLOBAL">
%perlBin%/perl %scriptsDir%/alertlog.pl %log_file_absolute% '%log_timestamp_format%' 'ORA' %background_dump_dest% %user_dump_dest% %limitSwitch% %ignorePattern%
                        </Property>
                        <Property NAME="ConvertFromCharset" SCOPE="INSTANCE" OPTIONAL="TRUE">ConvertFromCharset</Property>
                        <Property NAME="needCharsetConvert" SCOPE="INSTANCE" OPTIONAL="TRUE">needCharsetConvert</Property>

			<Property NAME="ENVEM_TARGET_GUID" SCOPE="INSTANCE">GUID</Property>
			<Property NAME="ENVEM_TARGET_ORACLE_HOME" SCOPE="INSTANCE">OracleHome</Property>
			<Property NAME="ENVEM_TARGET_ORACLE_SID" SCOPE="INSTANCE">SID</Property>
                        <Property NAME="ENVEM_AGENT_STATE_DIR" SCOPE="SYSTEMGLOBAL">agentStateDir</Property>
                        <Property NAME="ENVEM_ALERTLOG_ERROR_TYPES" SCOPE="GLOBAL">4</Property>
                        <Property NAME="ENVEM_ALERTLOG_ERROR_TYPE1" SCOPE="GLOBAL">00257,16038</Property>
                        <Property NAME="ENVEM_ALERTLOG_ERROR_TYPE2" SCOPE="GLOBAL">01157,01578,27048</Property>
                        <Property NAME="ENVEM_ALERTLOG_ERROR_TYPE3" SCOPE="GLOBAL">00603</Property>
                        <Property NAME="ENVEM_ALERTLOG_ERROR_TYPE4" SCOPE="GLOBAL">01242,01243</Property>		                   
 		</QueryDescriptor>
	</Metric>
    <!--
  ======================================================================
  == Category:         Alert Log Status
  == Collection Level: Minimum
  == Purpose:          Alerts
  ======================================================================
    -->
	<Metric NAME="alertLogStatus" TYPE="TABLE">
		<ValidIf>
			<CategoryProp NAME="VersionCategory" CHOICES="pre8;8i;8iR2;9i;9iR2;10gR1;10gR2;10gR203"/>
		</ValidIf>
		<Display>
			<Label NLSID="alertLogStatus">Alert Log Error Status</Label>
		</Display>
		<TableDescriptor>
			<ColumnDescriptor NAME="genericErrors" TYPE="NUMBER">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="alertLogStatus_genericErrors">Generic Alert Log Error Status</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="archiveHungErrors" TYPE="NUMBER">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="alertLogStatus_archiveHungErrors">Archiver Hung Alert Log Error Status</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="blockCorruptErrors" TYPE="NUMBER">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="alertLogStatus_blockCorruptErrors">Data Block Corruption Alert Log Error Status</Label>
					<ShortName NLSID="alertLogStatus_blockCorruptErrors_sht">Data Block Corruption Error Status</ShortName>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="sessTerminateErrors" TYPE="NUMBER">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="alertLogStatus_sessTerminateErrors">Session Terminated Alert Log Error Status</Label>
					<ShortName NLSID="alertLogStatus_sessTerminateErrors_sht">Session Terminated Error Status</ShortName>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="mediaFailureErrors" TYPE="NUMBER">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="alertLogStatus_mediaFailureErrors">Media Failure Alert Log Error Status</Label>
					<ShortName NLSID="alertLogStatus_mediaFailureErrors_sht">Media Failure Error Status</ShortName>
				</Display>
			</ColumnDescriptor>
		</TableDescriptor>
		<ExecutionDescriptor>
			<GetTable NAME="alert_log_errors" METRIC_NAME="alertLog" USE_CACHE="TRUE"/>
			<GetView NAME="generic_alert_log_errors" FROM_TABLE="alert_log_errors">
				<Column NAME="genericErrStack"/>
				<Filter COLUMN_NAME="genericErrStack" OPERATOR="ISNOTNULL"/>
			</GetView>
			<GroupBy NAME="generic_alert_log_rollup" FROM_TABLE="generic_alert_log_errors">
				<AggregateColumn NAME="genericErrors" COLUMN_NAME="genericErrStack" OPERATOR="COUNT"/>
			</GroupBy>
			<GetView NAME="archive_hung_alert_log_errors" FROM_TABLE="alert_log_errors">
				<Column NAME="archiveHungErrStack"/>
				<Filter COLUMN_NAME="archiveHungErrStack" OPERATOR="ISNOTNULL"/>
			</GetView>
			<GroupBy NAME="archive_hung_alert_log_rollup" FROM_TABLE="archive_hung_alert_log_errors">
				<AggregateColumn NAME="archiveHungErrors" COLUMN_NAME="archiveHungErrStack" OPERATOR="COUNT"/>
			</GroupBy>
			<GetView NAME="block_corrupt_alert_log_errors" FROM_TABLE="alert_log_errors">
				<Column NAME="blockCorruptErrStack"/>
				<Filter COLUMN_NAME="blockCorruptErrStack" OPERATOR="ISNOTNULL"/>
			</GetView>
			<GroupBy NAME="block_corrupt_alert_log_rollup" FROM_TABLE="block_corrupt_alert_log_errors">
				<AggregateColumn NAME="blockCorruptErrors" COLUMN_NAME="blockCorruptErrStack" OPERATOR="COUNT"/>
			</GroupBy>
			<GetView NAME="sess_terminate_alert_log_errors" FROM_TABLE="alert_log_errors">
				<Column NAME="sessTerminateErrStack"/>
				<Filter COLUMN_NAME="sessTerminateErrStack" OPERATOR="ISNOTNULL"/>
			</GetView>
			<GroupBy NAME="sess_terminate_alert_log_rollup" FROM_TABLE="sess_terminate_alert_log_errors">
				<AggregateColumn NAME="sessTerminateErrors" COLUMN_NAME="sessTerminateErrStack" OPERATOR="COUNT"/>
			</GroupBy>
			<GetView NAME="media_failure_alert_log_errors" FROM_TABLE="alert_log_errors">
				<Column NAME="mediaFailureErrStack"/>
				<Filter COLUMN_NAME="mediaFailureErrStack" OPERATOR="ISNOTNULL"/>
			</GetView>
			<GroupBy NAME="media_failure_alert_log_rollup" FROM_TABLE="media_failure_alert_log_errors">
				<AggregateColumn NAME="mediaFailureErrors" COLUMN_NAME="mediaFailureErrStack" OPERATOR="COUNT"/>
			</GroupBy>
			<JoinTables NAME="alertLogStatus">
				<Table NAME="generic_alert_log_rollup"/>
				<Table NAME="archive_hung_alert_log_rollup"/>
				<Table NAME="block_corrupt_alert_log_rollup"/>
				<Table NAME="sess_terminate_alert_log_rollup"/>
				<Table NAME="media_failure_alert_log_rollup"/>
			</JoinTables>
		</ExecutionDescriptor>
	</Metric>

    <!--
  ======================================================================
  == Category:         ADR Alert Log Error
  == Collection Level: Minimum
  == Purpose:          Alerts
  ======================================================================
    -->
  <Metric NAME="adrAlertLogError" TYPE="TABLE" USAGE_TYPE="HIDDEN_COLLECT" HELP="NO_HELP">
    <ValidIf>
      <CategoryProp NAME="VersionCategory" CHOICES="11gR1;11gR2"/>
    </ValidIf>
		<TableDescriptor>
			<ColumnDescriptor NAME="timeLine" TYPE="STRING" IS_KEY="TRUE"/>
			<ColumnDescriptor NAME="errorCategory" TYPE="STRING" IS_KEY="FALSE"/>

			<!-- incident errors -->
			<ColumnDescriptor NAME="genericInternalErrStack" TYPE="STRING" IS_KEY="FALSE"/>
			<ColumnDescriptor NAME="sessTerminateErrStack" TYPE="STRING" IS_KEY="FALSE"/>
			<ColumnDescriptor NAME="internalSqlErrStack" TYPE="STRING" IS_KEY="FALSE"/>
			<ColumnDescriptor NAME="accessViolationErrStack" TYPE="STRING" IS_KEY="FALSE"/>
			<ColumnDescriptor NAME="redoLogCorruptErrStack" TYPE="STRING" IS_KEY="FALSE"/>
			<ColumnDescriptor NAME="fileAccessErrStack" TYPE="STRING" IS_KEY="FALSE"/>
			<ColumnDescriptor NAME="inconsistentDbStateErrStack" TYPE="STRING" IS_KEY="FALSE"/>
			<ColumnDescriptor NAME="oraBlockCorruptErrStack" TYPE="STRING" IS_KEY="FALSE"/>
			<ColumnDescriptor NAME="deadlockErrStack" TYPE="STRING" IS_KEY="FALSE"/>
			<ColumnDescriptor NAME="outOfMemoryErrStack" TYPE="STRING" IS_KEY="FALSE"/>
			<ColumnDescriptor NAME="clusterErrStack" TYPE="STRING" IS_KEY="FALSE"/>
			<!-- catch-all errors should be the last of the group -->
			<ColumnDescriptor NAME="genericIncidentErrStack" TYPE="STRING" IS_KEY="FALSE"/>

			<!-- data Failures -->
			<ColumnDescriptor NAME="dataFailureErrStack" TYPE="STRING" IS_KEY="FALSE"/>

			<!-- operational errors -->
			<ColumnDescriptor NAME="archiveHungErrStack" TYPE="STRING" IS_KEY="FALSE"/>
			<ColumnDescriptor NAME="blockCorruptErrStack" TYPE="STRING" IS_KEY="FALSE"/>
			<ColumnDescriptor NAME="mediaFailureErrStack" TYPE="STRING" IS_KEY="FALSE"/>
			<!-- catch-all errors should be the last of the group -->
			<ColumnDescriptor NAME="genericOperationalErrStack" TYPE="STRING" IS_KEY="FALSE"/>

			<ColumnDescriptor NAME="traceFileName" TYPE="STRING" IS_KEY="FALSE"/>
			<ColumnDescriptor NAME="errCodes" TYPE="STRING" IS_KEY="FALSE"/>
			<ColumnDescriptor NAME="alertLogName" TYPE="STRING" IS_KEY="FALSE"/>
			<ColumnDescriptor NAME="impact" TYPE="STRING" IS_KEY="FALSE"/>
			<ColumnDescriptor NAME="incidentId" TYPE="STRING" IS_KEY="FALSE"/>
			<ColumnDescriptor NAME="numberOfFailures" TYPE="STRING" IS_KEY="FALSE"/>
		</TableDescriptor>
		<QueryDescriptor FETCHLET_ID="OSLineToken">
			<Property NAME="perlBin" SCOPE="SYSTEMGLOBAL">perlBin</Property>
			<Property NAME="scriptsDir" SCOPE="SYSTEMGLOBAL">scriptsDir</Property>
			<Property NAME="startsWith" SCOPE="GLOBAL">em_result=</Property>
			<Property NAME="delimiter" SCOPE="GLOBAL">|</Property>
			<Property NAME="AdrHome" SCOPE="INSTANCE">AdrHome</Property>
			<Property NAME="limitSwitch" SCOPE="USER">limitSwitch</Property>
			<Property NAME="command" SCOPE="GLOBAL">
				%perlBin%/perl %scriptsDir%/alertlogAdr.pl %AdrHome% %limitSwitch%
			</Property>
			<Property NAME="ConvertFromCharset" SCOPE="INSTANCE">ConvertFromCharset</Property>
			<Property NAME="needCharsetConvert" SCOPE="INSTANCE">needCharsetConvert</Property>

			<Property NAME="ENVEM_TARGET_GUID" SCOPE="INSTANCE">GUID</Property>
			<Property NAME="ENVEM_AGENT_STATE_DIR" SCOPE="SYSTEMGLOBAL">agentStateDir</Property>
			<Property NAME="ENVEM_ALERTLOG_ERROR_TYPES" SCOPE="GLOBAL">17</Property>
			<!-- error category, match patterns, ... -->
			<Property NAME="ENVEM_ALERTLOG_ERROR_TYPE1" SCOPE="GLOBAL"><![CDATA[incident,type=["']INCIDENT_ERROR["'],group=["']Generic Internal Error["']]]></Property>
			<Property NAME="ENVEM_ALERTLOG_ERROR_TYPE2" SCOPE="GLOBAL"><![CDATA[incident,type=["']INCIDENT_ERROR["'],group=["']Session Terminated["']]]></Property>
			<Property NAME="ENVEM_ALERTLOG_ERROR_TYPE3" SCOPE="GLOBAL"><![CDATA[incident,type=["']INCIDENT_ERROR["'],group=["']Internal SQL Error["']]]></Property>
			<Property NAME="ENVEM_ALERTLOG_ERROR_TYPE4" SCOPE="GLOBAL"><![CDATA[incident,type=["']INCIDENT_ERROR["'],group=["']Access Violation["']]]></Property>
			<Property NAME="ENVEM_ALERTLOG_ERROR_TYPE5" SCOPE="GLOBAL"><![CDATA[incident,type=["']INCIDENT_ERROR["'],group=["']Redo Log Corruption["']]]></Property>
			<Property NAME="ENVEM_ALERTLOG_ERROR_TYPE6" SCOPE="GLOBAL"><![CDATA[incident,type=["']INCIDENT_ERROR["'],group=["']File Access Error["']]]></Property>
			<Property NAME="ENVEM_ALERTLOG_ERROR_TYPE7" SCOPE="GLOBAL"><![CDATA[incident,type=["']INCIDENT_ERROR["'],group=["']Inconsistent DB State["']]]></Property>
			<Property NAME="ENVEM_ALERTLOG_ERROR_TYPE8" SCOPE="GLOBAL"><![CDATA[incident,type=["']INCIDENT_ERROR["'],group=["']Data Block Corruption["']]]></Property>
			<Property NAME="ENVEM_ALERTLOG_ERROR_TYPE9" SCOPE="GLOBAL"><![CDATA[incident,type=["']INCIDENT_ERROR["'],group=["']Deadlock["']]]></Property>
			<Property NAME="ENVEM_ALERTLOG_ERROR_TYPE10" SCOPE="GLOBAL"><![CDATA[incident,type=["']INCIDENT_ERROR["'],group=["']Out of Memory["']]]></Property>
			<Property NAME="ENVEM_ALERTLOG_ERROR_TYPE11" SCOPE="GLOBAL"><![CDATA[incident,type=["']INCIDENT_ERROR["'],group=["']Cluster Error["']]]></Property>
			<Property NAME="ENVEM_ALERTLOG_ERROR_TYPE12" SCOPE="GLOBAL"><![CDATA[incident,level=["'][12]["'],type=["']INCIDENT_ERROR["']]]></Property>
			<Property NAME="ENVEM_ALERTLOG_ERROR_TYPE13" SCOPE="GLOBAL"><![CDATA[dataFailure,type=["']ERROR["'],group=["']DRA["']]]></Property>
			<Property NAME="ENVEM_ALERTLOG_ERROR_TYPE14" SCOPE="GLOBAL"><![CDATA[operational,type=["']ERROR["'],group=["']Archiver Hung["']]]></Property>
			<Property NAME="ENVEM_ALERTLOG_ERROR_TYPE15" SCOPE="GLOBAL"><![CDATA[operational,type=["']ERROR["'],group=["']Data Block Corruption["']]]></Property>
			<Property NAME="ENVEM_ALERTLOG_ERROR_TYPE16" SCOPE="GLOBAL"><![CDATA[operational,type=["']ERROR["'],group=["']Media Failure["']]]></Property>
			<Property NAME="ENVEM_ALERTLOG_ERROR_TYPE17" SCOPE="GLOBAL"><![CDATA[operational,level=["'][12]["'],type=["']ERROR["']]]></Property>
 		</QueryDescriptor>
	</Metric>

    <!--
  ======================================================================
  == Category:         ADR Alert Log Incident Error
  == Collection Level: Minimum
  == Purpose:          Alerts
  ======================================================================
    -->
	<Metric NAME="adrAlertLogIncidentError" TYPE="TABLE">
    <ValidIf>
      <CategoryProp NAME="VersionCategory" CHOICES="11gR1;11gR2"/>
    </ValidIf>
		<Display>
			<Label NLSID="adrAlertLogIncidentError">Incident</Label>
		</Display>
		<TableDescriptor>
			<ColumnDescriptor NAME="timeLine" TYPE="STRING" IS_KEY="TRUE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="adrAlertLog_timeLine">Time/Line Number</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="genericIncidentErrStack" TYPE="STRING" STATELESS_ALERTS="TRUE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="adrAlertLog_genericIncidentErrStack">Generic Incident</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="genericInternalErrStack" TYPE="STRING" STATELESS_ALERTS="TRUE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="adrAlertLog_genericInternalErrStack">Generic Internal Error</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="sessTerminateErrStack" TYPE="STRING" STATELESS_ALERTS="TRUE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="adrAlertLog_sessTerminateErrStack">Session Terminated</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="internalSqlErrStack" TYPE="STRING" STATELESS_ALERTS="TRUE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="adrAlertLog_internalSqlErrStack">Internal SQL Error</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="accessViolationErrStack" TYPE="STRING" STATELESS_ALERTS="TRUE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="adrAlertLog_accessViolationErrStack">Access Violation</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="redoLogCorruptErrStack" TYPE="STRING" STATELESS_ALERTS="TRUE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="adrAlertLog_redoLogCorruptErrStack">Redo Log Corruption</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="fileAccessErrStack" TYPE="STRING" STATELESS_ALERTS="TRUE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="adrAlertLog_fileAccessErrStack">File Access Error</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="inconsistentDbStateErrStack" TYPE="STRING" STATELESS_ALERTS="TRUE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="adrAlertLog_inconsistentDbStateErrStack">Inconsistent DB State</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="oraBlockCorruptErrStack" TYPE="STRING" STATELESS_ALERTS="TRUE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="adrAlertLog_oraBlockCorruptErrStack">Oracle Data Block Corruption</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="deadlockErrStack" TYPE="STRING" STATELESS_ALERTS="TRUE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="adrAlertLog_deadlockErrStack">Deadlock</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="outOfMemoryErrStack" TYPE="STRING" STATELESS_ALERTS="TRUE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="adrAlertLog_outOfMemoryErrStack">Out of Memory</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="clusterErrStack" TYPE="STRING" STATELESS_ALERTS="TRUE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="adrAlertLog_clusterErrStack">Cluster Error</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="traceFileName" TYPE="STRING" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="adrAlertLog_traceFileName">Alert Log Error Trace File</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="errCodes" TYPE="STRING" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="adrAlertLog_errCodes">Witnessed Error Codes</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="alertLogName" TYPE="STRING" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="adrAlertLog_fileName">Alert Log Name</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="impact" TYPE="STRING" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="adrAlertLog_impact">Impact</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="incidentId" TYPE="STRING" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="adrAlertLog_incidentId">Incident ID</Label>
				</Display>
			</ColumnDescriptor>
		</TableDescriptor>
		<ExecutionDescriptor>
			<GetTable NAME="alert_log_errors" METRIC_NAME="adrAlertLogError" USE_CACHE="TRUE"/>
			<GetView NAME="alert_log_incident_errors" FROM_TABLE="alert_log_errors">
				<Filter COLUMN_NAME="errorCategory" OPERATOR="EQ">incident</Filter>
			</GetView>
			<GetView NAME="alert_log_incident_errors_1" FROM_TABLE="alert_log_incident_errors">
				<Column NAME="timeLine"/>
				<Column NAME="genericIncidentErrStack"/>
				<Column NAME="genericInternalErrStack"/>
				<Column NAME="sessTerminateErrStack"/>
				<Column NAME="internalSqlErrStack"/>
				<Column NAME="accessViolationErrStack"/>
				<Column NAME="redoLogCorruptErrStack"/>
				<Column NAME="fileAccessErrStack"/>
				<Column NAME="inconsistentDbStateErrStack"/>
				<Column NAME="oraBlockCorruptErrStack"/>
				<Column NAME="deadlockErrStack"/>
				<Column NAME="outOfMemoryErrStack"/>
				<Column NAME="clusterErrStack"/>
				<Column NAME="traceFileName"/>
				<Column NAME="errCodes"/>
				<Column NAME="alertLogName"/>
				<Column NAME="impact"/>
				<Column NAME="incidentId"/>
			</GetView>
		</ExecutionDescriptor>
	</Metric>

    <!--
  ======================================================================
  == Category:         ADR Alert Log Operational Error
  == Collection Level: Minimum
  == Purpose:          Alerts
  ======================================================================
    -->
	<Metric NAME="adrAlertLogOperationalError" TYPE="TABLE">
    <ValidIf>
      <CategoryProp NAME="VersionCategory" CHOICES="11gR1;11gR2"/>
    </ValidIf>
		<Display>
			<Label NLSID="adrAlertLogOperationalError">Operational Error</Label>
		</Display>
		<TableDescriptor>
			<ColumnDescriptor NAME="timeLine" TYPE="STRING" IS_KEY="TRUE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="adrAlertLog_timeLine">Time/Line Number</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="genericOperationalErrStack" TYPE="STRING" STATELESS_ALERTS="TRUE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="adrAlertLog_genericOperationalErrStack">Generic Operational Error</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="archiveHungErrStack" TYPE="STRING" STATELESS_ALERTS="TRUE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="adrAlertLog_archiveHungErrStack">Archiver Hung</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="blockCorruptErrStack" TYPE="STRING" STATELESS_ALERTS="TRUE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="adrAlertLog_blockCorruptErrStack">Data Block Corruption</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="mediaFailureErrStack" TYPE="STRING" STATELESS_ALERTS="TRUE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="adrAlertLog_mediaFailureErrStack">Media Failure</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="traceFileName" TYPE="STRING" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="adrAlertLog_traceFileName">Alert Log Error Trace File</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="errCodes" TYPE="STRING" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="adrAlertLog_errCodes">Witnessed Error Codes</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="alertLogName" TYPE="STRING" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="adrAlertLog_fileName">Alert Log Name</Label>
				</Display>
			</ColumnDescriptor>
		</TableDescriptor>
		<ExecutionDescriptor>
			<GetTable NAME="alert_log_errors" METRIC_NAME="adrAlertLogError" USE_CACHE="TRUE"/>
			<GetView NAME="alert_log_operational_errors" FROM_TABLE="alert_log_errors">
				<Filter COLUMN_NAME="errorCategory" OPERATOR="EQ">operational</Filter>
			</GetView>
			<GetView NAME="alert_log_operational_errors_1" FROM_TABLE="alert_log_operational_errors">
				<Column NAME="timeLine"/>
				<Column NAME="genericOperationalErrStack"/>
				<Column NAME="archiveHungErrStack"/>
				<Column NAME="blockCorruptErrStack"/>
				<Column NAME="mediaFailureErrStack"/>
				<Column NAME="traceFileName"/>
				<Column NAME="errCodes"/>
				<Column NAME="alertLogName"/>
			</GetView>
		</ExecutionDescriptor>
	</Metric>

    <!--
  ======================================================================
  == Category:         ADR Alert Log Data Failure
  == Collection Level: Minimum
  == Purpose:          Alerts
  ======================================================================
    -->
	<Metric NAME="adrAlertLogDataFailure" TYPE="TABLE">
    <ValidIf>
      <CategoryProp NAME="VersionCategory" CHOICES="11gR1;11gR2"/>
    </ValidIf>
		<Display>
			<Label NLSID="adrAlertLogDataFailure">Data Failure</Label>
		</Display>
		<TableDescriptor>
			<ColumnDescriptor NAME="timeLine" TYPE="STRING" IS_KEY="TRUE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="adrAlertLog_timeLine">Time/Line Number</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="dataFailureErrStack" TYPE="STRING" STATELESS_ALERTS="TRUE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="adrAlertLog_dataFailureErrStack">Data Failure Detected</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="numberOfFailures" TYPE="STRING" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="adrAlertLog_numberOfFailures">Number of Failures</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="alertLogName" TYPE="STRING" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="adrAlertLog_fileName">Alert Log Name</Label>
				</Display>
			</ColumnDescriptor>
		</TableDescriptor>
		<ExecutionDescriptor>
			<GetTable NAME="alert_log_errors" METRIC_NAME="adrAlertLogError" USE_CACHE="TRUE"/>
			<GetView NAME="alert_log_data_failures" FROM_TABLE="alert_log_errors">
				<Filter COLUMN_NAME="errorCategory" OPERATOR="EQ">dataFailure</Filter>
			</GetView>
			<GetView NAME="alert_log_data_failures_1" FROM_TABLE="alert_log_data_failures">
				<Column NAME="timeLine"/>
				<Column NAME="dataFailureErrStack"/>
				<Column NAME="numberOfFailures"/>
				<Column NAME="alertLogName"/>
			</GetView>
		</ExecutionDescriptor>
	</Metric>

    <!--
  ======================================================================
  == Category:         ADR Alert Log Incident Error Status
  == Collection Level: Minimum
  == Purpose:          Alerts
  ======================================================================
    -->
	<Metric NAME="adrAlertLogIncidentErrorStatus" TYPE="TABLE">
    <ValidIf>
      <CategoryProp NAME="VersionCategory" CHOICES="11gR1;11gR2"/>
    </ValidIf>
		<Display>
			<Label NLSID="adrAlertLogIncidentErrorStatus">Incident Status</Label>
		</Display>
		<TableDescriptor>
			<ColumnDescriptor NAME="genericIncidentErrors" TYPE="NUMBER">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="adrAlertLogStatus_genericIncidentErrors">Generic Incident Status</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="genericInternalErrors" TYPE="NUMBER">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="adrAlertLogStatus_genericInternalErrors">Generic Internal Error Status</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="sessTerminateErrors" TYPE="NUMBER">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="adrAlertLogStatus_sessTerminateErrors">Session Terminated Status</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="internalSqlErrors" TYPE="NUMBER">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="adrAlertLogStatus_internalSqlErrors">Internal SQL Error Status</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="accessViolationErrors" TYPE="NUMBER">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="adrAlertLogStatus_accessViolationErrors">Access Violation Status</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="redoLogCorruptErrors" TYPE="NUMBER">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="adrAlertLogStatus_redoLogCorruptErrors">Redo Log Corruption Status</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="fileAccessErrors" TYPE="NUMBER">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="adrAlertLogStatus_fileAccessErrors">File Access Error Status</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="inconsistentDbStateErrors" TYPE="NUMBER">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="adrAlertLogStatus_inconsistentDbStateErrors">Inconsistent DB State Status</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="oraBlockCorruptErrors" TYPE="NUMBER">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="adrAlertLogStatus_oraBlockCorruptErrors">Oracle Data Block Corruption Status</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="deadlockErrors" TYPE="NUMBER">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="adrAlertLogStatus_deadlockErrors">Deadlock Status</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="outOfMemoryErrors" TYPE="NUMBER">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="adrAlertLogStatus_outOfMemoryErrors">Out of Memory Status</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="clusterErrors" TYPE="NUMBER">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="adrAlertLogStatus_clusterErrors">Cluster Error Status</Label>
				</Display>
			</ColumnDescriptor>
		</TableDescriptor>
		<ExecutionDescriptor>
			<GetTable NAME="alert_log_errors" METRIC_NAME="adrAlertLogIncidentError" USE_CACHE="TRUE"/>
			<GetView NAME="generic_incident_alert_log_errors" FROM_TABLE="alert_log_errors">
				<Column NAME="genericIncidentErrStack"/>
				<Filter COLUMN_NAME="genericIncidentErrStack" OPERATOR="ISNOTNULL"/>
			</GetView>
			<GroupBy NAME="generic_incident_alert_log_rollup" FROM_TABLE="generic_incident_alert_log_errors">
				<AggregateColumn NAME="genericIncidentErrors" COLUMN_NAME="genericIncidentErrStack" OPERATOR="COUNT"/>
			</GroupBy>
			<GetView NAME="generic_internal_alert_log_errors" FROM_TABLE="alert_log_errors">
				<Column NAME="genericInternalErrStack"/>
				<Filter COLUMN_NAME="genericInternalErrStack" OPERATOR="ISNOTNULL"/>
			</GetView>
			<GroupBy NAME="generic_internal_alert_log_rollup" FROM_TABLE="generic_internal_alert_log_errors">
				<AggregateColumn NAME="genericInternalErrors" COLUMN_NAME="genericInternalErrStack" OPERATOR="COUNT"/>
			</GroupBy>
			<GetView NAME="sess_terminate_alert_log_errors" FROM_TABLE="alert_log_errors">
				<Column NAME="sessTerminateErrStack"/>
				<Filter COLUMN_NAME="sessTerminateErrStack" OPERATOR="ISNOTNULL"/>
			</GetView>
			<GroupBy NAME="sess_terminate_alert_log_rollup" FROM_TABLE="sess_terminate_alert_log_errors">
				<AggregateColumn NAME="sessTerminateErrors" COLUMN_NAME="sessTerminateErrStack" OPERATOR="COUNT"/>
			</GroupBy>
			<GetView NAME="internal_sql_alert_log_errors" FROM_TABLE="alert_log_errors">
				<Column NAME="internalSqlErrStack"/>
				<Filter COLUMN_NAME="internalSqlErrStack" OPERATOR="ISNOTNULL"/>
			</GetView>
			<GroupBy NAME="internal_sql_alert_log_rollup" FROM_TABLE="internal_sql_alert_log_errors">
				<AggregateColumn NAME="internalSqlErrors" COLUMN_NAME="internalSqlErrStack" OPERATOR="COUNT"/>
			</GroupBy>
			<GetView NAME="access_violation_alert_log_errors" FROM_TABLE="alert_log_errors">
				<Column NAME="accessViolationErrStack"/>
				<Filter COLUMN_NAME="accessViolationErrStack" OPERATOR="ISNOTNULL"/>
			</GetView>
			<GroupBy NAME="access_violation_alert_log_rollup" FROM_TABLE="access_violation_alert_log_errors">
				<AggregateColumn NAME="accessViolationErrors" COLUMN_NAME="accessViolationErrStack" OPERATOR="COUNT"/>
			</GroupBy>
			<GetView NAME="redo_log_corrupt_alert_log_errors" FROM_TABLE="alert_log_errors">
				<Column NAME="redoLogCorruptErrStack"/>
				<Filter COLUMN_NAME="redoLogCorruptErrStack" OPERATOR="ISNOTNULL"/>
			</GetView>
			<GroupBy NAME="redo_log_corrupt_alert_log_rollup" FROM_TABLE="redo_log_corrupt_alert_log_errors">
				<AggregateColumn NAME="redoLogCorruptErrors" COLUMN_NAME="redoLogCorruptErrStack" OPERATOR="COUNT"/>
			</GroupBy>
			<GetView NAME="file_access_alert_log_errors" FROM_TABLE="alert_log_errors">
				<Column NAME="fileAccessErrStack"/>
				<Filter COLUMN_NAME="fileAccessErrStack" OPERATOR="ISNOTNULL"/>
			</GetView>
			<GroupBy NAME="file_access_alert_log_rollup" FROM_TABLE="file_access_alert_log_errors">
				<AggregateColumn NAME="fileAccessErrors" COLUMN_NAME="fileAccessErrStack" OPERATOR="COUNT"/>
			</GroupBy>
			<GetView NAME="inconsistent_db_state_alert_log_errors" FROM_TABLE="alert_log_errors">
				<Column NAME="inconsistentDbStateErrStack"/>
				<Filter COLUMN_NAME="inconsistentDbStateErrStack" OPERATOR="ISNOTNULL"/>
			</GetView>
			<GroupBy NAME="inconsistent_db_state_alert_log_rollup" FROM_TABLE="inconsistent_db_state_alert_log_errors">
				<AggregateColumn NAME="inconsistentDbStateErrors" COLUMN_NAME="inconsistentDbStateErrStack" OPERATOR="COUNT"/>
			</GroupBy>
			<GetView NAME="ora_block_corrupt_alert_log_errors" FROM_TABLE="alert_log_errors">
				<Column NAME="oraBlockCorruptErrStack"/>
				<Filter COLUMN_NAME="oraBlockCorruptErrStack" OPERATOR="ISNOTNULL"/>
			</GetView>
			<GroupBy NAME="ora_block_corrupt_alert_log_rollup" FROM_TABLE="ora_block_corrupt_alert_log_errors">
				<AggregateColumn NAME="oraBlockCorruptErrors" COLUMN_NAME="oraBlockCorruptErrStack" OPERATOR="COUNT"/>
			</GroupBy>
			<GetView NAME="deadlock_alert_log_errors" FROM_TABLE="alert_log_errors">
				<Column NAME="deadlockErrStack"/>
				<Filter COLUMN_NAME="deadlockErrStack" OPERATOR="ISNOTNULL"/>
			</GetView>
			<GroupBy NAME="deadlock_alert_log_rollup" FROM_TABLE="deadlock_alert_log_errors">
				<AggregateColumn NAME="deadlockErrors" COLUMN_NAME="deadlockErrStack" OPERATOR="COUNT"/>
			</GroupBy>
			<GetView NAME="out_of_memory_alert_log_errors" FROM_TABLE="alert_log_errors">
				<Column NAME="outOfMemoryErrStack"/>
				<Filter COLUMN_NAME="outOfMemoryErrStack" OPERATOR="ISNOTNULL"/>
			</GetView>
			<GroupBy NAME="out_of_memory_alert_log_rollup" FROM_TABLE="out_of_memory_alert_log_errors">
				<AggregateColumn NAME="outOfMemoryErrors" COLUMN_NAME="outOfMemoryErrStack" OPERATOR="COUNT"/>
			</GroupBy>
			<GetView NAME="cluster_alert_log_errors" FROM_TABLE="alert_log_errors">
				<Column NAME="clusterErrStack"/>
				<Filter COLUMN_NAME="clusterErrStack" OPERATOR="ISNOTNULL"/>
			</GetView>
			<GroupBy NAME="cluster_alert_log_rollup" FROM_TABLE="cluster_alert_log_errors">
				<AggregateColumn NAME="clusterErrors" COLUMN_NAME="clusterErrStack" OPERATOR="COUNT"/>
			</GroupBy>
			<JoinTables NAME="adrAlertLogIncidentErrorStatus">
				<Table NAME="generic_incident_alert_log_rollup"/>
				<Table NAME="generic_internal_alert_log_rollup"/>
				<Table NAME="sess_terminate_alert_log_rollup"/>
				<Table NAME="internal_sql_alert_log_rollup"/>
				<Table NAME="access_violation_alert_log_rollup"/>
				<Table NAME="redo_log_corrupt_alert_log_rollup"/>
				<Table NAME="file_access_alert_log_rollup"/>
				<Table NAME="inconsistent_db_state_alert_log_rollup"/>
				<Table NAME="ora_block_corrupt_alert_log_rollup"/>
				<Table NAME="deadlock_alert_log_rollup"/>
				<Table NAME="out_of_memory_alert_log_rollup"/>
				<Table NAME="cluster_alert_log_rollup"/>
			</JoinTables>
		</ExecutionDescriptor>
	</Metric>

    <!--
  ======================================================================
  == Category:         ADR Alert Log Operational Error Status
  == Collection Level: Minimum
  == Purpose:          Alerts
  ======================================================================
    -->
	<Metric NAME="adrAlertLogOperationalErrorStatus" TYPE="TABLE">
    <ValidIf>
      <CategoryProp NAME="VersionCategory" CHOICES="11gR1;11gR2"/>
    </ValidIf>
		<Display>
			<Label NLSID="adrAlertLogOperationalErrorStatus">Operational Error Status</Label>
		</Display>
		<TableDescriptor>
			<ColumnDescriptor NAME="genericOperationalErrors" TYPE="NUMBER">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="adrAlertLogStatus_genericOperationalErrors">Generic Operational Error Status</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="archiveHungErrors" TYPE="NUMBER">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="adrAlertLogStatus_archiveHungErrors">Archiver Hung Status</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="blockCorruptErrors" TYPE="NUMBER">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="adrAlertLogStatus_blockCorruptErrors">Data Block Corruption Status</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="mediaFailureErrors" TYPE="NUMBER">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="adrAlertLogStatus_mediaFailureErrors">Media Failure Status</Label>
				</Display>
			</ColumnDescriptor>
		</TableDescriptor>
		<ExecutionDescriptor>
			<GetTable NAME="alert_log_errors" METRIC_NAME="adrAlertLogOperationalError" USE_CACHE="TRUE"/>
			<GetView NAME="generic_operational_alert_log_errors" FROM_TABLE="alert_log_errors">
				<Column NAME="genericOperationalErrStack"/>
				<Filter COLUMN_NAME="genericOperationalErrStack" OPERATOR="ISNOTNULL"/>
			</GetView>
			<GroupBy NAME="generic_operational_alert_log_rollup" FROM_TABLE="generic_operational_alert_log_errors">
				<AggregateColumn NAME="genericOperationalErrors" COLUMN_NAME="genericOperationalErrStack" OPERATOR="COUNT"/>
			</GroupBy>
			<GetView NAME="archive_hung_alert_log_errors" FROM_TABLE="alert_log_errors">
				<Column NAME="archiveHungErrStack"/>
				<Filter COLUMN_NAME="archiveHungErrStack" OPERATOR="ISNOTNULL"/>
			</GetView>
			<GroupBy NAME="archive_hung_alert_log_rollup" FROM_TABLE="archive_hung_alert_log_errors">
				<AggregateColumn NAME="archiveHungErrors" COLUMN_NAME="archiveHungErrStack" OPERATOR="COUNT"/>
			</GroupBy>
			<GetView NAME="block_corrupt_alert_log_errors" FROM_TABLE="alert_log_errors">
				<Column NAME="blockCorruptErrStack"/>
				<Filter COLUMN_NAME="blockCorruptErrStack" OPERATOR="ISNOTNULL"/>
			</GetView>
			<GroupBy NAME="block_corrupt_alert_log_rollup" FROM_TABLE="block_corrupt_alert_log_errors">
				<AggregateColumn NAME="blockCorruptErrors" COLUMN_NAME="blockCorruptErrStack" OPERATOR="COUNT"/>
			</GroupBy>
			<GetView NAME="media_failure_alert_log_errors" FROM_TABLE="alert_log_errors">
				<Column NAME="mediaFailureErrStack"/>
				<Filter COLUMN_NAME="mediaFailureErrStack" OPERATOR="ISNOTNULL"/>
			</GetView>
			<GroupBy NAME="media_failure_alert_log_rollup" FROM_TABLE="media_failure_alert_log_errors">
				<AggregateColumn NAME="mediaFailureErrors" COLUMN_NAME="mediaFailureErrStack" OPERATOR="COUNT"/>
			</GroupBy>
			<JoinTables NAME="adrAlertLogOperationalErrorStatus">
				<Table NAME="generic_operational_alert_log_rollup"/>
				<Table NAME="archive_hung_alert_log_rollup"/>
				<Table NAME="block_corrupt_alert_log_rollup"/>
				<Table NAME="media_failure_alert_log_rollup"/>
			</JoinTables>
		</ExecutionDescriptor>
	</Metric>

    <!--
  ======================================================================
  == Category:         Alert Log Content
  == Collection Level: {Not Collected}
  == Purpose:          On-Demand
  ======================================================================
    -->
	<Metric NAME="alertLogContent" TYPE="TABLE" USAGE_TYPE="HIDDEN"
      HELP="NO_HELP">
		<Display>
			<Label NLSID="alertLogContent">Alert Log Content</Label>
		</Display>
		<TableDescriptor>
			<ColumnDescriptor NAME="alertLogContent" TYPE="STRING" IS_KEY="FALSE">
				<Display>
					<Label NLSID="alertLog_content">Content</Label>
				</Display>
			</ColumnDescriptor>
		</TableDescriptor>
		<QueryDescriptor FETCHLET_ID="OS">
			<Property NAME="perlBin" SCOPE="SYSTEMGLOBAL">perlBin</Property>
			<Property NAME="scriptsDir" SCOPE="SYSTEMGLOBAL">scriptsDir</Property>
			<Property NAME="startsWith" SCOPE="GLOBAL">em_result=</Property>
			<Property NAME="SID" SCOPE="INSTANCE">SID</Property>
			<Property NAME="OracleHome" SCOPE="INSTANCE">OracleHome</Property>
			<Property NAME="GetDumpDestination" SCOPE="INSTANCE">background_dump_dest</Property>
			<Property NAME="ConvertFromCharset" SCOPE="INSTANCE" OPTIONAL="TRUE">ConvertFromCharset</Property>
			<Property NAME="needCharsetConvert" SCOPE="INSTANCE" OPTIONAL="TRUE">needCharsetConvert</Property>
			<Property NAME="sizeToView" SCOPE="USER">sizeToView</Property>
                        <Property NAME="startTime" SCOPE="USER" OPTIONAL="TRUE">startTime</Property>
                        <Property NAME="endTime" SCOPE="USER" OPTIONAL="TRUE">endTime</Property>
			<Property NAME="command" SCOPE="GLOBAL">
         %perlBin%/perl %scriptsDir%/alertlogViewer.pl %OracleHome% %GetDumpDestination% %SID% %sizeToView% %startTime% %endTime%
      </Property>
		</QueryDescriptor>
	</Metric>

  <!--
  ======================================================================
  == Category:         ADR Alert Log Content
  == Collection Level: {Not Collected}
  == Purpose:          On-Demand
  ======================================================================
  -->
  <Metric NAME="adrAlertLogContent" TYPE="TABLE" USAGE_TYPE="HIDDEN"
      HELP="NO_HELP">
    <ValidIf>
      <CategoryProp NAME="VersionCategory" CHOICES="11gR1;11gR2"/>
    </ValidIf>
    <TableDescriptor>
      <ColumnDescriptor NAME="logContent" TYPE="STRING" IS_KEY="FALSE"/>
    </TableDescriptor>
    <QueryDescriptor FETCHLET_ID="OS">
      <Property NAME="perlBin" SCOPE="SYSTEMGLOBAL">perlBin</Property>
      <Property NAME="scriptsDir" SCOPE="SYSTEMGLOBAL">scriptsDir</Property>
      <Property NAME="startsWith" SCOPE="GLOBAL">em_result=</Property>
      <Property NAME="ConvertFromCharset" SCOPE="INSTANCE" OPTIONAL="TRUE">ConvertFromCharset</Property>
      <Property NAME="needCharsetConvert" SCOPE="INSTANCE" OPTIONAL="TRUE">needCharsetConvert</Property>
      <Property NAME="ENVEM_TARGET_GUID" SCOPE="INSTANCE">GUID</Property>
      <Property NAME="ENVEM_AGENT_STATE_DIR" SCOPE="SYSTEMGLOBAL">agentStateDir</Property>
      <Property NAME="AdrHome" SCOPE="INSTANCE">AdrHome</Property>
      <Property NAME="ARGS" SCOPE="USER" OPTIONAL="TRUE">ARGS</Property>
      <Property NAME="STDINLARGE_ARGS" SCOPE="USER" OPTIONAL="TRUE">LARGE_ARGS</Property>
      <Property NAME="command" SCOPE="GLOBAL">
        %perlBin%/perl %scriptsDir%/alertlogAdrViewer.pl %AdrHome% "%ARGS%"
      </Property>
    </QueryDescriptor>
  </Metric>

   <!--
  ======================================================================
  == Category:         User Block
  == Collection Level: Minimum
  == Purpose:          Alerts
  ======================================================================
    -->
    <Metric NAME="UserBlock" TYPE="TABLE">
        <ValidIf>
            <CategoryProp NAME="VersionCategory" CHOICES="pre8;8i;8iR2;9i;9iR2"/>
            <CategoryProp NAME="MetricScope" CHOICES="DB"/>
        </ValidIf>
        <Display>
            <Label NLSID="userBlock">User Block</Label>
        </Display>
        <TableDescriptor>
            <ColumnDescriptor NAME="sid" TYPE="STRING" IS_KEY="TRUE">
                <Display>
                    <Label NLSID="userBlock_blocking_sid">Blocking Session ID</Label>
                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="count" TYPE="NUMBER" IS_KEY="FALSE">
                <Display>
                    <Label NLSID="userBlock_count">Blocking Session Count</Label>
                </Display>
            </ColumnDescriptor>
        </TableDescriptor>
        <QueryDescriptor FETCHLET_ID="SQL">
            <Property NAME="STATEMENT" SCOPE="GLOBAL"><![CDATA[
      SELECT blocking_sid, SUM(num_blocked) num_blocked
        FROM (SELECT id1, id2,
                     MAX(DECODE(block, 1, sid, 0)) blocking_sid,
                     SUM(DECODE(request, 0, 0, 1)) num_blocked
                FROM v$lock
               WHERE block = 1
                  OR request > 0
               GROUP BY id1, id2)
       GROUP BY blocking_sid
]]></Property>
            <Property NAME="MachineName" SCOPE="INSTANCE">MachineName</Property>
            <Property NAME="Port" SCOPE="INSTANCE">Port</Property>
            <Property NAME="SID" SCOPE="INSTANCE">SID</Property>
            <Property NAME="UserName" SCOPE="INSTANCE">UserName</Property>
            <Property NAME="password" SCOPE="INSTANCE">password</Property>
            <Property NAME="Role" SCOPE="INSTANCE" OPTIONAL="TRUE">Role</Property>
        </QueryDescriptor>
    </Metric>
    <!--
  ======================================================================
  == Category:         User Audit
  == Collection Level: Recommended
  == Purpose:          Alerts
  ======================================================================
    -->
  	<Metric NAME="UserAudit" TYPE="TABLE">
		<Display>
			<Label NLSID="user_audit">User Audit</Label>
		</Display>
		<TableDescriptor>
			<ColumnDescriptor NAME="username" TYPE="STRING" IS_KEY="FALSE">
				<Display>
					<Label NLSID="userAudit_username">Audited User</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="machine" TYPE="STRING" IS_KEY="FALSE">
				<Display>
					<Label NLSID="userAudit_machine">Audited User Host</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="Session Count" TYPE="NUMBER" IS_KEY="FALSE">
				<Display>
					<Label NLSID="userAudit_session_count">Audited User Session Count</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="Username_machine" TYPE="STRING" IS_KEY="TRUE">
				<Display>
					<Label NLSID="userAudit_username_machine">Username_Machine</Label>
				</Display>
			</ColumnDescriptor>
		</TableDescriptor>
		<QueryDescriptor FETCHLET_ID="SQL">
			<Property NAME="STATEMENT" SCOPE="GLOBAL"><![CDATA[
            select uname, mname, TO_CHAR(count(uname)) , concat(concat(uname,'_'), mname) username_machine from 
            (select trim(chr(0) from trim(username)) uname, trim(chr(0) from trim(machine)) mname
            from v$session where type <> 'BACKGROUND' and username is not null )
            group by uname, mname
      ]]></Property>
			<Property NAME="MachineName" SCOPE="INSTANCE">MachineName</Property>
			<Property NAME="Port" SCOPE="INSTANCE">Port</Property>
			<Property NAME="SID" SCOPE="INSTANCE">SID</Property>
			<Property NAME="UserName" SCOPE="INSTANCE">UserName</Property>
			<Property NAME="password" SCOPE="INSTANCE">password</Property>
			<Property NAME="Role" SCOPE="INSTANCE" OPTIONAL="TRUE">Role</Property>
		</QueryDescriptor>
	</Metric>
    <!--
  ======================================================================
  == Category:         mgmt_sql_summary
  == Collection Level: Recommended
  == Purpose:          Reporting
  ======================================================================
    -->
 	<Metric NAME="mgmt_sql_metric_helper" TYPE="RAW">
		<ValidIf>
			<CategoryProp NAME="MCPkg" CHOICES="1;3"/>
			<CategoryProp NAME="VersionCategory" CHOICES="pre8;8i;8iR2;9i;9iR2"/>
		</ValidIf>
		<Display>
			<Label NLSID="mgmt_sql_metric_helper">mgmt_sql_metric_helper</Label>
		</Display>
		<TableDescriptor TABLE_NAME="mgmt_sql_metric_helper" SKIP_COLLTIME_PK="TRUE" SKIP_METRIC_COLUMN="TRUE">
			<ColumnDescriptor NAME="snap_time" COLUMN_NAME="snap_time" TYPE="STRING" IS_DATE="TRUE" IS_KEY="FALSE">
				<Display>
					<Label NLSID="mgmt_sql_metric_helper_data_available">Data Available</Label>
				</Display>
			</ColumnDescriptor>
		</TableDescriptor>
		<QueryDescriptor FETCHLET_ID="SQL">
			<Property NAME="STATEMENT" SCOPE="GLOBAL"><![CDATA[
DECLARE
        TYPE        data_cursor_type IS REF CURSOR;
        data_cursor data_cursor_type;
BEGIN
  OPEN data_cursor FOR
    SELECT to_char(NVL(MAX(s.snap_time), sysdate), 'YYYY-MM-DD HH24:MI:SS')
      FROM perfstat.stats$snapshot s, v$database d, v$instance i
      WHERE s.dbid = d.dbid and s.instance_number = i.instance_number;
  :1 := data_cursor;
END;
]]></Property>
			<Property NAME="SQLOUTPARAMPOS" SCOPE="GLOBAL">1</Property>
			<Property NAME="SQLOUTPARAMTYPE" SCOPE="GLOBAL">SQL_CURSOR</Property>
			<Property NAME="MachineName" SCOPE="INSTANCE">MachineName</Property>
			<Property NAME="Port" SCOPE="INSTANCE">Port</Property>
			<Property NAME="SID" SCOPE="INSTANCE">SID</Property>
			<Property NAME="UserName" SCOPE="INSTANCE">UserName</Property>
			<Property NAME="password" SCOPE="INSTANCE">password</Property>
			<Property NAME="Role" SCOPE="INSTANCE" OPTIONAL="TRUE">Role</Property>
		</QueryDescriptor>
	</Metric>
	<Metric NAME="mgmt_sql_summary" TYPE="RAW" HELP="NO_HELP">
		<ValidIf>
			<CategoryProp NAME="MCPkg" CHOICES="1;3"/>
			<CategoryProp NAME="VersionCategory" CHOICES="pre8;8i;8iR2;9i;9iR2"/>
		</ValidIf>
		<Display>
			<Label NLSID="mgmt_sql_summary">mgmt_sql_summary</Label>
		</Display>
		<TableDescriptor TABLE_NAME="mgmt_sql_summary" SKIP_COLLTIME_COLUMN="TRUE" SKIP_COLLTIME_PK="TRUE" SKIP_METRIC_COLUMN="TRUE">
			<ColumnDescriptor NAME="snap_id" COLUMN_NAME="snap_id" IS_KEY="TRUE" TYPE="STRING">
				<Display>
					<Label NLSID="mgmt_sql_summary_snap_id">Snap ID</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="collection_timestamp" COLUMN_NAME="collection_timestamp" TYPE="STRING" IS_DATE="TRUE" IS_KEY="FALSE">
				<Display>
					<Label NLSID="mgmt_sql_summary_collection_timestamp">Collection Timestamp</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="sql" COLUMN_NAME="sql_text" IS_KEY="FALSE" TYPE="STRING">
				<Display>
					<Label NLSID="mgmt_sql_summary_sql">SQL Statement</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="piece" COLUMN_NAME="piece" IS_KEY="TRUE" TYPE="NUMBER">
				<Display>
					<Label NLSID="mgmt_sql_summary_piece">Piece</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="sharableMem" COLUMN_NAME="sharable_mem" IS_KEY="FALSE" TYPE="NUMBER">
				<Display>
					<Label NLSID="mgmt_sql_summary_sharableMem">Sharable Memory</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="sorts" COLUMN_NAME="sorts" IS_KEY="FALSE" TYPE="NUMBER">
				<Display>
					<Label NLSID="mgmt_sql_summary_sorts">Sorts</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="modName" COLUMN_NAME="module" IS_KEY="FALSE" TYPE="STRING">
				<Display>
					<Label NLSID="mgmt_sql_summary_mod">Module</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="loadedVers" COLUMN_NAME="loaded_versions" IS_KEY="FALSE" TYPE="NUMBER">
				<Display>
					<Label NLSID="mgmt_sql_summary_loadedVers">Loaded Versions</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="executions" COLUMN_NAME="executions" IS_KEY="FALSE" TYPE="NUMBER">
				<Display>
					<Label NLSID="mgmt_sql_summary_executions">Executions</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="loads" COLUMN_NAME="loads" IS_KEY="FALSE" TYPE="NUMBER">
				<Display>
					<Label NLSID="mgmt_sql_summary_loads">Loads</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="invalidations" COLUMN_NAME="invalidations" IS_KEY="FALSE" TYPE="NUMBER">
				<Display>
					<Label NLSID="mgmt_sql_summary_invalidations">Invalidations</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="parseCalls" COLUMN_NAME="parse_calls" IS_KEY="FALSE" TYPE="NUMBER">
				<Display>
					<Label NLSID="mgmt_sql_summary_parseCalls">Parse Calls</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="diskReads" COLUMN_NAME="disk_reads" IS_KEY="FALSE" TYPE="NUMBER">
				<Display>
					<Label NLSID="mgmt_sql_summary_diskReads">Disk Reads</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="bufferGets" COLUMN_NAME="buffer_gets" IS_KEY="FALSE" TYPE="NUMBER">
				<Display>
					<Label NLSID="mgmt_sql_summary_bufferGets">Buffer Gets</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="rowsProc" COLUMN_NAME="rows_processed" IS_KEY="FALSE" TYPE="NUMBER">
				<Display>
					<Label NLSID="mgmt_sql_summary_rowsProc">Rows Processed</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="cmdType" COLUMN_NAME="command_type" IS_KEY="FALSE" TYPE="NUMBER">
				<Display>
					<Label NLSID="mgmt_sql_summary_cmdType">Command Type</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="address" COLUMN_NAME="address" IS_KEY="TRUE" TYPE="STRING">
				<Display>
					<Label NLSID="mgmt_sql_summary_address">Address</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="hashValue" COLUMN_NAME="hash_value" IS_KEY="TRUE" TYPE="NUMBER">
				<Display>
					<Label NLSID="mgmt_sql_summary_hashValue">Hash Value</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="versionCount" COLUMN_NAME="version_count" IS_KEY="FALSE" TYPE="NUMBER">
				<Display>
					<Label NLSID="mgmt_sql_summary_versionCount">Sql Version Count</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="cpuTime" COLUMN_NAME="cpu_time" IS_KEY="FALSE" TYPE="NUMBER">
				<Display>
					<Label NLSID="mgmt_sql_summary_cpuTime">CPU Time</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="elapsedTime" COLUMN_NAME="elapsed_time" IS_KEY="FALSE" TYPE="NUMBER">
				<Display>
					<Label NLSID="mgmt_sql_summary_elapsedTime">Elapsed Time</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="outlineSid" COLUMN_NAME="outline_sid" IS_KEY="FALSE" TYPE="NUMBER">
				<Display>
					<Label NLSID="mgmt_sql_summary_outlineSid">Outline SID</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="outlineCat" COLUMN_NAME="outline_category" IS_KEY="FALSE" TYPE="STRING">
				<Display>
					<Label NLSID="mgmt_sql_summary_outlineCat">Outline Category</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="planId" COLUMN_NAME="plan_hash_value" IS_KEY="TRUE" TYPE="NUMBER">
				<Display>
					<Label NLSID="mgmt_sql_summary_planId">Plan Hash Value</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="optimizerMode" COLUMN_NAME="optimizer_mode" IS_KEY="FALSE" TYPE="STRING">
				<Display>
					<Label NLSID="mgmt_sql_summary_optimizerMode">Optimizer Mode</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="optimizerCost" COLUMN_NAME="optimizer_cost" IS_KEY="FALSE" TYPE="NUMBER">
				<Display>
					<Label NLSID="mgmt_sql_summary_optimizerCost">Optimizer Cost </Label>
				</Display>
			</ColumnDescriptor>
		</TableDescriptor>
		<QueryDescriptor FETCHLET_ID="SQL">
			<Property NAME="STATEMENT" SCOPE="GLOBAL"><![CDATA[
DECLARE
  TYPE                t_statistics_cursor_type IS REF CURSOR;
  v_stat_cursor_8i    t_statistics_cursor_type;
  v_stat_cursor_9i    t_statistics_cursor_type;
  v_db_version        VARCHAR2(10);
  db_version_min_8i   CONSTANT VARCHAR2(10) := '08.1.5.0.0';
  db_version_9i       CONSTANT VARCHAR2(10) := '09.0.0.0.0';
  db_version_92       CONSTANT VARCHAR2(10) := '09.2.0.0.0';
  v_dbid              NUMBER := 0;
  v_instance_number   NUMBER := 0;
  c_interval          NUMBER := 24;
  v_snap_id           NUMBER;
  v_snap_time         DATE;
  v_snap_time_dis     varchar2(50);
  v_snap_level        NUMBER;
  v_b_snap_id         NUMBER := -1;
  v_b_snap_time       DATE;
  v_b_snap_level      NUMBER := -1;
  v_e_snap_id         NUMBER := -1;
  v_e_snap_time       DATE   := sysdate;
  v_e_snap_time_dis   varchar2(50) := to_char(sysdate, 'YYYY-MM-DD HH24:MI:SS');
  v_e_snap_level      NUMBER := -1;
  v_time_interval     NUMBER := -1;
  v_current_interval  NUMBER := -1;
  v_total_disk_reads  NUMBER := -1;
  v_total_buf_gets    NUMBER := -1;
  v_e_total_disk_reads  NUMBER := -1;
  v_e_total_buf_gets    NUMBER := -1;
  v_b_total_disk_reads  NUMBER := 0;
  v_b_total_buf_gets    NUMBER := 0;
  v_b_cpu_time        NUMBER := -1;
  v_e_cpu_time        NUMBER := -1;
  v_b_parse_calls     NUMBER := -1;
  v_e_parse_calls     NUMBER := -1;
  v_b_executions      NUMBER := -1;
  v_e_executions      NUMBER := -1;
  v_pect_cpu_time     NUMBER := -1;
  v_pect_parse_calls  NUMBER := -1;
  v_pect_executions   NUMBER := -1;
  v_sql_stmt_8        Varchar2(2000);
  v_sql_stmt_90       varchar2(3500);
  v_sql_stmt_92       varchar2(3500);
  v_pect_disk_reads NUMBER := -1;
  v_pect_buf_gets   NUMBER := -1;
  c_phy_read_pct NUMBER := :1;
  c_log_read_pct NUMBER := :2;
  c_cpu_time_pct NUMBER := :3;
  c_par_call_pct NUMBER := :4;
  c_exec_pct NUMBER := :5;
  v_startup_time DATE;
  v_e_startup_time DATE;

  CURSOR get_snap_ids IS
    SELECT snap_id, snap_time, to_char(snap_time, 'YYYY-MM-DD HH24:MI:SS'), snap_level, startup_time
      FROM perfstat.stats$snapshot
      WHERE dbid = v_dbid and instance_number = v_instance_number order by snap_time desc;

  CURSOR get_stat_total_value (p_name IN VARCHAR2,
                               p_snap_id IN NUMBER,
                               p_dbid IN NUMBER,
                               p_instance_number IN NUMBER) IS
    SELECT value
    FROM perfstat.stats$sysstat
    WHERE name = p_name AND snap_id = p_snap_id AND
          dbid = p_dbid AND instance_number = p_instance_number;

BEGIN
  -- --------------------------
  -- Get database version
  -- --------------------------
  SELECT LPAD(version, 10, '0')
    INTO v_db_version
    FROM v$instance;

  -- ------------------------------
  -- Find the database ID and instance number
  -- ------------------------------
  SELECT d.dbid, i.instance_number
    INTO v_dbid, v_instance_number
    FROM v$database d, v$instance i;

  -- ------------------------------
  -- Pick the latest snapshot and another snapshot where
  -- the interval between them is closest to 24 Hrs.
  -- ------------------------------

    OPEN get_snap_ids;
    LOOP
      FETCH get_snap_ids INTO v_snap_id, v_snap_time, v_snap_time_dis, v_snap_level, v_startup_time;
      EXIT WHEN get_snap_ids%NOTFOUND;
      IF v_e_snap_id = -1 THEN
        v_e_snap_id := v_snap_id;
        v_e_snap_time := v_snap_time;
        v_e_snap_time_dis := v_snap_time_dis;
        v_e_snap_level := v_snap_level;
        v_e_startup_time := v_startup_time;
      ELSIF v_b_snap_id = -1 OR
            ABS((v_e_snap_time - v_snap_time) * 24 - c_interval) <
            ABS(v_current_interval - c_interval) THEN
        v_b_snap_id := v_snap_id;
        v_b_snap_time := v_snap_time;
        v_b_snap_level := v_snap_level;
        v_current_interval := (v_e_snap_time - v_b_snap_time) * 24;
        -- dbms_output.put_line('DB v_current_interval : ' || v_current_interval);
      END IF;
    END LOOP;
    CLOSE get_snap_ids;

    -- Check if the instance rebounced between two snapshots or there is only one snapshot available
    IF v_b_snap_time IS NULL OR v_e_startup_time > v_b_snap_time THEN
      v_b_snap_id := -1;
      v_b_snap_time := v_e_startup_time;
    END IF;

    v_time_interval := v_e_snap_time - v_b_snap_time;
    IF v_time_interval is NULL THEN
      v_time_interval := 1;
    END IF;

  IF v_e_snap_id <> -1 THEN
    IF v_db_version >= db_version_9i THEN
      OPEN get_stat_total_value('CPU used when call started', v_e_snap_id, v_dbid, v_instance_number);
      FETCH get_stat_total_value INTO v_e_cpu_time;
      CLOSE get_stat_total_value;
    END IF;

    OPEN get_stat_total_value('session logical reads', v_e_snap_id, v_dbid, v_instance_number);
    FETCH get_stat_total_value INTO v_e_total_buf_gets;
    CLOSE get_stat_total_value;

    OPEN get_stat_total_value('physical reads', v_e_snap_id, v_dbid, v_instance_number);
    FETCH get_stat_total_value INTO v_e_total_disk_reads;
    CLOSE get_stat_total_value;

    OPEN get_stat_total_value('parse count (total)', v_e_snap_id, v_dbid, v_instance_number);
    FETCH get_stat_total_value INTO v_e_parse_calls;
    CLOSE get_stat_total_value;

    OPEN get_stat_total_value('execute count', v_e_snap_id, v_dbid, v_instance_number);
    FETCH get_stat_total_value INTO v_e_executions;
    CLOSE get_stat_total_value;
  END IF;

  IF v_b_snap_id <> -1 THEN
    IF v_db_version >= db_version_9i THEN
      OPEN get_stat_total_value('CPU used when call started', v_b_snap_id, v_dbid, v_instance_number);
      FETCH get_stat_total_value INTO v_b_cpu_time;
      CLOSE get_stat_total_value;
    END IF;

    OPEN get_stat_total_value('session logical reads', v_b_snap_id, v_dbid, v_instance_number);
    FETCH get_stat_total_value INTO v_b_total_buf_gets;
    CLOSE get_stat_total_value;

    OPEN get_stat_total_value('physical reads', v_b_snap_id, v_dbid, v_instance_number);
    FETCH get_stat_total_value INTO v_b_total_disk_reads;
    CLOSE get_stat_total_value;

    OPEN get_stat_total_value('parse count (total)', v_b_snap_id, v_dbid, v_instance_number);
    FETCH get_stat_total_value INTO v_b_parse_calls;
    CLOSE get_stat_total_value;

    OPEN get_stat_total_value('execute count', v_b_snap_id, v_dbid, v_instance_number);
    FETCH get_stat_total_value INTO v_b_executions;
    CLOSE get_stat_total_value;
  END IF;

  v_total_disk_reads := v_e_total_disk_reads - v_b_total_disk_reads;
  v_total_buf_gets := v_e_total_buf_gets - v_b_total_buf_gets;

  v_pect_disk_reads := c_phy_read_pct * v_total_disk_reads;
  v_pect_buf_gets   := c_log_read_pct * v_total_buf_gets;
  v_pect_cpu_time   := c_cpu_time_pct * (v_e_cpu_time - v_b_cpu_time) * 10000;
  v_pect_parse_calls := c_par_call_pct * (v_e_parse_calls - v_b_parse_calls);
  v_pect_executions := c_exec_pct * (v_e_executions - v_b_executions);

  IF v_db_version < db_version_9i THEN -- 8i case
    v_sql_stmt_8 :=
      'select e.snap_id, :end_snap_time_dis, st.sql_text, st.piece, e.sharable_mem, ' ||
      'e.sorts - nvl(b.sorts,0), e.module, e.loaded_versions, ' ||
      'e.executions - nvl(b.executions,0), e.loads - nvl(b.loads,0), ' ||
      'e.invalidations - nvl(b.invalidations,0), ' ||
      'e.parse_calls - nvl(b.parse_calls,0), ' ||
      'e.disk_reads - nvl(b.disk_reads,0), ' ||
      'e.buffer_gets - nvl(b.buffer_gets,0), ' ||
      'e.rows_processed - nvl(b.rows_processed,0), st.command_type, ' ||
      'RAWTOHEX(e.address), e.hash_value, ' ||
      'e.version_count, -1 cpu_time, ' ||
      '-1 elapsed_time, -1 outline_sid, NULL outline_category, -1 plan_hash_value, ' ||
      ''' '' optimizer, 0 cost ' ||
      'from perfstat.stats$sql_summary e, perfstat.stats$sql_summary b, perfstat.stats$sqltext st ' ||
      'where b.snap_id(+) = :b_snap_id ' ||
            ' and b.dbid(+)            = e.dbid ' ||
            ' and b.instance_number(+) = e.instance_number ' ||
            ' and st.piece =0 ' ||
            ' and b.hash_value(+)      = e.hash_value ' ||
            ' and b.address(+)         = e.address ' ||
            ' and b.text_subset(+)     = e.text_subset ' ||
            ' and e.snap_id            = :e_snap_id ' ||
            ' and e.dbid               = :dbid ' ||
            ' and e.instance_number    = :instance_number ' ||
            ' and e.hash_value         = st.hash_value ' ||
            ' and e.text_subset        = st.text_subset ' ||
            ' and e.executions - nvl(b.executions,0) > 0 ' ||
            ' and (e.buffer_gets - nvl(b.buffer_gets,0) >= :pect_buf_gets ' ||
            ' or e.disk_reads - nvl(b.disk_reads,0) >= :pect_disk_reads ' ||
            ' or e.parse_calls - nvl(b.parse_calls,0) >= :pect_parse_calls ' ||
            ' or e.executions - nvl(b.executions,0) >= :pect_executions)' ||
      ' UNION ALL ' ||
      'select :end_snap_id, :snap_time_dis, ''DUMMY_STMT_FOR_SUMMARY_STATISTICS'', -1, -1, ' ||
      '-1, '' '', -1, -1, -1, -1, -1, :total_disk_reads total_disk_reads, ' ||
      ':total_buf_gets total_buffer_gets, -1, -1, ''0'', 0, -1, -1 cpu_time, ' ||
      ':time_interval elapsed_time, -1 outline_sid, ' ||
      'NULL outline_category, -1 plan_id, '' '' optimizer_mode, 0 optimizer_cost ' ||
      'from dual';
    OPEN v_stat_cursor_8i FOR v_sql_stmt_8
      USING v_e_snap_time_dis, v_b_snap_id, v_e_snap_id, v_dbid, v_instance_number,
            v_pect_buf_gets, v_pect_disk_reads, v_pect_parse_calls, v_pect_executions,
            v_e_snap_id, v_e_snap_time_dis, v_total_disk_reads, v_total_buf_gets, v_time_interval;
    :6 := v_stat_cursor_8i;
  ELSIF v_db_version < db_version_92 THEN -- 901 case
    v_sql_stmt_90 :=
      'select e.snap_id, :e_snap_time_dis, st.sql_text, st.piece, e.sharable_mem, ' ||
      'e.sorts - nvl(b.sorts,0), e.module, e.loaded_versions, ' ||
      'e.executions - nvl(b.executions,0), e.loads - nvl(b.loads,0), ' ||
      'e.invalidations - nvl(b.invalidations,0), ' ||
      'e.parse_calls - nvl(b.parse_calls,0), ' ||
      'e.disk_reads - nvl(b.disk_reads,0), ' ||
      'e.buffer_gets - nvl(b.buffer_gets,0), ' ||
      'e.rows_processed - nvl(b.rows_processed,0), st.command_type, ' ||
      'RAWTOHEX(e.address), e.hash_value, ' ||
      'e.version_count, ' ||
      'e.cpu_time - nvl(b.cpu_time,0), ' ||
      'e.elapsed_time -  nvl(b.elapsed_time,0), ' ||
      'e.outline_sid, e.outline_category, nvl(pu.plan_hash_value, -1), ' ||
      'pu.optimizer, pu.cost ' ||
      'from perfstat.stats$sql_summary e, perfstat.stats$sql_summary b, perfstat.stats$sqltext st, ' ||
           '(select u.plan_hash_value,max(u.optimizer) optimizer, max(u.cost) cost, s.hash_value,s.text_subset ' ||
            'from perfstat.stats$sql_plan_usage u, perfstat.stats$sql_summary s ' ||
            'where s.snap_id = :e_snap_id and s.dbid = :dbid and s.instance_number = :instance_number and ' ||
                  'u.hash_value(+) = s.hash_value and u.text_subset(+) = s.text_subset ' ||
            'group by s.hash_value, s.text_subset, u.plan_hash_value) pu ' ||
      'where b.snap_id(+) = :b_snap_id ' ||
            ' and b.dbid(+)            = e.dbid ' ||
            ' and b.instance_number(+) = e.instance_number ' ||
            ' and st.piece =0 ' ||
            ' and b.hash_value(+)      = e.hash_value ' ||
            ' and b.address(+)         = e.address ' ||
            ' and b.text_subset(+)     = e.text_subset ' ||
            ' and e.snap_id            = :end_snap_id ' ||
            ' and e.dbid               = :dbid_2 ' ||
            ' and e.instance_number    = :instance_number_2 ' ||
            ' and e.hash_value         = st.hash_value ' ||
            ' and e.text_subset        = st.text_subset ' ||
            ' and e.hash_value         = pu.hash_value ' ||
            ' and e.text_subset        = pu.text_subset ' ||
            ' and e.executions - nvl(b.executions,0) > 0 ' ||
            ' and (e.disk_reads - nvl(b.disk_reads,0) >= :pect_disk_reads ' ||
            ' or e.cpu_time - nvl(b.cpu_time,0) >= :pect_cpu_time ' ||
            ' or e.parse_calls - nvl(b.parse_calls,0) >= :pect_parse_calls ' ||
            ' or e.executions - nvl(b.executions,0) >= :pect_executions)' ||
      ' UNION ALL ' ||
      'select :e_snap_id_3, :e_snap_time_dis_2, ''DUMMY_STMT_FOR_SUMMARY_STATISTICS'', -1, -1, ' ||
      '-1, '' '', -1, -1, -1, -1, -1, :total_disk_reads total_disk_reads, ' ||
      ':total_buf_gets total_buffer_gets, -1, -1, ''0'', 0, -1, -1 cpu_time, ' ||
      ':time_interval elapsed_time, -1 outline_sid, ' ||
      'NULL outline_category, -1 plan_id, '' '' optimizer_mode, 0 optimizer_cost ' ||
      'from dual';

    OPEN v_stat_cursor_9i FOR v_sql_stmt_90
      USING v_e_snap_time_dis, v_e_snap_id, v_dbid, v_instance_number,
            v_b_snap_id, v_e_snap_id, v_dbid, v_instance_number,
            v_pect_disk_reads, v_pect_cpu_time, v_pect_parse_calls, v_pect_executions,
            v_e_snap_id, v_e_snap_time_dis, v_total_disk_reads, v_total_buf_gets, v_time_interval;
    :6 := v_stat_cursor_9i;
  ELSE
    v_sql_stmt_92 :=
      'select e.snap_id, :e_snap_time_dis, st.sql_text, st.piece, e.sharable_mem, ' ||
      'e.sorts - nvl(b.sorts,0), e.module, e.loaded_versions, ' ||
      'e.executions - nvl(b.executions,0), e.loads - nvl(b.loads,0), ' ||
      'e.invalidations - nvl(b.invalidations,0), ' ||
      'e.parse_calls - nvl(b.parse_calls,0), ' ||
      'e.disk_reads - nvl(b.disk_reads,0), ' ||
      'e.buffer_gets - nvl(b.buffer_gets,0), ' ||
      'e.rows_processed - nvl(b.rows_processed,0), st.command_type, ' ||
      'RAWTOHEX(e.address), e.hash_value, ' ||
      'e.version_count, ' ||
      'e.cpu_time - nvl(b.cpu_time,0), ' ||
      'e.elapsed_time -  nvl(b.elapsed_time,0), ' ||
      'e.outline_sid, e.outline_category, nvl(pu.plan_hash_value, -1), ' ||
      'pu.optimizer, pu.cost ' ||
      'from perfstat.stats$sql_summary e, perfstat.stats$sql_summary b, perfstat.stats$sqltext st, ' ||
           '(select u.plan_hash_value,max(u.optimizer) optimizer, max(u.cost) cost, s.hash_value, ' ||
            's.text_subset, max(s.dbid) dbid, max(s.instance_number) instance_number ' ||
            'from perfstat.stats$sql_plan_usage u, perfstat.stats$sql_summary s ' ||
            'where u.snap_id(+) = s.snap_id and u.dbid (+)= s.dbid and u.instance_number (+)= s.instance_number and ' ||
                  's.snap_id = :e_snap_id and s.dbid = :dbid and s.instance_number = :instance_number and ' ||
                  'u.hash_value(+) = s.hash_value and u.text_subset(+) = s.text_subset ' ||
            'group by s.hash_value, s.text_subset, u.plan_hash_value) pu ' ||
      'where b.snap_id(+) = :b_snap_id ' ||
            ' and b.dbid(+)            = e.dbid ' ||
            ' and b.instance_number(+) = e.instance_number ' ||
            ' and st.piece =0 ' ||
            ' and b.hash_value(+)      = e.hash_value ' ||
            ' and b.address(+)         = e.address ' ||
            ' and b.text_subset(+)     = e.text_subset ' ||
            ' and e.snap_id            = :e_snap_id_2 ' ||
            ' and e.dbid               = :dbid_2 ' ||
            ' and e.instance_number    = :instance_number_2 ' ||
            ' and e.hash_value         = st.hash_value ' ||
            ' and e.text_subset        = st.text_subset ' ||
            ' and e.hash_value         = pu.hash_value ' ||
            ' and e.text_subset        = pu.text_subset ' ||
            ' and e.dbid               = pu.dbid ' ||
            ' and e.instance_number    = pu.instance_number ' ||
            ' and e.executions - nvl(b.executions,0) > 0 ' ||
            ' and (e.disk_reads - nvl(b.disk_reads,0) >= :pect_disk_reads ' ||
            ' or e.cpu_time - nvl(b.cpu_time,0) >= :pect_cpu_time ' ||
            ' or e.parse_calls - nvl(b.parse_calls,0) >= :pect_parse_calls ' ||
            ' or e.executions - nvl(b.executions,0) >= :pect_executions)' ||
      ' UNION ALL ' ||
      'select :e_snap_id_3, :e_snap_time_dis_2, ''DUMMY_STMT_FOR_SUMMARY_STATISTICS'', -1, -1, ' ||
      '-1, '' '', -1, -1, -1, -1, -1, :total_disk_reads total_disk_reads, ' ||
      ':total_buf_gets total_buffer_gets, -1, -1, ''0'', 0, -1, -1 cpu_time, ' ||
      ':time_interval elapsed_time, -1 outline_sid, ' ||
      'NULL outline_category, -1 plan_id, '' '' optimizer_mode, 0 optimizer_cost ' ||
      'from dual';

    OPEN v_stat_cursor_9i FOR v_sql_stmt_92
      USING v_e_snap_time_dis, v_e_snap_id, v_dbid, v_instance_number, v_b_snap_id,
            v_e_snap_id, v_dbid, v_instance_number, v_pect_disk_reads,
            v_pect_cpu_time, v_pect_parse_calls, v_pect_executions,
            v_e_snap_id, v_e_snap_time_dis, v_total_disk_reads,
            v_total_buf_gets, v_time_interval;
    :6 := v_stat_cursor_9i;
  END IF;
END;
]]></Property>
			<Property NAME="SQLINPARAM1" SCOPE="USER">PHY_READ_PCT</Property>
			<Property NAME="SQLINPARAM2" SCOPE="USER">LOG_READ_PCT</Property>
			<Property NAME="SQLINPARAM3" SCOPE="USER">CPU_TIME_PCT</Property>
			<Property NAME="SQLINPARAM4" SCOPE="USER">PAR_CALL_PCT</Property>
			<Property NAME="SQLINPARAM5" SCOPE="USER">EXEC_PCT</Property>
			<Property NAME="SQLOUTPARAMPOS" SCOPE="GLOBAL">6</Property>
			<Property NAME="SQLOUTPARAMTYPE" SCOPE="GLOBAL">SQL_CURSOR</Property>
			<Property NAME="MachineName" SCOPE="INSTANCE">MachineName</Property>
			<Property NAME="Port" SCOPE="INSTANCE">Port</Property>
			<Property NAME="SID" SCOPE="INSTANCE">SID</Property>
			<Property NAME="UserName" SCOPE="INSTANCE">UserName</Property>
			<Property NAME="password" SCOPE="INSTANCE">password</Property>
			<Property NAME="Role" SCOPE="INSTANCE" OPTIONAL="TRUE">Role</Property>
		</QueryDescriptor>
	</Metric>
	<!--
  ======================================================================
  == Category:         mgmt_sql_plan
  == Collection Level: Recommended
  == Purpose:          Reporting
  ======================================================================
    -->
	<Metric NAME="mgmt_sql_plan" TYPE="RAW" HELP="NO_HELP">
		<ValidIf>
			<CategoryProp NAME="MCPkg" CHOICES="1;3"/>
			<CategoryProp NAME="VersionCategory" CHOICES="pre8;8i;8iR2;9i;9iR2"/>
		</ValidIf>
		<Display>
			<Label NLSID="mgmt_sql_plan">mgmt_sql_plan</Label>
		</Display>
		<TableDescriptor TABLE_NAME="mgmt_sql_plan" SKIP_COLLTIME_COLUMN="TRUE" SKIP_COLLTIME_PK="TRUE" SKIP_METRIC_COLUMN="TRUE">
			<ColumnDescriptor NAME="snap_id" COLUMN_NAME="snap_id" IS_KEY="TRUE" TYPE="STRING">
				<Display>
					<Label NLSID="mgmt_sql_plan_snap_id">Snap ID</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="collection_timestamp" COLUMN_NAME="collection_timestamp" TYPE="STRING" IS_DATE="TRUE" IS_KEY="FALSE">
				<Display>
					<Label NLSID="mgmt_sql_plan_collection_timestamp">Collection Timestamp</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="planId" COLUMN_NAME="plan_hash_value" IS_KEY="TRUE" TYPE="NUMBER">
				<Display>
					<Label NLSID="mgmt_sql_plan_planId">Plan Hash Value</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="xpOperation" COLUMN_NAME="operation" IS_KEY="FALSE" TYPE="STRING">
				<Display>
					<Label NLSID="mgmt_sql_plan_xpOperation">Explain Plan Operation</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="xpOptions" COLUMN_NAME="options" IS_KEY="FALSE" TYPE="STRING">
				<Display>
					<Label NLSID="mgmt_sql_plan_xpOptions">Explain Plan Options</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="xpObjectNode" COLUMN_NAME="object_node" IS_KEY="FALSE" TYPE="STRING">
				<Display>
					<Label NLSID="mgmt_sql_plan_xpObjectNode">Explain Plan Object Node</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="xpObjectOwner" COLUMN_NAME="object_owner" IS_KEY="FALSE" TYPE="STRING">
				<Display>
					<Label NLSID="mgmt_sql_plan_xpObjectOwner">Explain Plan Object Owner</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="xpObjectName" COLUMN_NAME="object_name" IS_KEY="FALSE" TYPE="STRING">
				<Display>
					<Label NLSID="mgmt_sql_plan_xpObjectName">Explain Plan Object Name</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="xpOptimizer" COLUMN_NAME="optimizer" IS_KEY="FALSE" TYPE="STRING">
				<Display>
					<Label NLSID="mgmt_sql_plan_xpOptimizer">Explain Plan Optimizer Mode</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="xpId" COLUMN_NAME="id" IS_KEY="TRUE" TYPE="NUMBER">
				<Display>
					<Label NLSID="mgmt_sql_plan_xpId">Explain Plan Id</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="xpParentId" COLUMN_NAME="parent_id" IS_KEY="FALSE" TYPE="NUMBER">
				<Display>
					<Label NLSID="mgmt_sql_plan_xpParentId">Explain Plan Parent Id</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="xpPosition" COLUMN_NAME="position" IS_KEY="FALSE" TYPE="NUMBER">
				<Display>
					<Label NLSID="mgmt_sql_plan_xpPosition">Explain Plan Position</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="xpCost" COLUMN_NAME="cost" IS_KEY="FALSE" TYPE="NUMBER">
				<Display>
					<Label NLSID="mgmt_sql_plan_xpCost">Explain Plan Cost</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="xpCardinality" COLUMN_NAME="cardinality" IS_KEY="FALSE" TYPE="NUMBER">
				<Display>
					<Label NLSID="mgmt_sql_plan_xpCardinality">Explain Plan Cardinality</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="xpBytes" COLUMN_NAME="bytes" IS_KEY="FALSE" TYPE="NUMBER">
				<Display>
					<Label NLSID="mgmt_sql_plan_xpBytes">Explain Plan Bytes</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="xpOtherTag" COLUMN_NAME="other_tag" IS_KEY="FALSE" TYPE="STRING">
				<Display>
					<Label NLSID="mgmt_sql_plan_xpOtherTag">Explain Plan Other Tag</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="xpPartitionStart" COLUMN_NAME="partition_start" IS_KEY="FALSE" TYPE="STRING">
				<Display>
					<Label NLSID="mgmt_sql_plan_xpPartitionStart">Explain Plan Partition Start</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="xpPartitionStop" COLUMN_NAME="partition_stop" IS_KEY="FALSE" TYPE="STRING">
				<Display>
					<Label NLSID="mgmt_sql_plan_xpPartitionStop">Explain Plan Partition Stop</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="xpPartitionId" COLUMN_NAME="partition_id" IS_KEY="FALSE" TYPE="NUMBER">
				<Display>
					<Label NLSID="mgmt_sql_plan_xpPartitionId">Explain Plan Partition Id</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="xpOther" COLUMN_NAME="other" IS_KEY="FALSE" TYPE="STRING">
				<Display>
					<Label NLSID="mgmt_sql_plan_xpOther">Explain Plan Other</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="xpDistribution" COLUMN_NAME="distribution" IS_KEY="FALSE" TYPE="STRING">
				<Display>
					<Label NLSID="mgmt_sql_plan_xpDistribution">Explain Plan Distribution</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="xpCPUCost" COLUMN_NAME="cpu_cost" IS_KEY="FALSE" TYPE="NUMBER">
				<Display>
					<Label NLSID="mgmt_sql_plan_xpCPUCost">Explain Plan CPU Cost</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="xpIOCost" COLUMN_NAME="io_cost" IS_KEY="FALSE" TYPE="NUMBER">
				<Display>
					<Label NLSID="mgmt_sql_plan_xpIOCost">Explain Plan I-O Cost</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="xpTempSpace" COLUMN_NAME="temp_space" IS_KEY="FALSE" TYPE="NUMBER">
				<Display>
					<Label NLSID="mgmt_sql_plan_xpTempSpace">Explain Plan Temporary Space</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="xpObject#" COLUMN_NAME="object_number" IS_KEY="FALSE" TYPE="NUMBER">
				<Display>
					<Label NLSID="mgmt_sql_plan_xpObject_num">Explain Plan Object #</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="xpDepth" COLUMN_NAME="depth" IS_KEY="FALSE" TYPE="NUMBER">
				<Display>
					<Label NLSID="mgmt_sql_plan_xpDepth">Explain Plan Depth</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="address" COLUMN_NAME="address" IS_KEY="TRUE" TYPE="STRING">
				<Display>
					<Label NLSID="mgmt_sql_plan_address">Address</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="hashValue" COLUMN_NAME="hash_value" IS_KEY="TRUE" TYPE="NUMBER">
				<Display>
					<Label NLSID="mgmt_sql_plan_hashValue">Hash Value</Label>
				</Display>
			</ColumnDescriptor>
		</TableDescriptor>
		<QueryDescriptor FETCHLET_ID="SQL">
			<Property NAME="STATEMENT" SCOPE="GLOBAL"><![CDATA[
DECLARE
  TYPE                t_plan_cursor_type IS REF CURSOR;
  v_plan_cursor_8i    t_plan_cursor_type;
  v_plan_cursor_9i    t_plan_cursor_type;
  v_db_version        VARCHAR2(10);
  db_version_9i       CONSTANT VARCHAR2(10) := '09.0.0.0.0';
  db_version_92       CONSTANT VARCHAR2(10) := '09.2.0.0.0';
  v_dbid              NUMBER := 0;
  v_instance_number   NUMBER := 0;
  c_interval          NUMBER := 24;
  v_snap_id           NUMBER;
  v_snap_time         DATE;
  v_snap_level        NUMBER;
  v_b_snap_id         NUMBER := -1;
  v_b_snap_time       DATE;
  v_b_snap_level      NUMBER := -1;
  v_e_snap_id         NUMBER := -1;
  v_e_snap_time       DATE;
  v_e_snap_level      NUMBER := -1;
  v_current_interval  NUMBER := -1;
  v_total_disk_reads  NUMBER := -1;
  v_total_buf_gets    NUMBER := -1;
  v_sql_stmt_9        varchar2(3500);
  v_e_total_disk_reads  NUMBER := -1;
  v_e_total_buf_gets    NUMBER := -1;
  v_b_total_disk_reads  NUMBER := 0;
  v_b_total_buf_gets    NUMBER := 0;
  v_pect_disk_reads NUMBER := -1;
  v_pect_buf_gets   NUMBER := -1;
  v_snap_time_dis   varchar2(50);
  v_e_snap_time_dis   varchar2(50);
  v_b_cpu_time        NUMBER := -1;
  v_e_cpu_time        NUMBER := -1;
  v_b_parse_calls     NUMBER := -1;
  v_e_parse_calls     NUMBER := -1;
  v_b_executions      NUMBER := -1;
  v_e_executions      NUMBER := -1;
  v_pect_cpu_time     NUMBER := -1;
  v_pect_parse_calls  NUMBER := -1;
  v_pect_executions   NUMBER := -1;
  c_phy_read_pct NUMBER := :1;
  c_log_read_pct NUMBER := :2;
  c_cpu_time_pct NUMBER := :3;
  c_par_call_pct NUMBER := :4;
  c_exec_pct NUMBER := :5;
  v_startup_time DATE;
  v_e_startup_time DATE;

  CURSOR get_snap_ids IS
    SELECT snap_id, snap_time, to_char(snap_time, 'YYYY-MM-DD HH24:MI:SS'), snap_level, startup_time
      FROM perfstat.stats$snapshot
      WHERE dbid = v_dbid and instance_number = v_instance_number order by snap_time desc;

  CURSOR get_stat_total_value (p_name IN VARCHAR2,
                               p_snap_id IN NUMBER,
                               p_dbid IN NUMBER,
                               p_instance_number IN NUMBER) IS
    SELECT value
    FROM perfstat.stats$sysstat
    WHERE name = p_name AND snap_id = p_snap_id AND
          dbid = p_dbid AND instance_number = p_instance_number;

BEGIN
  -- --------------------------
  -- Get database version
  -- --------------------------
  SELECT LPAD(version, 10, '0')
    INTO v_db_version
    FROM v$instance;

  IF v_db_version < db_version_9i THEN
    OPEN v_plan_cursor_8i FOR
      SELECT 0 snap_id, to_char(sysdate, 'YYYY-MM-DD HH24:MI:SS'),
             0 plan_hash_value, NULL operation, NULL options, NULL object_node,
             NULL object_owner, NULL object_name, NULL optimizer, 0 id, -1 parent_id,
             0 position, 0 cost, 0 cardinality, 0 bytes, NULL other_tag,
             NULL partition_start, NULL partition_stop, 0 partition_id,
             NULL other, NULL distribution, 0 cpu_cost, 0 io_cost,
             0 temp_space, 0 object#, 0 depth, '0', 0
      FROM dual
      WHERE 0 = 1;
    :6 := v_plan_cursor_8i;
  ELSE
    -- ------------------------------
    -- Find the database ID and instance number
    -- ------------------------------
    SELECT d.dbid, i.instance_number
      INTO v_dbid, v_instance_number
      FROM v$database d, v$instance i;

    -- ------------------------------
    -- Pick the latest snapshot and another snapshot where
    -- the interval between them is closest to 24 Hrs.
    -- ------------------------------

    OPEN get_snap_ids;
    LOOP
      FETCH get_snap_ids INTO v_snap_id, v_snap_time, v_snap_time_dis, v_snap_level, v_startup_time;
      EXIT WHEN get_snap_ids%NOTFOUND;
      IF v_e_snap_id = -1 THEN
        v_e_snap_id := v_snap_id;
        v_e_snap_time := v_snap_time;
        v_e_snap_time_dis := v_snap_time_dis;
        v_e_snap_level := v_snap_level;
        v_e_startup_time := v_startup_time;
      ELSIF v_b_snap_id = -1 OR
            ABS((v_e_snap_time - v_snap_time) * 24 - c_interval) <
            ABS(v_current_interval - c_interval) THEN
        v_b_snap_id := v_snap_id;
        v_b_snap_time := v_snap_time;
        v_b_snap_level := v_snap_level;
        v_current_interval := (v_e_snap_time - v_b_snap_time) * 24;
        -- dbms_output.put_line('DB v_current_interval : ' || v_current_interval);
      END IF;
    END LOOP;
    CLOSE get_snap_ids;

    -- Check if the instance rebounced between two snapshots or there is only one snapshot available
    IF v_b_snap_time IS NULL OR v_e_startup_time > v_b_snap_time THEN
      v_b_snap_id := -1;
      v_b_snap_time := v_e_startup_time;
    END IF;

  IF v_e_snap_id <> -1 THEN
    IF v_db_version >= db_version_9i THEN
      OPEN get_stat_total_value('CPU used when call started', v_e_snap_id, v_dbid, v_instance_number);
      FETCH get_stat_total_value INTO v_e_cpu_time;
      CLOSE get_stat_total_value;
    END IF;

    OPEN get_stat_total_value('session logical reads', v_e_snap_id, v_dbid, v_instance_number);
    FETCH get_stat_total_value INTO v_e_total_buf_gets;
    CLOSE get_stat_total_value;

    OPEN get_stat_total_value('physical reads', v_e_snap_id, v_dbid, v_instance_number);
    FETCH get_stat_total_value INTO v_e_total_disk_reads;
    CLOSE get_stat_total_value;

    OPEN get_stat_total_value('parse count (total)', v_e_snap_id, v_dbid, v_instance_number);
    FETCH get_stat_total_value INTO v_e_parse_calls;
    CLOSE get_stat_total_value;

    OPEN get_stat_total_value('execute count', v_e_snap_id, v_dbid, v_instance_number);
    FETCH get_stat_total_value INTO v_e_executions;
    CLOSE get_stat_total_value;
  END IF;

  IF v_b_snap_id <> -1 THEN
    IF v_db_version >= db_version_9i THEN
      OPEN get_stat_total_value('CPU used when call started', v_b_snap_id, v_dbid, v_instance_number);
      FETCH get_stat_total_value INTO v_b_cpu_time;
      CLOSE get_stat_total_value;
    END IF;

    OPEN get_stat_total_value('session logical reads', v_b_snap_id, v_dbid, v_instance_number);
    FETCH get_stat_total_value INTO v_b_total_buf_gets;
    CLOSE get_stat_total_value;

    OPEN get_stat_total_value('physical reads', v_b_snap_id, v_dbid, v_instance_number);
    FETCH get_stat_total_value INTO v_b_total_disk_reads;
    CLOSE get_stat_total_value;

    OPEN get_stat_total_value('parse count (total)', v_b_snap_id, v_dbid, v_instance_number);
    FETCH get_stat_total_value INTO v_b_parse_calls;
    CLOSE get_stat_total_value;

    OPEN get_stat_total_value('execute count', v_b_snap_id, v_dbid, v_instance_number);
    FETCH get_stat_total_value INTO v_b_executions;
    CLOSE get_stat_total_value;
  END IF;

  v_total_disk_reads := v_e_total_disk_reads - v_b_total_disk_reads;
  v_total_buf_gets := v_e_total_buf_gets - v_b_total_buf_gets;

  v_pect_disk_reads := c_phy_read_pct * v_total_disk_reads;
  v_pect_buf_gets   := c_log_read_pct * v_total_buf_gets;
  v_pect_cpu_time   := c_cpu_time_pct * (v_e_cpu_time - v_b_cpu_time)*10000;
  v_pect_parse_calls := c_par_call_pct * (v_e_parse_calls - v_b_parse_calls);
  v_pect_executions := c_exec_pct * (v_e_executions - v_b_executions);

    IF v_db_version < db_version_92 THEN -- 901 case
      v_sql_stmt_9 :=
        'select :e_snap_id, :e_snap_time_str, ' ||
               'nvl(sp.plan_hash_value, -1), sp.operation, sp.options, sp.object_node, ' ||
               'sp.object_owner, sp.object_name, sp.optimizer, sp.id, sp.parent_id, ' ||
               'sp.position, sp.cost, sp.cardinality, sp.bytes, sp.other_tag, ' ||
               'sp.partition_start, sp.partition_stop, sp.partition_id, ' ||
               'sp.other, sp.distribution, sp.cpu_cost, sp.io_cost, ' ||
               'sp.temp_space, sp.object#, sp.depth, plans.address, plans.hash_value ' ||
        'from perfstat.stats$sql_plan sp, ' ||
               '(SELECT u.plan_hash_value, MAX(u.cost) cost, MAX(s.address) address, u.hash_value ' ||
                'FROM perfstat.stats$sql_plan_usage u, perfstat.stats$sql_summary s, perfstat.stats$sql_summary b ' ||
                'WHERE s.snap_id = :e_snap_id ' ||
                      ' and s.dbid = :dbid ' ||
                      ' and s.instance_number = :instance_number ' ||
                      ' and u.hash_value = s.hash_value and u.text_subset = s.text_subset ' ||
                      ' and b.snap_id(+) = :b_snap_id ' ||
                      ' and b.dbid(+)            = s.dbid ' ||
                      ' and b.instance_number(+) = s.instance_number ' ||
                      ' and b.hash_value(+)      = s.hash_value ' ||
                      ' and b.address(+)         = s.address ' ||
                      ' and b.text_subset(+)     = s.text_subset ' ||
                      ' and s.executions - nvl(b.executions,0) > 0 ' ||
                      ' and (s.disk_reads - nvl(b.disk_reads,0) >= :pect_disk_reads ' ||
                      ' or s.cpu_time - nvl(b.cpu_time,0) >= :pect_cpu_time ' ||
                      ' or s.parse_calls - nvl(b.parse_calls,0) >= :pect_parse_calls ' ||
                      ' or s.executions - nvl(b.executions,0) >= :pect_executions)' ||
                ' GROUP BY u.plan_hash_value, u.text_subset, u.hash_value) plans ' ||
        'where plans.plan_hash_value = sp.plan_hash_value';

        OPEN v_plan_cursor_9i FOR v_sql_stmt_9
          USING v_e_snap_id, v_e_snap_time_dis, v_e_snap_id, v_dbid, v_instance_number,
                v_b_snap_id, v_pect_disk_reads, v_pect_cpu_time, v_pect_parse_calls,
                v_pect_executions;
        :6 := v_plan_cursor_9i;
    ELSE -- 92 case
      v_sql_stmt_9 :=
        'select :e_snap_id, :e_snap_time_str, ' ||
               'nvl(sp.plan_hash_value, -1), sp.operation, sp.options, sp.object_node, ' ||
               'sp.object_owner, sp.object_name, sp.optimizer, sp.id, sp.parent_id, ' ||
               'sp.position, sp.cost, sp.cardinality, sp.bytes, sp.other_tag, ' ||
               'sp.partition_start, sp.partition_stop, sp.partition_id, ' ||
               'sp.other, sp.distribution, sp.cpu_cost, sp.io_cost, ' ||
               'sp.temp_space, sp.object#, sp.depth, plans.address, plans.hash_value ' ||
        'from perfstat.stats$sql_plan sp, ' ||
               '(SELECT u.plan_hash_value, MAX(u.cost) cost, MAX(s.address) address, u.hash_value, MAX(s.snap_id) snap_id ' ||
                'FROM perfstat.stats$sql_plan_usage u, perfstat.stats$sql_summary s, perfstat.stats$sql_summary b ' ||
                'WHERE u.dbid = :dbid ' ||
                      ' AND u.snap_id = :e_snap_id_2 ' ||
                      ' AND u.instance_number = :instance_number ' ||
                      ' and s.snap_id = u.snap_id ' ||
                      ' and s.dbid = u.dbid ' ||
                      ' and s.instance_number = u.instance_number ' ||
                      ' and u.hash_value = s.hash_value and u.text_subset = s.text_subset ' ||
                      ' and b.snap_id(+) = :b_snap_id ' ||
                      ' and b.dbid(+)            = s.dbid ' ||
                      ' and b.instance_number(+) = s.instance_number ' ||
                      ' and b.hash_value(+)      = s.hash_value ' ||
                      ' and b.address(+)         = s.address ' ||
                      ' and b.text_subset(+)     = s.text_subset ' ||
                      ' and s.executions - nvl(b.executions,0) > 0 ' ||
                      ' and (s.disk_reads - nvl(b.disk_reads,0) >= :pect_disk_reads ' ||
                      ' or s.cpu_time - nvl(b.cpu_time,0) >= :pect_cpu_time ' ||
                      ' or s.parse_calls - nvl(b.parse_calls,0) >= :pect_parse_calls ' ||
                      ' or s.executions - nvl(b.executions,0) >= :pect_executions)' ||
                ' GROUP BY u.dbid, u.snap_id, u.instance_number, u.plan_hash_value, u.text_subset, u.hash_value) plans ' ||
        'where plans.plan_hash_value = sp.plan_hash_value';

        OPEN v_plan_cursor_9i FOR v_sql_stmt_9
          USING v_e_snap_id, v_e_snap_time_dis, v_dbid, v_e_snap_id, v_instance_number,
                v_b_snap_id, v_pect_disk_reads, v_pect_cpu_time, v_pect_parse_calls,
                v_pect_executions;
        :6 := v_plan_cursor_9i;
    END IF;
  END IF;
END;
]]></Property>
			<Property NAME="SQLINPARAM1" SCOPE="USER">PHY_READ_PCT</Property>
			<Property NAME="SQLINPARAM2" SCOPE="USER">LOG_READ_PCT</Property>
			<Property NAME="SQLINPARAM3" SCOPE="USER">CPU_TIME_PCT</Property>
			<Property NAME="SQLINPARAM4" SCOPE="USER">PAR_CALL_PCT</Property>
			<Property NAME="SQLINPARAM5" SCOPE="USER">EXEC_PCT</Property>
			<Property NAME="SQLOUTPARAMPOS" SCOPE="GLOBAL">6</Property>
			<Property NAME="SQLOUTPARAMTYPE" SCOPE="GLOBAL">SQL_CURSOR</Property>
			<Property NAME="MachineName" SCOPE="INSTANCE">MachineName</Property>
			<Property NAME="Port" SCOPE="INSTANCE">Port</Property>
			<Property NAME="SID" SCOPE="INSTANCE">SID</Property>
			<Property NAME="UserName" SCOPE="INSTANCE">UserName</Property>
			<Property NAME="password" SCOPE="INSTANCE">password</Property>
			<Property NAME="Role" SCOPE="INSTANCE" OPTIONAL="TRUE">Role</Property>
		</QueryDescriptor>
	</Metric>
    <!--
  ======================================================================
  == Category:         Suspended Session
  == Collection Level: Recommended
  == Purpose:          Alerts
  ======================================================================
    -->
    <Metric NAME="suspended_session" TYPE="TABLE">
        <ValidIf>
            <CategoryProp NAME="VersionCategory" CHOICES="9i;9iR2"/>
            <CategoryProp NAME="MetricScope" CHOICES="DB"/>
        </ValidIf>
        <Display>
            <Label NLSID="suspended_session">Suspended Session</Label>
        </Display>
        <TableDescriptor>
            <ColumnDescriptor NAME="count" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="suspended_session_count">Suspended Session Count</Label>
                </Display>
            </ColumnDescriptor>
        </TableDescriptor>
        <QueryDescriptor FETCHLET_ID="SQL">
            <Property NAME="STATEMENT" SCOPE="GLOBAL"><![CDATA[
SELECT COUNT(*)
  FROM v$resumable
 WHERE status = 'SUSPENDED'
   AND enabled = 'YES'
]]></Property>
            <Property NAME="MachineName" SCOPE="INSTANCE">MachineName</Property>
            <Property NAME="Port" SCOPE="INSTANCE">Port</Property>
            <Property NAME="SID" SCOPE="INSTANCE">SID</Property>
            <Property NAME="UserName" SCOPE="INSTANCE">UserName</Property>
            <Property NAME="password" SCOPE="INSTANCE">password</Property>
            <Property NAME="Role" SCOPE="INSTANCE" OPTIONAL="TRUE">Role</Property>
        </QueryDescriptor>
    </Metric>
    <!--
  ======================================================================
  == Category:         Wait by Session Count
  == Collection Level: Minimum
  == Purpose:          Alerts, Trending
  ======================================================================
    -->
 	<Metric NAME="wait_sess" TYPE="TABLE">
		<ValidIf>
			<CategoryProp NAME="VersionCategory" CHOICES="pre8;8i;8iR2;9i;9iR2"/>
		</ValidIf>
		<Display>
			<Label NLSID="wait_sess">Wait by Session Count</Label>
		</Display>
		<TableDescriptor>
			<ColumnDescriptor NAME="event" TYPE="STRING" IS_KEY="TRUE">
				<Display>
					<Label NLSID="wait_sess_event">Wait Event</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="count" TYPE="NUMBER" IS_KEY="FALSE">
				<Display>
					<Label NLSID="wait_sess_count">Session Waiting for Event Count</Label>
				</Display>
			</ColumnDescriptor>
		</TableDescriptor>
		<QueryDescriptor FETCHLET_ID="SQL">
			<Property NAME="STATEMENT" SCOPE="GLOBAL"><![CDATA[
SELECT event, count(1)
  FROM v$session_wait
 WHERE wait_time = 0
   AND event NOT IN
      ('ARCH random i/o',
       'ARCH sequential i/o',
       'KXFX: execution message dequeue - Slaves',
       'LGWR random i/o',
       'LGWR sequential i/o',
       'LGWR wait for redo copy',
       'Null event',
       'PL/SQL lock timer',
       'PX Deq Credit: need buffer',
       'PX Deq: Execute Reply',
       'PX Deq: Execution Msg',
       'PX Deq: Index Merge Close',
       'PX Deq: Index Merge Execute',
       'PX Deq: Index Merge Reply',
       'PX Deq: Join ACK',
       'PX Deq: Msg Fragment',
       'PX Deq: Par Recov Change Vector',
       'PX Deq: Par Recov Execute',
       'PX Deq: Par Recov Reply',
       'PX Deq: Parse Reply',
       'PX Deq: Table Q Normal',
       'PX Deq: Table Q Sample',
       'PX Deq: Txn Recovery Reply',
       'PX Deq: Txn Recovery Start',
       'PX Deque wait',
       'PX Idle Wait',
       'Queue Monitor Shutdown Wait',
       'Queue Monitor Slave Wait',
       'Queue Monitor Wait',
       'RFS random i/o',
       'RFS sequential i/o',
       'RFS write',
       'SQL*Net message from client',
       'SQL*Net message from dblink',
       'STREAMS apply coord waiting for slave message',
       'STREAMS apply coord waiting for some work to finish',
       'STREAMS apply slave idle wait',
       'STREAMS capture process filter callback wait for ruleset',
       'STREAMS fetch slave waiting for txns',
       'WMON goes to sleep',
       'async disk IO',
       'client message',
       'control file parallel write',
       'control file sequential read',
       'control file single write',
       'db file single write',
       'db file parallel write',
       'dispatcher timer',
       'gcs log flush sync',
       'gcs remote message',
       'ges reconfiguration to start',
       'ges remote message',
       'io done',
       'jobq slave wait',
       'lock manager wait for remote message',
       'log file parallel write',
       'log file sequential read',
       'log file single write',
       'parallel dequeue wait',
       'parallel recovery coordinator waits for cleanup of slaves',
       'parallel query dequeue',
       'parallel query idle wait - Slaves',
       'pipe get',
       'pmon timer',
       'queue messages',
       'rdbms ipc message',
       'recovery read',
       'single-task message',
       'slave wait',
       'smon timer',
       'statement suspended, wait error to be cleared',
       'unread message',
       'virtual circuit',
       'virtual circuit status',
       'wait for activate message',
       'wait for transaction',
       'wait for unread message on broadcast channel',
       'wait for unread message on multiple broadcast channels',
       'wakeup event for builder',
       'wakeup event for preparer',
       'wakeup event for reader',
       'wakeup time manager')
 GROUP BY event
]]></Property>
			<Property NAME="MachineName" SCOPE="INSTANCE">MachineName</Property>
			<Property NAME="Port" SCOPE="INSTANCE">Port</Property>
			<Property NAME="SID" SCOPE="INSTANCE">SID</Property>
			<Property NAME="UserName" SCOPE="INSTANCE">UserName</Property>
			<Property NAME="password" SCOPE="INSTANCE">password</Property>
			<Property NAME="Role" SCOPE="INSTANCE" OPTIONAL="TRUE">Role</Property>
		</QueryDescriptor>
	</Metric>
    <!--
  ======================================================================
  == Category:         System Sessions Waiting
  == Collection Level: Minimum
  == Purpose:          Alerts, Trending
  ======================================================================
    -->
	<Metric NAME="sessions_in_wait" TYPE="TABLE">
		<ValidIf>
			<CategoryProp NAME="VersionCategory" CHOICES="pre8;8i;8iR2;9i;9iR2"/>
		</ValidIf>
		<Display>
			<Label NLSID="sessions_in_wait">System Sessions Waiting</Label>
		</Display>
		<TableDescriptor>
			<ColumnDescriptor NAME="total_count" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="sessions_in_wait_total_count">Waiting Session Count</Label>
					<ShortName NLSID="sessions_in_wait_total_count_short">Waiting Sessions</ShortName>
				</Display>
			</ColumnDescriptor>
		</TableDescriptor>
		<ExecutionDescriptor>
			<GetTable NAME="sessions_waiting_per_event" METRIC_NAME="wait_sess" USE_CACHE="TRUE"/>
			<GroupBy NAME="all_sessions_waiting" FROM_TABLE="sessions_waiting_per_event">
				<AggregateColumn NAME="total_count" COLUMN_NAME="count" OPERATOR="SUM"/>
			</GroupBy>
		</ExecutionDescriptor>
	</Metric>
       <!--
  ======================================================================
  == Category:         RAC Global Cache Traffic per instance
  == Collection Level: Minimum
  == Purpose:          Alerts ( Only apply for RAC Instances)
  ======================================================================
    -->
    <!-- Cluster database specific metrics -->
    <Metric NAME="rac_global_cache" TYPE="TABLE">
        <ValidIf>
            <CategoryProp NAME="VersionCategory" CHOICES="9i;9iR2"/>
            <CategoryProp NAME="MetricScope" CHOICES="RACINST"/>
        </ValidIf>
        <Display>
            <Label NLSID="global_cache">Global Cache Statistics</Label>
        </Display>
        <TableDescriptor>
            <ColumnDescriptor NAME="lost" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="global_cache_blocks_lost">Global Cache Blocks Lost</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="corrupt" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="global_cache_blocks_corrupt">Global Cache Blocks Corrupt</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="convert_time" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
                <Display>
                    <Label NLSID="global_cache_convert_time">Global Cache Convert Time</Label>
                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="converts" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
                <Display>
                    <Label NLSID="global_cache_converts">Global Cache Converts</Label>
                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="cr_receive_time" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
                <Display>
                    <Label NLSID="global_cache_cr_receive_time">Global Cache CR Receive Time</Label>
                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="cr_receives" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
                <Display>
                    <Label NLSID="global_cache_cr_receives">Global Cache CR Receives</Label>
                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="current_receive_time" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
                <Display>
                    <Label NLSID="global_cache_current_receive_time">Global Cache Current Receive Time</Label>
                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="current_receives" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
                <Display>
                    <Label NLSID="global_cache_current_receives">Global Cache Current Receives</Label>
                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="get_time" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
                <Display>
                    <Label NLSID="global_cache_get_time">Global Cache Get Time</Label>
                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="gets" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
                <Display>
                    <Label NLSID="global_cache_gets">Global Cache Gets</Label>
                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="converts_cs" TYPE="NUMBER" IS_KEY="FALSE" COMPUTE_EXPR="(convert_time - _convert_time)/(converts - _converts)">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="global_cache_converts_cs">Global Cache Average Convert Time (centi-seconds)</Label>
                    <ShortName NLSID="global_cache_converts_cs_sht">GC Average Convert Time (cs)</ShortName>
                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="cr_request_cs" TYPE="NUMBER" IS_KEY="FALSE" COMPUTE_EXPR="(cr_receive_time - _cr_receive_time)/(cr_receives - _cr_receives)">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="global_cache_cr_request_cs">Global Cache Average CR Block Request Time (centi-seconds)</Label>
                    <ShortName NLSID="global_cache_cr_request_cs_sht">GC Average CR Block Get Time (cs)</ShortName>
                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="currentgets_cs" TYPE="NUMBER" IS_KEY="FALSE" COMPUTE_EXPR="(current_receive_time - _current_receive_time)/(current_receives - _current_receives)">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="global_cache_current_request_cs">Global Cache Average Current Block Request Time (centi-seconds)</Label>
                    <ShortName NLSID="global_cache_current_request_cs_sht">GC Average Current Block Get Time (cs)</ShortName>
                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="gets_cs" TYPE="NUMBER" IS_KEY="FALSE" COMPUTE_EXPR="(get_time - _get_time)/(gets - _gets)">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="global_cache_gets_cs">Global Cache Average Get Time (centi-seconds)</Label>
                    <ShortName NLSID="global_cache_gets_cs_sht">GC Average Get Time (cs)</ShortName>
                </Display>
            </ColumnDescriptor>
        </TableDescriptor>
        <QueryDescriptor FETCHLET_ID="SQL">
            <Property NAME="STATEMENT" SCOPE="GLOBAL"><![CDATA[
   SELECT SUM(DECODE(name, 'global cache blocks lost', value, 0)) lost,
   SUM(DECODE(name, 'global cache blocks corrupt', value, 0)) corrupt,
   SUM(DECODE(name, 'global cache convert time', value, 0)) convert_time,
   SUM(DECODE(name, 'global cache converts', value, 0)) converts,
   SUM(DECODE(name, 'global cache cr block receive time', value, 0)) cr_receive_time,
   SUM(DECODE(name, 'global cache cr blocks received', value, 0)) cr_receives,
   SUM(DECODE(name, 'global cache current block receive time', value, 0)) current_receive_time,
   SUM(DECODE(name, 'global cache current blocks received', value, 0)) current_receives,
   SUM(DECODE(name, 'global cache get time', value, 0)) get_time,
   SUM(DECODE(name, 'global cache gets', value, 0)) gets
   from v$sysstat WHERE name IN ('global cache blocks lost', 'global cache blocks corrupt',
   'global cache convert time', 'global cache converts',
   'global cache cr block receive time', 'global cache cr blocks received',
   'global cache current block receive time', 'global cache current blocks received',
   'global cache get time', 'global cache gets')
      ]]></Property>
            <Property NAME="MachineName" SCOPE="INSTANCE">MachineName</Property>
            <Property NAME="Port" SCOPE="INSTANCE">Port</Property>
            <Property NAME="SID" SCOPE="INSTANCE">SID</Property>
            <Property NAME="UserName" SCOPE="INSTANCE">UserName</Property>
            <Property NAME="password" SCOPE="INSTANCE">password</Property>
            <Property NAME="Role" SCOPE="INSTANCE" OPTIONAL="TRUE">Role</Property>
        </QueryDescriptor>
    </Metric>
    <!--
 ======================================================================
  == Category:         RAC Global Cache Traffic per instance ( Server-generated alert )
  == Collection Level: Minimum
  == Purpose:          Alerts ( Only apply for RAC Instances)
  ======================================================================
    -->
    <!-- Cluster database specific metrics -->
    <Metric NAME="rac_global_cache" TYPE="TABLE">
        <ValidIf>
            <CategoryProp NAME="VersionCategory" CHOICES="10gR1;10gR2;10gR203;11gR1;11gR2"/>
            <CategoryProp NAME="MetricScope" CHOICES="RACINST"/>
        </ValidIf>
        <Display>
            <Label NLSID="global_cache">Global Cache Statistics</Label>
        </Display>
        <TableDescriptor>
             <ColumnDescriptor NAME="time" TYPE="STRING" IS_TIMESTAMP="TRUE" TRANSIENT="TRUE" HELP="NO_HELP">
                <Display>
                    <Label NLSID="time_series_time">Time</Label>
                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="corrupt" TYPE="NUMBER" STATELESS_ALERTS="TRUE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="global_cache_blocks_corrupt">Global Cache Blocks Corrupt</Label>
                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="lost" TYPE="NUMBER" STATELESS_ALERTS="TRUE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="global_cache_blocks_lost">Global Cache Blocks Lost</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="cr_request_cs" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="global_cache_cr_request_cs">Global Cache Average CR Block Request Time (centi-seconds)</Label>
                    <ShortName NLSID="global_cache_cr_request_cs_sht">GC Average CR Block Get Time (cs)</ShortName>
                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="currentgets_cs" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="global_cache_current_request_cs">Global Cache Average Current Block Request Time (centi-seconds)</Label>
                    <ShortName NLSID="global_cache_current_request_cs_sht">GC Average Current Block Get Time (cs)</ShortName>
                </Display>
            </ColumnDescriptor>
        </TableDescriptor>
        <QueryDescriptor FETCHLET_ID="SQL">
            <Property NAME="STATEMENT" SCOPE="GLOBAL"><![CDATA[
               SELECT /*+ ORDERED USE_MERGE(m) */
                 TO_CHAR(CAST(m.end_time AS TIMESTAMP) AT TIME ZONE 'GMT',
                        'YYYY-MM-DD HH24:MI:SS TZD'),
               SUM(CASE WHEN a.internal_metric_name = 'corrupt'
                        THEN m.value ELSE 0 END) corrupt,
               SUM(CASE WHEN a.internal_metric_name = 'lost'
                        THEN m.value ELSE 0 END) lost,
               SUM(CASE WHEN a.internal_metric_name = 'cr_request_cs'
                        THEN m.value ELSE 0 END) cr_request_cs,
                SUM(CASE WHEN a.internal_metric_name = 'currentgets_cs'
                        THEN m.value ELSE 0 END) currentgets_cs
                            FROM v$alert_types a, v$threshold_types t, v$sysmetric m
         WHERE a.internal_metric_category = 'rac_global_cache'
           AND a.reason_id = t.alert_reason_id
           AND t.metrics_id = m.metric_id
           AND m.group_id = 2
         AND :1 != 'BASIC'
         GROUP BY m.end_time
         ORDER BY m.end_time ASC
      ]]></Property>
            <Property NAME="SQLINPARAM1" SCOPE="INSTANCE">StatisticsLevel</Property>
            <Property NAME="MachineName" SCOPE="INSTANCE">MachineName</Property>
            <Property NAME="Port" SCOPE="INSTANCE">Port</Property>
            <Property NAME="SID" SCOPE="INSTANCE">SID</Property>
            <Property NAME="UserName" SCOPE="INSTANCE">UserName</Property>
            <Property NAME="password" SCOPE="INSTANCE">password</Property>
            <Property NAME="Role" SCOPE="INSTANCE" OPTIONAL="TRUE">Role</Property>
        </QueryDescriptor>
        <PushDescriptor RECVLET_ID="AQMetrics">
            <Property NAME="QueueName" SCOPE="GLOBAL">ALERT_QUE</Property>
            <Property NAME="MachineName" SCOPE="INSTANCE">MachineName</Property>
            <Property NAME="Port" SCOPE="INSTANCE">Port</Property>
            <Property NAME="SID" SCOPE="INSTANCE">SID</Property>
            <Property NAME="UserName" SCOPE="INSTANCE">UserName</Property>
            <Property NAME="password" SCOPE="INSTANCE">password</Property>
            <Property NAME="Role" SCOPE="INSTANCE" OPTIONAL="TRUE">Role</Property>
            <Property NAME="InstanceName" SCOPE="INSTANCE">InstanceName</Property>
        </PushDescriptor>
    </Metric>


	<!--
  ======================================================================
  == Category:         Server-generated alert Throughput (10gR1)
  == Collection Level: Minimum
  == Purpose:          Alerts, Trending
  ======================================================================
    -->
  	<Metric NAME="instance_throughput" TYPE="TABLE">
		<ValidIf>
			<CategoryProp NAME="VersionCategory" CHOICES="10gR1"/>
		</ValidIf>
		<Display>
			<Label NLSID="instance_throughput">Throughput</Label>
		</Display>
		<TableDescriptor>
			<!-- Note: The order of these columns must match the output ADT. -->
			<!--       The field name matches the column name only for clarity. -->
			<ColumnDescriptor NAME="time" TYPE="STRING" IS_TIMESTAMP="TRUE" TRANSIENT="TRUE" HELP="NO_HELP">
				<Display>
					<Label NLSID="time_series_time">Time</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="transactions_ps" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_transactions_ps">Number of Transactions (per second)</Label>
					<ShortName NLSID="instance_throughput_transactions_ps_short">Transactions/s</ShortName>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="physreads_ps" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_physreads_ps">Physical Reads (per second)</Label>
					<ShortName NLSID="instance_throughput_physreads_ps_short">Physical Reads/s</ShortName>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="physreads_pt" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_physreads_pt">Physical Reads (per transaction)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="physwrites_ps" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_physwrites_ps">Physical Writes (per second)</Label>
					<ShortName NLSID="instance_throughput_physwrites_ps_short">Phys Writes/sec</ShortName>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="physwrites_pt" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_physwrites_pt">Physical Writes (per transaction)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="physreadsdir_ps" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_physreadsdir_ps">Physical Reads Direct (per second)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="physreadsdir_pt" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_physreadsdir_pt">Physical Reads Direct (per transaction)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="physwritesdir_ps" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_physwritesdir_ps">Physical Writes Direct (per second)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="physwritesdir_pt" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_physwritesdir_pt">Physical Writes Direct (per transaction)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="physreadslob_ps" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_physreadslob_ps">Physical Reads Direct Lobs (per second)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="physreadslob_pt" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_physreadslob_pt">Physical Reads Direct Lobs (per transaction)</Label>
					<ShortName NLSID="instance_throughput_physreadslob_pt_sht">Physical Reads Direct Lobs (per txn)</ShortName>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="physwriteslob_ps" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_physwriteslob_ps">Physical Writes Direct Lobs (per second)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="physwriteslob_pt" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_physwriteslob_pt">Physical Writes Direct Lobs (per transaction)</Label>
					<ShortName NLSID="instance_throughput_physwriteslob_pt_sht">Physical Writes Direct Lobs (per txn)</ShortName>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="redosize_ps" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_redosize_ps">Redo Generated (per second)</Label>
					<ShortName NLSID="instance_throughput_redosize_ps_short">Redo Size/sec</ShortName>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="logons_ps" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_logons_ps">Cumulative Logons (per second)</Label>
					<ShortName NLSID="instance_throughput_logons_ps_short">Logons/sec</ShortName>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="logons_pt" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_logons_pt">Cumulative Logons (per transaction)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="opncurs_ps" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_opncurs_ps">Open Cursors (per second)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="opncurs_pt" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_opncurs_pt">Open Cursors (per transaction)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="commits_ps" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_commits_ps">User Commits (per second)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="commits_pt" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_commits_pt">User Commits (per transaction)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="rollbacks_ps" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_rollbacks_ps">User Rollbacks (per second)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="rollbacks_pt" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_rollbacks_pt">User Rollbacks (per transaction)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="usercalls_ps" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_usercalls_ps">User Calls (per second)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="usercalls_pt" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_usercalls_pt">User Calls (per transaction)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="recurscalls_ps" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_recurscalls_ps">Recursive Calls (per second)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="recurscalls_pt" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_recurscalls_pt">Recursive Calls (per transaction)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="logreads_ps" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_logreads_ps">Session Logical Reads (per second)</Label>
					<ShortName NLSID="instance_throughput_logreads_ps_short">Logical Reads/s</ShortName>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="logreads_pt" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_logreads_pt">Session Logical Reads (per transaction)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="dbwrcheckpoints_ps" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_dbwrcheckpoints_ps">DBWR Checkpoints (per second)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="bgcheckpoints_ps" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_bgcheckpoints_ps">BG Checkpoints (per second)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="redowrites_ps" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_redowrites_ps">Redo Writes (per second)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="redowrites_pt" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_redowrites_pt">Redo Writes (per transaction)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="tabscanslong_ps" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_tabscanslong_ps">Scans on Long Tables (per second)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="tabscanslong_pt" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_tabscanslong_pt">Scans on Long Tables (per transaction)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="tabscanstotal_ps" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_tabscanstotal_ps">Total Table Scans (per second)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="tabscanstotal_pt" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_tabscanstotal_pt">Total Table Scans (per transaction)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="indxscansfull_pt" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_indxscansfull_pt">Full Index Scans (per transaction)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="indxscansfull_ps" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_indxscansfull_ps">Full Index Scans (per second)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="indxscanstotal_ps" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_indxscanstotal_ps">Total Index Scans (per second)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="indxscanstotal_pt" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_indxscanstotal_pt">Total Index Scans (per transaction)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="parses_ps" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_parses_ps">Total Parses (per second)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="parses_pt" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_parses_pt">Total Parses (per transaction)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="hardparses_ps" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_hardparses_ps">Hard Parses (per second)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="hardparses_pt" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_hardparses_pt">Hard Parses (per transaction)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="failedparses_ps" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_failedparses_ps">Parse Failure Count (per second)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="failedparses_pt" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_failedparses_pt">Parse Failure Count (per transaction)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="sortsdisk_ps" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_sortsdisk_ps">Sorts to Disk (per second)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="sortsdisk_pt" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_sortsdisk_pt">Sorts to Disk (per transaction)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="rows_psort" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_rows_psort">Rows Processed (per sort)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="executeswoparse_pct" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_executeswoparse_pct">Executes Performed without Parses (%)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="softparse_pct" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_softparse_pct">Soft Parse (%)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="usercall_pct" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_usercall_pct">User Calls (%)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="networkbytes_ps" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_networkbytes_ps">Network Bytes (per second)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="enqtimeouts_ps" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_enqtimeouts_ps">Enqueue Timeout (per second)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="enqtimeouts_pt" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_enqtimeouts_pt">Enqueue Timeout (per transaction)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="enqwaits_ps" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_enqwaits_ps">Enqueue Waits (per second)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="enqwaits_pt" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_enqwaits_pt">Enqueue Waits (per transaction)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="enqdeadlocks_ps" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_enqdeadlocks_ps">Enqueue Deadlocks (per second)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="enqdeadlocks_pt" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_enqdeadlocks_pt">Enqueue Deadlocks (per transaction)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="enqreqs_ps" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_enqreqs_ps">Enqueue Requests (per second)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="enqreqs_pt" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_enqreqs_pt">Enqueue Requests (per transaction)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="dbblkgets_ps" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_dbblkgets_ps">Database Block Gets (per second)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="dbblkgets_pt" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_dbblkgets_pt">Database Block Gets (per transaction)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="consistentreadgets_ps" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_consistentreadgets_ps">Consistent Read Gets (per second)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="consistentreadgets_pt" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_consistentreadgets_pt">Consistent Read Gets (per transaction)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="dbblkchanges_ps" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_dbblkchanges_ps">Database Block Changes (per second)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="dbblkchanges_pt" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_dbblkchanges_pt">Database Block Changes (per transaction)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="consistentreadchanges_ps" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_consistentreadchanges_ps">Consistent Read Changes (per second)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="consistentreadchanges_pt" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_consistentreadchanges_pt">Consistent Read Changes (per transaction)</Label>
					<ShortName NLSID="instance_throughput_consistentreadchanges_pt_sht">Cons Read Changes (per txn)</ShortName>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="crblks_ps" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_crblks_ps">Consistent Read Blocks Created (per second)</Label>
					<ShortName NLSID="instance_throughput_crblks_ps_sht">Cons Read Blocks Created (per sec)</ShortName>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="crblks_pt" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_crblks_pt">Consistent Read Blocks Created (per transaction)</Label>
					<ShortName NLSID="instance_throughput_crblks_pt_sht">Cons Read Blocks Created (per txn)</ShortName>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="crundorecs_pt" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_crundorecs_pt">Consistent Read Undo Records Applied (per transaction)</Label>
					<ShortName NLSID="instance_throughput_crundorecs_pt_sht">Cons Read Undo Applied (per txn)</ShortName>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="userrollbackundorec_ps" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_userrollbackundorec_ps">User Rollback Undo Records Applied (per second)</Label>
					<ShortName NLSID="instance_throughput_userrollbackundorec_ps_sht">Rollback Undo Applied (per sec)</ShortName>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="userrollbackundorec_pt" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_userrollbackundorec_pt">User Rollback Undo Records Applied (per transaction)</Label>
					<ShortName NLSID="instance_throughput_userrollbackundorec_pt_sht">Rollback Undo Applied (per txn)</ShortName>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="leafnodesplits_ps" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_leafnodesplits_ps">Leaf Node Splits (per second)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="leafnodesplits_pt" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_leafnodesplits_pt">Leaf Node Splits (per transaction)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="branchnodesplits_ps" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_branchnodesplits_ps">Branch Node Splits (per second)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="branchnodesplits_pt" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_branchnodesplits_pt">Branch Node Splits (per transaction)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="redosize_pt" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_redosize_pt">Redo Generated (per transaction)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="crundorecs_ps" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_throughput_crundorecs_ps">Consistent Read Undo Records Applied (per second)</Label>
					<ShortName NLSID="instance_throughput_crundorecs_ps_sht">Cons Read Undo Applied (per sec)</ShortName>
				</Display>
			</ColumnDescriptor>
		</TableDescriptor>
		<QueryDescriptor FETCHLET_ID="SQL">
			<Property NAME="STATEMENT" SCOPE="GLOBAL"><![CDATA[
          SELECT /*+ ORDERED USE_MERGE(m) */
                 TO_CHAR(CAST(m.end_time AS TIMESTAMP) AT TIME ZONE 'GMT',
                        'YYYY-MM-DD HH24:MI:SS TZD'),
               SUM(CASE WHEN a.internal_metric_name = 'transactions_ps'
                        THEN m.value ELSE 0 END) transactions_ps,
               SUM(CASE WHEN a.internal_metric_name = 'physreads_ps'
                        THEN m.value ELSE 0 END) physreads_ps,
               SUM(CASE WHEN a.internal_metric_name = 'physreads_pt'
                        THEN m.value ELSE 0 END) physreads_pt,
               SUM(CASE WHEN a.internal_metric_name = 'physwrites_ps'
                        THEN m.value ELSE 0 END) physwrites_ps,
               SUM(CASE WHEN a.internal_metric_name = 'physwrites_pt'
                        THEN m.value ELSE 0 END) physwrites_pt,
               SUM(CASE WHEN a.internal_metric_name = 'physreadsdir_ps'
                        THEN m.value ELSE 0 END) physreadsdir_ps,
               SUM(CASE WHEN a.internal_metric_name = 'physreadsdir_pt'
                        THEN m.value ELSE 0 END) physreadsdir_pt,
               SUM(CASE WHEN a.internal_metric_name = 'physwritesdir_ps'
                        THEN m.value ELSE 0 END) physwritesdir_ps,
               SUM(CASE WHEN a.internal_metric_name = 'physwritesdir_pt'
                        THEN m.value ELSE 0 END) physwritesdir_pt,
               SUM(CASE WHEN a.internal_metric_name = 'physreadslob_ps'
                        THEN m.value ELSE 0 END) physreadslob_ps,
               SUM(CASE WHEN a.internal_metric_name = 'physreadslob_pt'
                        THEN m.value ELSE 0 END) physreadslob_pt,
               SUM(CASE WHEN a.internal_metric_name = 'physwriteslob_ps'
                        THEN m.value ELSE 0 END) physwriteslob_ps,
               SUM(CASE WHEN a.internal_metric_name = 'physwriteslob_pt'
                        THEN m.value ELSE 0 END) physwriteslob_pt,
               SUM(CASE WHEN a.internal_metric_name = 'redosize_ps'
                        THEN m.value ELSE 0 END) redosize_ps,
               SUM(CASE WHEN a.internal_metric_name = 'logons_ps'
                        THEN m.value ELSE 0 END) logons_ps,
               SUM(CASE WHEN a.internal_metric_name = 'logons_pt'
                        THEN m.value ELSE 0 END) logons_pt,
               SUM(CASE WHEN a.internal_metric_name = 'opncurs_ps'
                        THEN m.value ELSE 0 END) opncurs_ps,
               SUM(CASE WHEN a.internal_metric_name = 'opncurs_pt'
                        THEN m.value ELSE 0 END) opncurs_pt,
               SUM(CASE WHEN a.internal_metric_name = 'commits_ps'
                        THEN m.value ELSE 0 END) commits_ps,
               SUM(CASE WHEN a.internal_metric_name = 'commits_pt'
                        THEN m.value ELSE 0 END) commits_pt,
               SUM(CASE WHEN a.internal_metric_name = 'rollbacks_ps'
                        THEN m.value ELSE 0 END) rollbacks_ps,
               SUM(CASE WHEN a.internal_metric_name = 'rollbacks_pt'
                        THEN m.value ELSE 0 END) rollbacks_pt,
               SUM(CASE WHEN a.internal_metric_name = 'usercalls_ps'
                        THEN m.value ELSE 0 END) usercalls_ps,
               SUM(CASE WHEN a.internal_metric_name = 'usercalls_pt'
                        THEN m.value ELSE 0 END) usercalls_pt,
               SUM(CASE WHEN a.internal_metric_name = 'recurscalls_ps'
                        THEN m.value ELSE 0 END) recurscalls_ps,
               SUM(CASE WHEN a.internal_metric_name = 'recurscalls_pt'
                        THEN m.value ELSE 0 END) recurscalls_pt,
               SUM(CASE WHEN a.internal_metric_name = 'logreads_ps'
                        THEN m.value ELSE 0 END) logreads_ps,
               SUM(CASE WHEN a.internal_metric_name = 'logreads_pt'
                        THEN m.value ELSE 0 END) logreads_pt,
               SUM(CASE WHEN a.internal_metric_name = 'dbwrcheckpoints_ps'
                        THEN m.value ELSE 0 END) dbwrcheckpoints_ps,
               SUM(CASE WHEN a.internal_metric_name = 'bgcheckpoints_ps'
                        THEN m.value ELSE 0 END) bgcheckpoints_ps,
               SUM(CASE WHEN a.internal_metric_name = 'redowrites_ps'
                        THEN m.value ELSE 0 END) redowrites_ps,
               SUM(CASE WHEN a.internal_metric_name = 'redowrites_pt'
                        THEN m.value ELSE 0 END) redowrites_pt,
               SUM(CASE WHEN a.internal_metric_name = 'tabscanslong_ps'
                        THEN m.value ELSE 0 END) tabscanslong_ps,
               SUM(CASE WHEN a.internal_metric_name = 'tabscanslong_pt'
                        THEN m.value ELSE 0 END) tabscanslong_pt,
               SUM(CASE WHEN a.internal_metric_name = 'tabscanstotal_ps'
                        THEN m.value ELSE 0 END) tabscanstotal_ps,
               SUM(CASE WHEN a.internal_metric_name = 'tabscanstotal_pt'
                        THEN m.value ELSE 0 END) tabscanstotal_pt,
               SUM(CASE WHEN a.internal_metric_name = 'indxscansfull_pt'
                        THEN m.value ELSE 0 END) indxscansfull_pt,
               SUM(CASE WHEN a.internal_metric_name = 'indxscansfull_ps'
                        THEN m.value ELSE 0 END) indxscansfull_ps,
               SUM(CASE WHEN a.internal_metric_name = 'indxscanstotal_ps'
                        THEN m.value ELSE 0 END) indxscanstotal_ps,
               SUM(CASE WHEN a.internal_metric_name = 'indxscanstotal_pt'
                        THEN m.value ELSE 0 END) indxscanstotal_pt,
               SUM(CASE WHEN a.internal_metric_name = 'parses_ps'
                        THEN m.value ELSE 0 END) parses_ps,
               SUM(CASE WHEN a.internal_metric_name = 'parses_pt'
                        THEN m.value ELSE 0 END) parses_pt,
               SUM(CASE WHEN a.internal_metric_name = 'hardparses_ps'
                        THEN m.value ELSE 0 END) hardparses_ps,
               SUM(CASE WHEN a.internal_metric_name = 'hardparses_pt'
                        THEN m.value ELSE 0 END) hardparses_pt,
               SUM(CASE WHEN a.internal_metric_name = 'failedparses_ps'
                        THEN m.value ELSE 0 END) failedparses_ps,
               SUM(CASE WHEN a.internal_metric_name = 'failedparses_pt'
                        THEN m.value ELSE 0 END) failedparses_pt,
               SUM(CASE WHEN a.internal_metric_name = 'sortsdisk_ps'
                        THEN m.value ELSE 0 END) sortsdisk_ps,
               SUM(CASE WHEN a.internal_metric_name = 'sortsdisk_pt'
                        THEN m.value ELSE 0 END) sortsdisk_pt,
               SUM(CASE WHEN a.internal_metric_name = 'rows_psort'
                        THEN m.value ELSE 0 END) rows_psort,
               SUM(CASE WHEN a.internal_metric_name = 'executeswoparse_pct'
                        THEN m.value ELSE 0 END) executeswoparse_pct,
               SUM(CASE WHEN a.internal_metric_name = 'softparse_pct'
                        THEN m.value ELSE 0 END) softparse_pct,
               SUM(CASE WHEN a.internal_metric_name = 'usercall_pct'
                        THEN m.value ELSE 0 END) usercall_pct,
               SUM(CASE WHEN a.internal_metric_name = 'networkbytes_ps'
                        THEN m.value ELSE 0 END) networkbytes_ps,
               SUM(CASE WHEN a.internal_metric_name = 'enqtimeouts_ps'
                        THEN m.value ELSE 0 END) enqtimeouts_ps,
               SUM(CASE WHEN a.internal_metric_name = 'enqtimeouts_pt'
                        THEN m.value ELSE 0 END) enqtimeouts_pt,
               SUM(CASE WHEN a.internal_metric_name = 'enqwaits_ps'
                        THEN m.value ELSE 0 END) enqwaits_ps,
               SUM(CASE WHEN a.internal_metric_name = 'enqwaits_pt'
                        THEN m.value ELSE 0 END) enqwaits_pt,
               SUM(CASE WHEN a.internal_metric_name = 'enqdeadlocks_ps'
                        THEN m.value ELSE 0 END) enqdeadlocks_ps,
               SUM(CASE WHEN a.internal_metric_name = 'enqdeadlocks_pt'
                        THEN m.value ELSE 0 END) enqdeadlocks_pt,
               SUM(CASE WHEN a.internal_metric_name = 'enqreqs_ps'
                        THEN m.value ELSE 0 END) enqreqs_ps,
               SUM(CASE WHEN a.internal_metric_name = 'enqreqs_pt'
                        THEN m.value ELSE 0 END) enqreqs_pt,
               SUM(CASE WHEN a.internal_metric_name = 'dbblkgets_ps'
                        THEN m.value ELSE 0 END) dbblkgets_ps,
               SUM(CASE WHEN a.internal_metric_name = 'dbblkgets_pt'
                        THEN m.value ELSE 0 END) dbblkgets_pt,
               SUM(CASE WHEN a.internal_metric_name = 'consistentreadgets_ps'
                        THEN m.value ELSE 0 END) consistentreadgets_ps,
               SUM(CASE WHEN a.internal_metric_name = 'consistentreadgets_pt'
                        THEN m.value ELSE 0 END) consistentreadgets_pt,
               SUM(CASE WHEN a.internal_metric_name = 'dbblkchanges_ps'
                        THEN m.value ELSE 0 END) dbblkchanges_ps,
               SUM(CASE WHEN a.internal_metric_name = 'dbblkchanges_pt'
                        THEN m.value ELSE 0 END) dbblkchanges_pt,
               SUM(CASE WHEN a.internal_metric_name = 'consistentreadchanges_ps'
                        THEN m.value ELSE 0 END) consistentreadchanges_ps,
               SUM(CASE WHEN a.internal_metric_name = 'consistentreadchanges_pt'
                        THEN m.value ELSE 0 END) consistentreadchanges_pt,
               SUM(CASE WHEN a.internal_metric_name = 'crblks_ps'
                        THEN m.value ELSE 0 END) crblks_ps,
               SUM(CASE WHEN a.internal_metric_name = 'crblks_pt'
                        THEN m.value ELSE 0 END) crblks_pt,
               SUM(CASE WHEN a.internal_metric_name = 'crundorecs_pt'
                        THEN m.value ELSE 0 END) crundorecs_pt,
               SUM(CASE WHEN a.internal_metric_name = 'userrollbackundorec_ps'
                        THEN m.value ELSE 0 END) userrollbackundorec_ps,
               SUM(CASE WHEN a.internal_metric_name = 'userrollbackundorec_pt'
                        THEN m.value ELSE 0 END) userrollbackundorec_pt,
               SUM(CASE WHEN a.internal_metric_name = 'leafnodesplits_ps'
                        THEN m.value ELSE 0 END) leafnodesplits_ps,
               SUM(CASE WHEN a.internal_metric_name = 'leafnodesplits_pt'
                        THEN m.value ELSE 0 END) leafnodesplits_pt,
               SUM(CASE WHEN a.internal_metric_name = 'branchnodesplits_ps'
                        THEN m.value ELSE 0 END) branchnodesplits_ps,
               SUM(CASE WHEN a.internal_metric_name = 'branchnodesplits_pt'
                        THEN m.value ELSE 0 END) branchnodesplits_pt,
               SUM(CASE WHEN a.internal_metric_name = 'redosize_pt'
                        THEN m.value ELSE 0 END) redosize_pt,
               SUM(CASE WHEN a.internal_metric_name = 'crundorecs_ps'
                        THEN m.value ELSE 0 END) crundorecs_ps
          FROM v$alert_types a, v$threshold_types t, v$sysmetric m
         WHERE a.internal_metric_category = 'instance_throughput'
           AND a.reason_id = t.alert_reason_id
           AND t.metrics_id = m.metric_id
           AND m.group_id = 2
           AND :1 != 'BASIC'
         GROUP BY m.end_time
         ORDER BY m.end_time ASC
      ]]></Property>
			<Property NAME="SQLINPARAM1" SCOPE="INSTANCE">StatisticsLevel</Property>
			<Property NAME="MachineName" SCOPE="INSTANCE">MachineName</Property>
			<Property NAME="Port" SCOPE="INSTANCE">Port</Property>
			<Property NAME="SID" SCOPE="INSTANCE">SID</Property>
			<Property NAME="UserName" SCOPE="INSTANCE">UserName</Property>
			<Property NAME="password" SCOPE="INSTANCE">password</Property>
			<Property NAME="Role" SCOPE="INSTANCE" OPTIONAL="TRUE">Role</Property>
		</QueryDescriptor>
		<PushDescriptor RECVLET_ID="AQMetrics">
			<Property NAME="QueueName" SCOPE="GLOBAL">ALERT_QUE</Property>
			<Property NAME="MachineName" SCOPE="INSTANCE">MachineName</Property>
			<Property NAME="Port" SCOPE="INSTANCE">Port</Property>
			<Property NAME="SID" SCOPE="INSTANCE">SID</Property>
			<Property NAME="UserName" SCOPE="INSTANCE">UserName</Property>
			<Property NAME="password" SCOPE="INSTANCE">password</Property>
			<Property NAME="Role" SCOPE="INSTANCE" OPTIONAL="TRUE">Role</Property>
			<Property NAME="InstanceName" SCOPE="INSTANCE">InstanceName</Property>
		</PushDescriptor>
	</Metric>
  
	<!--
  ======================================================================
  == Category:         Server-generated alert Throughput (10gR2)
  == Collection Level: Minimum
  == Purpose:          Alerts, Trending
  ======================================================================
    -->
    <Metric NAME="instance_throughput" TYPE="TABLE">
        <ValidIf>
            <CategoryProp NAME="VersionCategory" CHOICES="10gR2;10gR203"/>
        </ValidIf>
        <Display>
            <Label NLSID="instance_throughput">Throughput</Label>
        </Display>
        <TableDescriptor>
            <!-- Note: The order of these columns must match the output ADT. -->
            <!--       The field name matches the column name only for clarity. -->
            <ColumnDescriptor NAME="time" TYPE="STRING" IS_TIMESTAMP="TRUE" TRANSIENT="TRUE" HELP="NO_HELP">
                <Display>
                    <Label NLSID="time_series_time">Time</Label>
                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="transactions_ps" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_transactions_ps">Number of Transactions (per second)</Label>
                    <ShortName NLSID="instance_throughput_transactions_ps_short">Transactions/s</ShortName>
                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="physreads_ps" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_physreads_ps">Physical Reads (per second)</Label>
                    <ShortName NLSID="instance_throughput_physreads_ps_short">Physical Reads/s</ShortName>
                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="physreads_pt" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_physreads_pt">Physical Reads (per transaction)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="physwrites_ps" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_physwrites_ps">Physical Writes (per second)</Label>
                    <ShortName NLSID="instance_throughput_physwrites_ps_short">Phys Writes/sec</ShortName>
                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="physwrites_pt" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_physwrites_pt">Physical Writes (per transaction)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="physreadsdir_ps" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_physreadsdir_ps">Physical Reads Direct (per second)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="physreadsdir_pt" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_physreadsdir_pt">Physical Reads Direct (per transaction)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="physwritesdir_ps" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_physwritesdir_ps">Physical Writes Direct (per second)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="physwritesdir_pt" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_physwritesdir_pt">Physical Writes Direct (per transaction)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="physreadslob_ps" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_physreadslob_ps">Physical Reads Direct Lobs (per second)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="physreadslob_pt" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_physreadslob_pt">Physical Reads Direct Lobs (per transaction)</Label>
                    <ShortName NLSID="instance_throughput_physreadslob_pt_sht">Physical Reads Direct Lobs (per txn)</ShortName>
                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="physwriteslob_ps" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_physwriteslob_ps">Physical Writes Direct Lobs (per second)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="physwriteslob_pt" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_physwriteslob_pt">Physical Writes Direct Lobs (per transaction)</Label>
                    <ShortName NLSID="instance_throughput_physwriteslob_pt_sht">Physical Writes Direct Lobs (per txn)</ShortName>
                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="redosize_ps" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_redosize_ps">Redo Generated (per second)</Label>
                    <ShortName NLSID="instance_throughput_redosize_ps_short">Redo Size/sec</ShortName>
                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="logons_ps" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_logons_ps">Cumulative Logons (per second)</Label>
                    <ShortName NLSID="instance_throughput_logons_ps_short">Logons/sec</ShortName>
                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="logons_pt" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_logons_pt">Cumulative Logons (per transaction)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="opncurs_ps" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_opncurs_ps">Open Cursors (per second)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="opncurs_pt" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_opncurs_pt">Open Cursors (per transaction)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="commits_ps" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_commits_ps">User Commits (per second)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="commits_pt" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_commits_pt">User Commits (per transaction)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="rollbacks_ps" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_rollbacks_ps">User Rollbacks (per second)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="rollbacks_pt" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_rollbacks_pt">User Rollbacks (per transaction)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="usercalls_ps" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_usercalls_ps">User Calls (per second)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="usercalls_pt" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_usercalls_pt">User Calls (per transaction)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="recurscalls_ps" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_recurscalls_ps">Recursive Calls (per second)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="recurscalls_pt" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_recurscalls_pt">Recursive Calls (per transaction)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="logreads_ps" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_logreads_ps">Session Logical Reads (per second)</Label>
                    <ShortName NLSID="instance_throughput_logreads_ps_short">Logical Reads/s</ShortName>
                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="logreads_pt" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_logreads_pt">Session Logical Reads (per transaction)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="dbwrcheckpoints_ps" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_dbwrcheckpoints_ps">DBWR Checkpoints (per second)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="bgcheckpoints_ps" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_bgcheckpoints_ps">BG Checkpoints (per second)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="redowrites_ps" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_redowrites_ps">Redo Writes (per second)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="redowrites_pt" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_redowrites_pt">Redo Writes (per transaction)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="tabscanslong_ps" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_tabscanslong_ps">Scans on Long Tables (per second)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="tabscanslong_pt" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_tabscanslong_pt">Scans on Long Tables (per transaction)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="tabscanstotal_ps" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_tabscanstotal_ps">Total Table Scans (per second)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="tabscanstotal_pt" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_tabscanstotal_pt">Total Table Scans (per transaction)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="indxscansfull_pt" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_indxscansfull_pt">Full Index Scans (per transaction)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="indxscansfull_ps" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_indxscansfull_ps">Full Index Scans (per second)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="indxscanstotal_ps" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_indxscanstotal_ps">Total Index Scans (per second)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="indxscanstotal_pt" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_indxscanstotal_pt">Total Index Scans (per transaction)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="parses_ps" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_parses_ps">Total Parses (per second)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="parses_pt" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_parses_pt">Total Parses (per transaction)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="hardparses_ps" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_hardparses_ps">Hard Parses (per second)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="hardparses_pt" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_hardparses_pt">Hard Parses (per transaction)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="failedparses_ps" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_failedparses_ps">Parse Failure Count (per second)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="failedparses_pt" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_failedparses_pt">Parse Failure Count (per transaction)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="executions_ps">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_executions_ps">Executes (per second)</Label>
                    <ShortName NLSID="instance_throughput_executions_ps_short">SQL Executions/s</ShortName>
                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="sortsdisk_ps" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_sortsdisk_ps">Sorts to Disk (per second)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="sortsdisk_pt" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_sortsdisk_pt">Sorts to Disk (per transaction)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="rows_psort" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_rows_psort">Rows Processed (per sort)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="executeswoparse_pct" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_executeswoparse_pct">Executes Performed without Parses (%)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="softparse_pct" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_softparse_pct">Soft Parse (%)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="usercall_pct" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_usercall_pct">User Calls (%)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="networkbytes_ps" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_networkbytes_ps">Network Bytes (per second)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="enqtimeouts_ps" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_enqtimeouts_ps">Enqueue Timeout (per second)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="enqtimeouts_pt" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_enqtimeouts_pt">Enqueue Timeout (per transaction)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="enqwaits_ps" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_enqwaits_ps">Enqueue Waits (per second)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="enqwaits_pt" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_enqwaits_pt">Enqueue Waits (per transaction)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="enqdeadlocks_ps" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_enqdeadlocks_ps">Enqueue Deadlocks (per second)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="enqdeadlocks_pt" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_enqdeadlocks_pt">Enqueue Deadlocks (per transaction)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="enqreqs_ps" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_enqreqs_ps">Enqueue Requests (per second)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="enqreqs_pt" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_enqreqs_pt">Enqueue Requests (per transaction)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="dbblkgets_ps" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_dbblkgets_ps">Database Block Gets (per second)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="dbblkgets_pt" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_dbblkgets_pt">Database Block Gets (per transaction)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="consistentreadgets_ps" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_consistentreadgets_ps">Consistent Read Gets (per second)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="consistentreadgets_pt" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_consistentreadgets_pt">Consistent Read Gets (per transaction)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="dbblkchanges_ps" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_dbblkchanges_ps">Database Block Changes (per second)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="dbblkchanges_pt" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_dbblkchanges_pt">Database Block Changes (per transaction)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="consistentreadchanges_ps" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_consistentreadchanges_ps">Consistent Read Changes (per second)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="consistentreadchanges_pt" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_consistentreadchanges_pt">Consistent Read Changes (per transaction)</Label>
                    <ShortName NLSID="instance_throughput_consistentreadchanges_pt_sht">Cons Read Changes (per txn)</ShortName>
                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="crblks_ps" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_crblks_ps">Consistent Read Blocks Created (per second)</Label>
                    <ShortName NLSID="instance_throughput_crblks_ps_sht">Cons Read Blocks Created (per sec)</ShortName>
                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="crblks_pt" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_crblks_pt">Consistent Read Blocks Created (per transaction)</Label>
                    <ShortName NLSID="instance_throughput_crblks_pt_sht">Cons Read Blocks Created (per txn)</ShortName>
                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="crundorecs_pt" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_crundorecs_pt">Consistent Read Undo Records Applied (per transaction)</Label>
                    <ShortName NLSID="instance_throughput_crundorecs_pt_sht">Cons Read Undo Applied (per txn)</ShortName>
                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="userrollbackundorec_ps" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_userrollbackundorec_ps">User Rollback Undo Records Applied (per second)</Label>
                    <ShortName NLSID="instance_throughput_userrollbackundorec_ps_sht">Rollback Undo Applied (per sec)</ShortName>
                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="userrollbackundorec_pt" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_userrollbackundorec_pt">User Rollback Undo Records Applied (per transaction)</Label>
                    <ShortName NLSID="instance_throughput_userrollbackundorec_pt_sht">Rollback Undo Applied (per txn)</ShortName>
                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="leafnodesplits_ps" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_leafnodesplits_ps">Leaf Node Splits (per second)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="leafnodesplits_pt" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_leafnodesplits_pt">Leaf Node Splits (per transaction)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="branchnodesplits_ps" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_branchnodesplits_ps">Branch Node Splits (per second)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="branchnodesplits_pt" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_branchnodesplits_pt">Branch Node Splits (per transaction)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="redosize_pt" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_redosize_pt">Redo Generated (per transaction)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="crundorecs_ps" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_crundorecs_ps">Consistent Read Undo Records Applied (per second)</Label>
                    <ShortName NLSID="instance_throughput_crundorecs_ps_sht">Cons Read Undo Applied (per sec)</ShortName>
                </Display>
            </ColumnDescriptor>

            <ColumnDescriptor NAME="dbtime_ps">
              <Display FOR_SUMMARY_UI="TRUE">
                <Label NLSID="instance_throughput_dbtime_ps">Database Time (centiseconds per second)</Label>
                <ShortName NLSID="instance_throughput_dbtime_ps_sht">Database Time (per second)</ShortName>
              </Display>
            </ColumnDescriptor>
        </TableDescriptor>
        <QueryDescriptor FETCHLET_ID="SQL">
            <Property NAME="STATEMENT" SCOPE="GLOBAL"><![CDATA[
          SELECT /*+ ORDERED USE_MERGE(m) */
                 TO_CHAR(CAST(m.end_time AS TIMESTAMP) AT TIME ZONE 'GMT',
                        'YYYY-MM-DD HH24:MI:SS TZD'),
               SUM(CASE WHEN a.internal_metric_name = 'transactions_ps'
                        THEN m.value ELSE 0 END) transactions_ps,
               SUM(CASE WHEN a.internal_metric_name = 'physreads_ps'
                        THEN m.value ELSE 0 END) physreads_ps,
               SUM(CASE WHEN a.internal_metric_name = 'physreads_pt'
                        THEN m.value ELSE 0 END) physreads_pt,
               SUM(CASE WHEN a.internal_metric_name = 'physwrites_ps'
                        THEN m.value ELSE 0 END) physwrites_ps,
               SUM(CASE WHEN a.internal_metric_name = 'physwrites_pt'
                        THEN m.value ELSE 0 END) physwrites_pt,
               SUM(CASE WHEN a.internal_metric_name = 'physreadsdir_ps'
                        THEN m.value ELSE 0 END) physreadsdir_ps,
               SUM(CASE WHEN a.internal_metric_name = 'physreadsdir_pt'
                        THEN m.value ELSE 0 END) physreadsdir_pt,
               SUM(CASE WHEN a.internal_metric_name = 'physwritesdir_ps'
                        THEN m.value ELSE 0 END) physwritesdir_ps,
               SUM(CASE WHEN a.internal_metric_name = 'physwritesdir_pt'
                        THEN m.value ELSE 0 END) physwritesdir_pt,
               SUM(CASE WHEN a.internal_metric_name = 'physreadslob_ps'
                        THEN m.value ELSE 0 END) physreadslob_ps,
               SUM(CASE WHEN a.internal_metric_name = 'physreadslob_pt'
                        THEN m.value ELSE 0 END) physreadslob_pt,
               SUM(CASE WHEN a.internal_metric_name = 'physwriteslob_ps'
                        THEN m.value ELSE 0 END) physwriteslob_ps,
               SUM(CASE WHEN a.internal_metric_name = 'physwriteslob_pt'
                        THEN m.value ELSE 0 END) physwriteslob_pt,
               SUM(CASE WHEN a.internal_metric_name = 'redosize_ps'
                        THEN m.value ELSE 0 END) redosize_ps,
               SUM(CASE WHEN a.internal_metric_name = 'logons_ps'
                        THEN m.value ELSE 0 END) logons_ps,
               SUM(CASE WHEN a.internal_metric_name = 'logons_pt'
                        THEN m.value ELSE 0 END) logons_pt,
               SUM(CASE WHEN a.internal_metric_name = 'opncurs_ps'
                        THEN m.value ELSE 0 END) opncurs_ps,
               SUM(CASE WHEN a.internal_metric_name = 'opncurs_pt'
                        THEN m.value ELSE 0 END) opncurs_pt,
               SUM(CASE WHEN a.internal_metric_name = 'commits_ps'
                        THEN m.value ELSE 0 END) commits_ps,
               SUM(CASE WHEN a.internal_metric_name = 'commits_pt'
                        THEN m.value ELSE 0 END) commits_pt,
               SUM(CASE WHEN a.internal_metric_name = 'rollbacks_ps'
                        THEN m.value ELSE 0 END) rollbacks_ps,
               SUM(CASE WHEN a.internal_metric_name = 'rollbacks_pt'
                        THEN m.value ELSE 0 END) rollbacks_pt,
               SUM(CASE WHEN a.internal_metric_name = 'usercalls_ps'
                        THEN m.value ELSE 0 END) usercalls_ps,
               SUM(CASE WHEN a.internal_metric_name = 'usercalls_pt'
                        THEN m.value ELSE 0 END) usercalls_pt,
               SUM(CASE WHEN a.internal_metric_name = 'recurscalls_ps'
                        THEN m.value ELSE 0 END) recurscalls_ps,
               SUM(CASE WHEN a.internal_metric_name = 'recurscalls_pt'
                        THEN m.value ELSE 0 END) recurscalls_pt,
               SUM(CASE WHEN a.internal_metric_name = 'logreads_ps'
                        THEN m.value ELSE 0 END) logreads_ps,
               SUM(CASE WHEN a.internal_metric_name = 'logreads_pt'
                        THEN m.value ELSE 0 END) logreads_pt,
               SUM(CASE WHEN a.internal_metric_name = 'dbwrcheckpoints_ps'
                        THEN m.value ELSE 0 END) dbwrcheckpoints_ps,
               SUM(CASE WHEN a.internal_metric_name = 'bgcheckpoints_ps'
                        THEN m.value ELSE 0 END) bgcheckpoints_ps,
               SUM(CASE WHEN a.internal_metric_name = 'redowrites_ps'
                        THEN m.value ELSE 0 END) redowrites_ps,
               SUM(CASE WHEN a.internal_metric_name = 'redowrites_pt'
                        THEN m.value ELSE 0 END) redowrites_pt,
               SUM(CASE WHEN a.internal_metric_name = 'tabscanslong_ps'
                        THEN m.value ELSE 0 END) tabscanslong_ps,
               SUM(CASE WHEN a.internal_metric_name = 'tabscanslong_pt'
                        THEN m.value ELSE 0 END) tabscanslong_pt,
               SUM(CASE WHEN a.internal_metric_name = 'tabscanstotal_ps'
                        THEN m.value ELSE 0 END) tabscanstotal_ps,
               SUM(CASE WHEN a.internal_metric_name = 'tabscanstotal_pt'
                        THEN m.value ELSE 0 END) tabscanstotal_pt,
               SUM(CASE WHEN a.internal_metric_name = 'indxscansfull_pt'
                        THEN m.value ELSE 0 END) indxscansfull_pt,
               SUM(CASE WHEN a.internal_metric_name = 'indxscansfull_ps'
                        THEN m.value ELSE 0 END) indxscansfull_ps,
               SUM(CASE WHEN a.internal_metric_name = 'indxscanstotal_ps'
                        THEN m.value ELSE 0 END) indxscanstotal_ps,
               SUM(CASE WHEN a.internal_metric_name = 'indxscanstotal_pt'
                        THEN m.value ELSE 0 END) indxscanstotal_pt,
               SUM(CASE WHEN a.internal_metric_name = 'parses_ps'
                        THEN m.value ELSE 0 END) parses_ps,
               SUM(CASE WHEN a.internal_metric_name = 'parses_pt'
                        THEN m.value ELSE 0 END) parses_pt,
               SUM(CASE WHEN a.internal_metric_name = 'hardparses_ps'
                        THEN m.value ELSE 0 END) hardparses_ps,
               SUM(CASE WHEN a.internal_metric_name = 'hardparses_pt'
                        THEN m.value ELSE 0 END) hardparses_pt,
               SUM(CASE WHEN a.internal_metric_name = 'failedparses_ps'
                        THEN m.value ELSE 0 END) failedparses_ps,
               SUM(CASE WHEN a.internal_metric_name = 'failedparses_pt'
                        THEN m.value ELSE 0 END) failedparses_pt,
               SUM(CASE WHEN a.internal_metric_name = 'executions_ps'
                        THEN m.value ELSE 0 END) executions_ps,
               SUM(CASE WHEN a.internal_metric_name = 'sortsdisk_ps'
                        THEN m.value ELSE 0 END) sortsdisk_ps,
               SUM(CASE WHEN a.internal_metric_name = 'sortsdisk_pt'
                        THEN m.value ELSE 0 END) sortsdisk_pt,
               SUM(CASE WHEN a.internal_metric_name = 'rows_psort'
                        THEN m.value ELSE 0 END) rows_psort,
               SUM(CASE WHEN a.internal_metric_name = 'executeswoparse_pct'
                        THEN m.value ELSE 0 END) executeswoparse_pct,
               SUM(CASE WHEN a.internal_metric_name = 'softparse_pct'
                        THEN m.value ELSE 0 END) softparse_pct,
               SUM(CASE WHEN a.internal_metric_name = 'usercall_pct'
                        THEN m.value ELSE 0 END) usercall_pct,
               SUM(CASE WHEN a.internal_metric_name = 'networkbytes_ps'
                        THEN m.value ELSE 0 END) networkbytes_ps,
               SUM(CASE WHEN a.internal_metric_name = 'enqtimeouts_ps'
                        THEN m.value ELSE 0 END) enqtimeouts_ps,
               SUM(CASE WHEN a.internal_metric_name = 'enqtimeouts_pt'
                        THEN m.value ELSE 0 END) enqtimeouts_pt,
               SUM(CASE WHEN a.internal_metric_name = 'enqwaits_ps'
                        THEN m.value ELSE 0 END) enqwaits_ps,
               SUM(CASE WHEN a.internal_metric_name = 'enqwaits_pt'
                        THEN m.value ELSE 0 END) enqwaits_pt,
               SUM(CASE WHEN a.internal_metric_name = 'enqdeadlocks_ps'
                        THEN m.value ELSE 0 END) enqdeadlocks_ps,
               SUM(CASE WHEN a.internal_metric_name = 'enqdeadlocks_pt'
                        THEN m.value ELSE 0 END) enqdeadlocks_pt,
               SUM(CASE WHEN a.internal_metric_name = 'enqreqs_ps'
                        THEN m.value ELSE 0 END) enqreqs_ps,
               SUM(CASE WHEN a.internal_metric_name = 'enqreqs_pt'
                        THEN m.value ELSE 0 END) enqreqs_pt,
               SUM(CASE WHEN a.internal_metric_name = 'dbblkgets_ps'
                        THEN m.value ELSE 0 END) dbblkgets_ps,
               SUM(CASE WHEN a.internal_metric_name = 'dbblkgets_pt'
                        THEN m.value ELSE 0 END) dbblkgets_pt,
               SUM(CASE WHEN a.internal_metric_name = 'consistentreadgets_ps'
                        THEN m.value ELSE 0 END) consistentreadgets_ps,
               SUM(CASE WHEN a.internal_metric_name = 'consistentreadgets_pt'
                        THEN m.value ELSE 0 END) consistentreadgets_pt,
               SUM(CASE WHEN a.internal_metric_name = 'dbblkchanges_ps'
                        THEN m.value ELSE 0 END) dbblkchanges_ps,
               SUM(CASE WHEN a.internal_metric_name = 'dbblkchanges_pt'
                        THEN m.value ELSE 0 END) dbblkchanges_pt,
               SUM(CASE WHEN a.internal_metric_name = 'consistentreadchanges_ps'
                        THEN m.value ELSE 0 END) consistentreadchanges_ps,
               SUM(CASE WHEN a.internal_metric_name = 'consistentreadchanges_pt'
                        THEN m.value ELSE 0 END) consistentreadchanges_pt,
               SUM(CASE WHEN a.internal_metric_name = 'crblks_ps'
                        THEN m.value ELSE 0 END) crblks_ps,
               SUM(CASE WHEN a.internal_metric_name = 'crblks_pt'
                        THEN m.value ELSE 0 END) crblks_pt,
               SUM(CASE WHEN a.internal_metric_name = 'crundorecs_pt'
                        THEN m.value ELSE 0 END) crundorecs_pt,
               SUM(CASE WHEN a.internal_metric_name = 'userrollbackundorec_ps'
                        THEN m.value ELSE 0 END) userrollbackundorec_ps,
               SUM(CASE WHEN a.internal_metric_name = 'userrollbackundorec_pt'
                        THEN m.value ELSE 0 END) userrollbackundorec_pt,
               SUM(CASE WHEN a.internal_metric_name = 'leafnodesplits_ps'
                        THEN m.value ELSE 0 END) leafnodesplits_ps,
               SUM(CASE WHEN a.internal_metric_name = 'leafnodesplits_pt'
                        THEN m.value ELSE 0 END) leafnodesplits_pt,
               SUM(CASE WHEN a.internal_metric_name = 'branchnodesplits_ps'
                        THEN m.value ELSE 0 END) branchnodesplits_ps,
               SUM(CASE WHEN a.internal_metric_name = 'branchnodesplits_pt'
                        THEN m.value ELSE 0 END) branchnodesplits_pt,
               SUM(CASE WHEN a.internal_metric_name = 'redosize_pt'
                        THEN m.value ELSE 0 END) redosize_pt,
               SUM(CASE WHEN a.internal_metric_name = 'crundorecs_ps'
                        THEN m.value ELSE 0 END) crundorecs_ps,
               SUM(CASE WHEN a.internal_metric_name = 'dbtime_ps'
                        THEN m.value ELSE 0 END) dbtime_ps
          FROM v$alert_types a, v$threshold_types t, v$sysmetric m
         WHERE a.internal_metric_category = 'instance_throughput'
           AND a.reason_id = t.alert_reason_id
           AND t.metrics_id = m.metric_id
           AND m.group_id = 2
           AND :1 != 'BASIC'
         GROUP BY m.end_time
         ORDER BY m.end_time ASC
      ]]></Property>
            <Property NAME="SQLINPARAM1" SCOPE="INSTANCE">StatisticsLevel</Property>
            <Property NAME="MachineName" SCOPE="INSTANCE">MachineName</Property>
            <Property NAME="Port" SCOPE="INSTANCE">Port</Property>
            <Property NAME="SID" SCOPE="INSTANCE">SID</Property>
            <Property NAME="UserName" SCOPE="INSTANCE">UserName</Property>
            <Property NAME="password" SCOPE="INSTANCE">password</Property>
            <Property NAME="Role" SCOPE="INSTANCE" OPTIONAL="TRUE">Role</Property>
        </QueryDescriptor>
        <PushDescriptor RECVLET_ID="AQMetrics">
            <Property NAME="QueueName" SCOPE="GLOBAL">ALERT_QUE</Property>
            <Property NAME="MachineName" SCOPE="INSTANCE">MachineName</Property>
            <Property NAME="Port" SCOPE="INSTANCE">Port</Property>
            <Property NAME="SID" SCOPE="INSTANCE">SID</Property>
            <Property NAME="UserName" SCOPE="INSTANCE">UserName</Property>
            <Property NAME="password" SCOPE="INSTANCE">password</Property>
            <Property NAME="Role" SCOPE="INSTANCE" OPTIONAL="TRUE">Role</Property>
            <Property NAME="InstanceName" SCOPE="INSTANCE">InstanceName</Property>
        </PushDescriptor>
    </Metric> 
	<!--
  ======================================================================
  == Category:         Server-generated alert Throughput (11gR1;11gR2)
  == Collection Level: Minimum
  == Purpose:          Alerts, Trending
  ======================================================================
    -->
    <Metric NAME="instance_throughput" TYPE="TABLE">
        <ValidIf>
            <CategoryProp NAME="VersionCategory" CHOICES="11gR1;11gR2"/>
        </ValidIf>
        <Display>
            <Label NLSID="instance_throughput">Throughput</Label>
        </Display>
        <TableDescriptor>
            <!-- Note: The order of these columns must match the output ADT. -->
            <!--       The field name matches the column name only for clarity. -->
            <ColumnDescriptor NAME="time" TYPE="STRING" IS_TIMESTAMP="TRUE" TRANSIENT="TRUE" HELP="NO_HELP">
                <Display>
                    <Label NLSID="time_series_time">Time</Label>
                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="transactions_ps" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_transactions_ps">Number of Transactions (per second)</Label>
                    <ShortName NLSID="instance_throughput_transactions_ps_short">Transactions/s</ShortName>
                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="physreads_ps" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_physreads_ps">Physical Reads (per second)</Label>
                    <ShortName NLSID="instance_throughput_physreads_ps_short">Physical Reads/s</ShortName>
                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="physreads_pt" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_physreads_pt">Physical Reads (per transaction)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="physwrites_ps" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_physwrites_ps">Physical Writes (per second)</Label>
                    <ShortName NLSID="instance_throughput_physwrites_ps_short">Phys Writes/sec</ShortName>
                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="physwrites_pt" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_physwrites_pt">Physical Writes (per transaction)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="physreadsdir_ps" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_physreadsdir_ps">Physical Reads Direct (per second)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="physreadsdir_pt" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_physreadsdir_pt">Physical Reads Direct (per transaction)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="physwritesdir_ps" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_physwritesdir_ps">Physical Writes Direct (per second)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="physwritesdir_pt" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_physwritesdir_pt">Physical Writes Direct (per transaction)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="physreadslob_ps" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_physreadslob_ps">Physical Reads Direct Lobs (per second)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="physreadslob_pt" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_physreadslob_pt">Physical Reads Direct Lobs (per transaction)</Label>
                    <ShortName NLSID="instance_throughput_physreadslob_pt_sht">Physical Reads Direct Lobs (per txn)</ShortName>
                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="physwriteslob_ps" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_physwriteslob_ps">Physical Writes Direct Lobs (per second)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="physwriteslob_pt" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_physwriteslob_pt">Physical Writes Direct Lobs (per transaction)</Label>
                    <ShortName NLSID="instance_throughput_physwriteslob_pt_sht">Physical Writes Direct Lobs (per txn)</ShortName>
                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="redosize_ps" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_redosize_ps">Redo Generated (per second)</Label>
                    <ShortName NLSID="instance_throughput_redosize_ps_short">Redo Size/sec</ShortName>
                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="logons_ps" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_logons_ps">Cumulative Logons (per second)</Label>
                    <ShortName NLSID="instance_throughput_logons_ps_short">Logons/sec</ShortName>
                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="logons_pt" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_logons_pt">Cumulative Logons (per transaction)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="opncurs_ps" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_opncurs_ps">Open Cursors (per second)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="opncurs_pt" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_opncurs_pt">Open Cursors (per transaction)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="commits_ps" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_commits_ps">User Commits (per second)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="commits_pt" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_commits_pt">User Commits (per transaction)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="rollbacks_ps" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_rollbacks_ps">User Rollbacks (per second)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="rollbacks_pt" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_rollbacks_pt">User Rollbacks (per transaction)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="usercalls_ps" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_usercalls_ps">User Calls (per second)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="usercalls_pt" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_usercalls_pt">User Calls (per transaction)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="recurscalls_ps" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_recurscalls_ps">Recursive Calls (per second)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="recurscalls_pt" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_recurscalls_pt">Recursive Calls (per transaction)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="logreads_ps" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_logreads_ps">Session Logical Reads (per second)</Label>
                    <ShortName NLSID="instance_throughput_logreads_ps_short">Logical Reads/s</ShortName>
                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="logreads_pt" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_logreads_pt">Session Logical Reads (per transaction)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="dbwrcheckpoints_ps" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_dbwrcheckpoints_ps">DBWR Checkpoints (per second)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="bgcheckpoints_ps" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_bgcheckpoints_ps">BG Checkpoints (per second)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="redowrites_ps" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_redowrites_ps">Redo Writes (per second)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="redowrites_pt" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_redowrites_pt">Redo Writes (per transaction)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="tabscanslong_ps" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_tabscanslong_ps">Scans on Long Tables (per second)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="tabscanslong_pt" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_tabscanslong_pt">Scans on Long Tables (per transaction)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="tabscanstotal_ps" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_tabscanstotal_ps">Total Table Scans (per second)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="tabscanstotal_pt" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_tabscanstotal_pt">Total Table Scans (per transaction)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="indxscansfull_pt" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_indxscansfull_pt">Full Index Scans (per transaction)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="indxscansfull_ps" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_indxscansfull_ps">Full Index Scans (per second)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="indxscanstotal_ps" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_indxscanstotal_ps">Total Index Scans (per second)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="indxscanstotal_pt" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_indxscanstotal_pt">Total Index Scans (per transaction)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="parses_ps" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_parses_ps">Total Parses (per second)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="parses_pt" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_parses_pt">Total Parses (per transaction)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="hardparses_ps" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_hardparses_ps">Hard Parses (per second)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="hardparses_pt" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_hardparses_pt">Hard Parses (per transaction)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="failedparses_ps" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_failedparses_ps">Parse Failure Count (per second)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="failedparses_pt" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_failedparses_pt">Parse Failure Count (per transaction)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="executions_ps">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_executions_ps">Executes (per second)</Label>
                    <ShortName NLSID="instance_throughput_executions_ps_short">SQL Executions/s</ShortName>
                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="sortsdisk_ps" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_sortsdisk_ps">Sorts to Disk (per second)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="sortsdisk_pt" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_sortsdisk_pt">Sorts to Disk (per transaction)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="rows_psort" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_rows_psort">Rows Processed (per sort)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="executeswoparse_pct" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_executeswoparse_pct">Executes Performed without Parses (%)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="softparse_pct" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_softparse_pct">Soft Parse (%)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="usercall_pct" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_usercall_pct">User Calls (%)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="networkbytes_ps" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_networkbytes_ps">Network Bytes (per second)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="enqtimeouts_ps" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_enqtimeouts_ps">Enqueue Timeout (per second)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="enqtimeouts_pt" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_enqtimeouts_pt">Enqueue Timeout (per transaction)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="enqwaits_ps" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_enqwaits_ps">Enqueue Waits (per second)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="enqwaits_pt" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_enqwaits_pt">Enqueue Waits (per transaction)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="enqdeadlocks_ps" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_enqdeadlocks_ps">Enqueue Deadlocks (per second)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="enqdeadlocks_pt" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_enqdeadlocks_pt">Enqueue Deadlocks (per transaction)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="enqreqs_ps" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_enqreqs_ps">Enqueue Requests (per second)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="enqreqs_pt" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_enqreqs_pt">Enqueue Requests (per transaction)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="dbblkgets_ps" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_dbblkgets_ps">Database Block Gets (per second)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="dbblkgets_pt" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_dbblkgets_pt">Database Block Gets (per transaction)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="consistentreadgets_ps" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_consistentreadgets_ps">Consistent Read Gets (per second)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="consistentreadgets_pt" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_consistentreadgets_pt">Consistent Read Gets (per transaction)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="dbblkchanges_ps" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_dbblkchanges_ps">Database Block Changes (per second)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="dbblkchanges_pt" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_dbblkchanges_pt">Database Block Changes (per transaction)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="consistentreadchanges_ps" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_consistentreadchanges_ps">Consistent Read Changes (per second)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="consistentreadchanges_pt" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_consistentreadchanges_pt">Consistent Read Changes (per transaction)</Label>
                    <ShortName NLSID="instance_throughput_consistentreadchanges_pt_sht">Cons Read Changes (per txn)</ShortName>
                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="crblks_ps" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_crblks_ps">Consistent Read Blocks Created (per second)</Label>
                    <ShortName NLSID="instance_throughput_crblks_ps_sht">Cons Read Blocks Created (per sec)</ShortName>
                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="crblks_pt" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_crblks_pt">Consistent Read Blocks Created (per transaction)</Label>
                    <ShortName NLSID="instance_throughput_crblks_pt_sht">Cons Read Blocks Created (per txn)</ShortName>
                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="crundorecs_pt" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_crundorecs_pt">Consistent Read Undo Records Applied (per transaction)</Label>
                    <ShortName NLSID="instance_throughput_crundorecs_pt_sht">Cons Read Undo Applied (per txn)</ShortName>
                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="userrollbackundorec_ps" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_userrollbackundorec_ps">User Rollback Undo Records Applied (per second)</Label>
                    <ShortName NLSID="instance_throughput_userrollbackundorec_ps_sht">Rollback Undo Applied (per sec)</ShortName>
                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="userrollbackundorec_pt" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_userrollbackundorec_pt">User Rollback Undo Records Applied (per transaction)</Label>
                    <ShortName NLSID="instance_throughput_userrollbackundorec_pt_sht">Rollback Undo Applied (per txn)</ShortName>
                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="leafnodesplits_ps" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_leafnodesplits_ps">Leaf Node Splits (per second)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="leafnodesplits_pt" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_leafnodesplits_pt">Leaf Node Splits (per transaction)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="branchnodesplits_ps" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_branchnodesplits_ps">Branch Node Splits (per second)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="branchnodesplits_pt" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_branchnodesplits_pt">Branch Node Splits (per transaction)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="redosize_pt" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_redosize_pt">Redo Generated (per transaction)</Label>

                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="crundorecs_ps" TYPE="NUMBER" IS_KEY="FALSE">
                <Display FOR_SUMMARY_UI="TRUE">
                    <Label NLSID="instance_throughput_crundorecs_ps">Consistent Read Undo Records Applied (per second)</Label>
                    <ShortName NLSID="instance_throughput_crundorecs_ps_sht">Cons Read Undo Applied (per sec)</ShortName>
                </Display>
            </ColumnDescriptor>

            <ColumnDescriptor NAME="dbtime_ps">
              <Display FOR_SUMMARY_UI="TRUE">
                <Label NLSID="instance_throughput_dbtime_ps">Database Time (centiseconds per second)</Label>
                <ShortName NLSID="instance_throughput_dbtime_ps_sht">Database Time (per second)</ShortName>
              </Display>
            </ColumnDescriptor>

            <ColumnDescriptor NAME="avg_active_sessions">
              <Display FOR_SUMMARY_UI="TRUE">
                <Label NLSID="instance_throughput_avg_active_sessions">Average Active Sessions</Label>
                <ShortName NLSID="instance_throughput_avg_active_sessions_sht">Average Active Sessions</ShortName>
              </Display>
            </ColumnDescriptor>

            <ColumnDescriptor NAME="avg_sync_singleblk_read_latency">
              <Display FOR_SUMMARY_UI="TRUE">
                <Label NLSID="instance_throughput_avg_sync_singleblk_read_latency">Average Synchronous Single-Block Read Latency (ms)</Label>
                <ShortName NLSID="instance_throughput_avg_sync_singleblk_read_latency_sht">Average Synchronous Single-Block Read Latency (ms)</ShortName>
              </Display>
            </ColumnDescriptor>

            <ColumnDescriptor NAME="iombs_ps">
              <Display FOR_SUMMARY_UI="TRUE">
                <Label NLSID="instance_throughput_iombs_ps">I/O Megabytes (per second)</Label>
                <ShortName NLSID="instance_throughput_iombs_ps_sht">I/O Mb (per sec)</ShortName>
              </Display>
            </ColumnDescriptor>

            <ColumnDescriptor NAME="iorequests_ps">
              <Display FOR_SUMMARY_UI="TRUE">
                <Label NLSID="instance_throughput_iorequests_ps">I/O Requests (per second)</Label>
                <ShortName NLSID="instance_throughput_iorequests_ps_sht">I/O Reqs (per sec)</ShortName>
              </Display>
            </ColumnDescriptor>
        </TableDescriptor>
        <QueryDescriptor FETCHLET_ID="SQL">
            <Property NAME="STATEMENT" SCOPE="GLOBAL"><![CDATA[
          SELECT /*+ ORDERED USE_MERGE(m) */
                 TO_CHAR(CAST(m.end_time AS TIMESTAMP) AT TIME ZONE 'GMT',
                        'YYYY-MM-DD HH24:MI:SS TZD'),
               SUM(CASE WHEN a.internal_metric_name = 'transactions_ps'
                        THEN m.value ELSE 0 END) transactions_ps,
               SUM(CASE WHEN a.internal_metric_name = 'physreads_ps'
                        THEN m.value ELSE 0 END) physreads_ps,
               SUM(CASE WHEN a.internal_metric_name = 'physreads_pt'
                        THEN m.value ELSE 0 END) physreads_pt,
               SUM(CASE WHEN a.internal_metric_name = 'physwrites_ps'
                        THEN m.value ELSE 0 END) physwrites_ps,
               SUM(CASE WHEN a.internal_metric_name = 'physwrites_pt'
                        THEN m.value ELSE 0 END) physwrites_pt,
               SUM(CASE WHEN a.internal_metric_name = 'physreadsdir_ps'
                        THEN m.value ELSE 0 END) physreadsdir_ps,
               SUM(CASE WHEN a.internal_metric_name = 'physreadsdir_pt'
                        THEN m.value ELSE 0 END) physreadsdir_pt,
               SUM(CASE WHEN a.internal_metric_name = 'physwritesdir_ps'
                        THEN m.value ELSE 0 END) physwritesdir_ps,
               SUM(CASE WHEN a.internal_metric_name = 'physwritesdir_pt'
                        THEN m.value ELSE 0 END) physwritesdir_pt,
               SUM(CASE WHEN a.internal_metric_name = 'physreadslob_ps'
                        THEN m.value ELSE 0 END) physreadslob_ps,
               SUM(CASE WHEN a.internal_metric_name = 'physreadslob_pt'
                        THEN m.value ELSE 0 END) physreadslob_pt,
               SUM(CASE WHEN a.internal_metric_name = 'physwriteslob_ps'
                        THEN m.value ELSE 0 END) physwriteslob_ps,
               SUM(CASE WHEN a.internal_metric_name = 'physwriteslob_pt'
                        THEN m.value ELSE 0 END) physwriteslob_pt,
               SUM(CASE WHEN a.internal_metric_name = 'redosize_ps'
                        THEN m.value ELSE 0 END) redosize_ps,
               SUM(CASE WHEN a.internal_metric_name = 'logons_ps'
                        THEN m.value ELSE 0 END) logons_ps,
               SUM(CASE WHEN a.internal_metric_name = 'logons_pt'
                        THEN m.value ELSE 0 END) logons_pt,
               SUM(CASE WHEN a.internal_metric_name = 'opncurs_ps'
                        THEN m.value ELSE 0 END) opncurs_ps,
               SUM(CASE WHEN a.internal_metric_name = 'opncurs_pt'
                        THEN m.value ELSE 0 END) opncurs_pt,
               SUM(CASE WHEN a.internal_metric_name = 'commits_ps'
                        THEN m.value ELSE 0 END) commits_ps,
               SUM(CASE WHEN a.internal_metric_name = 'commits_pt'
                        THEN m.value ELSE 0 END) commits_pt,
               SUM(CASE WHEN a.internal_metric_name = 'rollbacks_ps'
                        THEN m.value ELSE 0 END) rollbacks_ps,
               SUM(CASE WHEN a.internal_metric_name = 'rollbacks_pt'
                        THEN m.value ELSE 0 END) rollbacks_pt,
               SUM(CASE WHEN a.internal_metric_name = 'usercalls_ps'
                        THEN m.value ELSE 0 END) usercalls_ps,
               SUM(CASE WHEN a.internal_metric_name = 'usercalls_pt'
                        THEN m.value ELSE 0 END) usercalls_pt,
               SUM(CASE WHEN a.internal_metric_name = 'recurscalls_ps'
                        THEN m.value ELSE 0 END) recurscalls_ps,
               SUM(CASE WHEN a.internal_metric_name = 'recurscalls_pt'
                        THEN m.value ELSE 0 END) recurscalls_pt,
               SUM(CASE WHEN a.internal_metric_name = 'logreads_ps'
                        THEN m.value ELSE 0 END) logreads_ps,
               SUM(CASE WHEN a.internal_metric_name = 'logreads_pt'
                        THEN m.value ELSE 0 END) logreads_pt,
               SUM(CASE WHEN a.internal_metric_name = 'dbwrcheckpoints_ps'
                        THEN m.value ELSE 0 END) dbwrcheckpoints_ps,
               SUM(CASE WHEN a.internal_metric_name = 'bgcheckpoints_ps'
                        THEN m.value ELSE 0 END) bgcheckpoints_ps,
               SUM(CASE WHEN a.internal_metric_name = 'redowrites_ps'
                        THEN m.value ELSE 0 END) redowrites_ps,
               SUM(CASE WHEN a.internal_metric_name = 'redowrites_pt'
                        THEN m.value ELSE 0 END) redowrites_pt,
               SUM(CASE WHEN a.internal_metric_name = 'tabscanslong_ps'
                        THEN m.value ELSE 0 END) tabscanslong_ps,
               SUM(CASE WHEN a.internal_metric_name = 'tabscanslong_pt'
                        THEN m.value ELSE 0 END) tabscanslong_pt,
               SUM(CASE WHEN a.internal_metric_name = 'tabscanstotal_ps'
                        THEN m.value ELSE 0 END) tabscanstotal_ps,
               SUM(CASE WHEN a.internal_metric_name = 'tabscanstotal_pt'
                        THEN m.value ELSE 0 END) tabscanstotal_pt,
               SUM(CASE WHEN a.internal_metric_name = 'indxscansfull_pt'
                        THEN m.value ELSE 0 END) indxscansfull_pt,
               SUM(CASE WHEN a.internal_metric_name = 'indxscansfull_ps'
                        THEN m.value ELSE 0 END) indxscansfull_ps,
               SUM(CASE WHEN a.internal_metric_name = 'indxscanstotal_ps'
                        THEN m.value ELSE 0 END) indxscanstotal_ps,
               SUM(CASE WHEN a.internal_metric_name = 'indxscanstotal_pt'
                        THEN m.value ELSE 0 END) indxscanstotal_pt,
               SUM(CASE WHEN a.internal_metric_name = 'parses_ps'
                        THEN m.value ELSE 0 END) parses_ps,
               SUM(CASE WHEN a.internal_metric_name = 'parses_pt'
                        THEN m.value ELSE 0 END) parses_pt,
               SUM(CASE WHEN a.internal_metric_name = 'hardparses_ps'
                        THEN m.value ELSE 0 END) hardparses_ps,
               SUM(CASE WHEN a.internal_metric_name = 'hardparses_pt'
                        THEN m.value ELSE 0 END) hardparses_pt,
               SUM(CASE WHEN a.internal_metric_name = 'failedparses_ps'
                        THEN m.value ELSE 0 END) failedparses_ps,
               SUM(CASE WHEN a.internal_metric_name = 'failedparses_pt'
                        THEN m.value ELSE 0 END) failedparses_pt,
               SUM(CASE WHEN a.internal_metric_name = 'executions_ps'
                        THEN m.value ELSE 0 END) executions_ps,
               SUM(CASE WHEN a.internal_metric_name = 'sortsdisk_ps'
                        THEN m.value ELSE 0 END) sortsdisk_ps,
               SUM(CASE WHEN a.internal_metric_name = 'sortsdisk_pt'
                        THEN m.value ELSE 0 END) sortsdisk_pt,
               SUM(CASE WHEN a.internal_metric_name = 'rows_psort'
                        THEN m.value ELSE 0 END) rows_psort,
               SUM(CASE WHEN a.internal_metric_name = 'executeswoparse_pct'
                        THEN m.value ELSE 0 END) executeswoparse_pct,
               SUM(CASE WHEN a.internal_metric_name = 'softparse_pct'
                        THEN m.value ELSE 0 END) softparse_pct,
               SUM(CASE WHEN a.internal_metric_name = 'usercall_pct'
                        THEN m.value ELSE 0 END) usercall_pct,
               SUM(CASE WHEN a.internal_metric_name = 'networkbytes_ps'
                        THEN m.value ELSE 0 END) networkbytes_ps,
               SUM(CASE WHEN a.internal_metric_name = 'enqtimeouts_ps'
                        THEN m.value ELSE 0 END) enqtimeouts_ps,
               SUM(CASE WHEN a.internal_metric_name = 'enqtimeouts_pt'
                        THEN m.value ELSE 0 END) enqtimeouts_pt,
               SUM(CASE WHEN a.internal_metric_name = 'enqwaits_ps'
                        THEN m.value ELSE 0 END) enqwaits_ps,
               SUM(CASE WHEN a.internal_metric_name = 'enqwaits_pt'
                        THEN m.value ELSE 0 END) enqwaits_pt,
               SUM(CASE WHEN a.internal_metric_name = 'enqdeadlocks_ps'
                        THEN m.value ELSE 0 END) enqdeadlocks_ps,
               SUM(CASE WHEN a.internal_metric_name = 'enqdeadlocks_pt'
                        THEN m.value ELSE 0 END) enqdeadlocks_pt,
               SUM(CASE WHEN a.internal_metric_name = 'enqreqs_ps'
                        THEN m.value ELSE 0 END) enqreqs_ps,
               SUM(CASE WHEN a.internal_metric_name = 'enqreqs_pt'
                        THEN m.value ELSE 0 END) enqreqs_pt,
               SUM(CASE WHEN a.internal_metric_name = 'dbblkgets_ps'
                        THEN m.value ELSE 0 END) dbblkgets_ps,
               SUM(CASE WHEN a.internal_metric_name = 'dbblkgets_pt'
                        THEN m.value ELSE 0 END) dbblkgets_pt,
               SUM(CASE WHEN a.internal_metric_name = 'consistentreadgets_ps'
                        THEN m.value ELSE 0 END) consistentreadgets_ps,
               SUM(CASE WHEN a.internal_metric_name = 'consistentreadgets_pt'
                        THEN m.value ELSE 0 END) consistentreadgets_pt,
               SUM(CASE WHEN a.internal_metric_name = 'dbblkchanges_ps'
                        THEN m.value ELSE 0 END) dbblkchanges_ps,
               SUM(CASE WHEN a.internal_metric_name = 'dbblkchanges_pt'
                        THEN m.value ELSE 0 END) dbblkchanges_pt,
               SUM(CASE WHEN a.internal_metric_name = 'consistentreadchanges_ps'
                        THEN m.value ELSE 0 END) consistentreadchanges_ps,
               SUM(CASE WHEN a.internal_metric_name = 'consistentreadchanges_pt'
                        THEN m.value ELSE 0 END) consistentreadchanges_pt,
               SUM(CASE WHEN a.internal_metric_name = 'crblks_ps'
                        THEN m.value ELSE 0 END) crblks_ps,
               SUM(CASE WHEN a.internal_metric_name = 'crblks_pt'
                        THEN m.value ELSE 0 END) crblks_pt,
               SUM(CASE WHEN a.internal_metric_name = 'crundorecs_pt'
                        THEN m.value ELSE 0 END) crundorecs_pt,
               SUM(CASE WHEN a.internal_metric_name = 'userrollbackundorec_ps'
                        THEN m.value ELSE 0 END) userrollbackundorec_ps,
               SUM(CASE WHEN a.internal_metric_name = 'userrollbackundorec_pt'
                        THEN m.value ELSE 0 END) userrollbackundorec_pt,
               SUM(CASE WHEN a.internal_metric_name = 'leafnodesplits_ps'
                        THEN m.value ELSE 0 END) leafnodesplits_ps,
               SUM(CASE WHEN a.internal_metric_name = 'leafnodesplits_pt'
                        THEN m.value ELSE 0 END) leafnodesplits_pt,
               SUM(CASE WHEN a.internal_metric_name = 'branchnodesplits_ps'
                        THEN m.value ELSE 0 END) branchnodesplits_ps,
               SUM(CASE WHEN a.internal_metric_name = 'branchnodesplits_pt'
                        THEN m.value ELSE 0 END) branchnodesplits_pt,
               SUM(CASE WHEN a.internal_metric_name = 'redosize_pt'
                        THEN m.value ELSE 0 END) redosize_pt,
               SUM(CASE WHEN a.internal_metric_name = 'crundorecs_ps'
                        THEN m.value ELSE 0 END) crundorecs_ps,
               SUM(CASE WHEN a.internal_metric_name = 'dbtime_ps'
                        THEN m.value ELSE 0 END) dbtime_ps,
               SUM(CASE WHEN a.internal_metric_name = 'avg_active_sessions'
                        THEN m.value ELSE 0 END) avg_active_sessions,
               SUM(CASE WHEN a.internal_metric_name = 'avg_sync_singleblk_read_latency'
                        THEN m.value ELSE 0 END) avg_block_read_latency,
               SUM(CASE WHEN a.internal_metric_name = 'iombs_ps'
                        THEN m.value ELSE 0 END) iombs_ps,
               SUM(CASE WHEN a.internal_metric_name = 'iorequests_ps'
                        THEN m.value ELSE 0 END) iorequests_ps
          FROM v$alert_types a, v$threshold_types t, v$sysmetric m
         WHERE a.internal_metric_category = 'instance_throughput'
           AND a.reason_id = t.alert_reason_id
           AND t.metrics_id = m.metric_id
           AND m.group_id = 2
           AND :1 != 'BASIC'
         GROUP BY m.end_time
         ORDER BY m.end_time ASC
      ]]></Property>
            <Property NAME="SQLINPARAM1" SCOPE="INSTANCE">StatisticsLevel</Property>
            <Property NAME="MachineName" SCOPE="INSTANCE">MachineName</Property>
            <Property NAME="Port" SCOPE="INSTANCE">Port</Property>
            <Property NAME="SID" SCOPE="INSTANCE">SID</Property>
            <Property NAME="UserName" SCOPE="INSTANCE">UserName</Property>
            <Property NAME="password" SCOPE="INSTANCE">password</Property>
            <Property NAME="Role" SCOPE="INSTANCE" OPTIONAL="TRUE">Role</Property>
        </QueryDescriptor>
        <PushDescriptor RECVLET_ID="AQMetrics">
            <Property NAME="QueueName" SCOPE="GLOBAL">ALERT_QUE</Property>
            <Property NAME="MachineName" SCOPE="INSTANCE">MachineName</Property>
            <Property NAME="Port" SCOPE="INSTANCE">Port</Property>
            <Property NAME="SID" SCOPE="INSTANCE">SID</Property>
            <Property NAME="UserName" SCOPE="INSTANCE">UserName</Property>
            <Property NAME="password" SCOPE="INSTANCE">password</Property>
            <Property NAME="Role" SCOPE="INSTANCE" OPTIONAL="TRUE">Role</Property>
            <Property NAME="InstanceName" SCOPE="INSTANCE">InstanceName</Property>
        </PushDescriptor>
    </Metric> 
 <!--
  ======================================================================
  == Category:         Wait Bottlenecks
  == Collection Level: Minimum
  == Purpose:          Alerts, Trending
  ======================================================================
    -->
  <Metric NAME="wait_bottlenecks" TYPE="TABLE">
    <ValidIf>
       <CategoryProp NAME="VersionCategory" CHOICES="10gR1;10gR2;10gR203;11gR1;11gR2"/>
    </ValidIf>
    <Display>
      <Label NLSID="wait_bottlenecks">Wait Bottlenecks</Label>
    </Display>

    <TableDescriptor>

      <!-- columns provided by the query descriptor's fetchlet call -->

      <!-- Note: The order of these columns must match the output ADT. -->
      <!--       The field name matches the column name only for clarity. -->
      <ColumnDescriptor NAME="time" TYPE="STRING" IS_TIMESTAMP="TRUE" TRANSIENT="TRUE" HELP="NO_HELP">
        <Display>
          <Label NLSID="time_series_time">Time</Label>
        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="user_wait_time_pct" TYPE="NUMBER">
        <Display FOR_SUMMARY_UI="TRUE">
          <Label NLSID="wait_bottlenecks_user_wait_time_pct">Wait Time (%)</Label>
          <ShortName NLSID="wait_bottlenecks_user_wait_time_pct_short">Wait Time %</ShortName>
        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="db_time_users" TYPE="NUMBER"
                        TRANSIENT="TRUE" HELP="NO_HELP" />
      <ColumnDescriptor NAME="db_cpu_users" TYPE="NUMBER"
                        TRANSIENT="TRUE" HELP="NO_HELP" />
      <ColumnDescriptor NAME="host_cpu_usage_pct" TYPE="NUMBER">
        <Display FOR_SUMMARY_UI="TRUE">
          <Label NLSID="wait_bottlenecks_host_cpu_usage_pct">Host CPU Utilization (%)</Label>
        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="userio_users" TYPE="NUMBER"
                        TRANSIENT="TRUE" HELP="NO_HELP" />
      <ColumnDescriptor NAME="max_cpu_cnt" TYPE="NUMBER"
                        TRANSIENT="TRUE" HELP="NO_HELP"/>

      <!-- columns based on deltas or other computations from counters -->

      <ColumnDescriptor NAME="user_cpu_time_cnt" TYPE="NUMBER"
                        COMPUTE_EXPR="0 > db_cpu_users ? 1/0 : (db_cpu_users > max_cpu_cnt ? 1/0 : db_cpu_users)">
        <Display FOR_SUMMARY_UI="TRUE">
          <Label NLSID="wait_bottlenecks_user_cpu_time_cnt">Active Sessions Using CPU</Label>
          <ShortName NLSID="wait_bottlenecks_user_cpu_time_cnt_short">Sessions: CPU</ShortName>
        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="userio_wait_cnt" TYPE="NUMBER"
                        COMPUTE_EXPR="0 > userio_users ? 1/0 : userio_users">
        <Display FOR_SUMMARY_UI="TRUE">
          <Label NLSID="wait_bottlenecks_userio_wait_cnt">Active Sessions Waiting: I/O</Label>
          <ShortName NLSID="wait_bottlenecks_userio_wait_cnt_short">Sessions: I/O</ShortName>
        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="active_sessions" TYPE="NUMBER"
                        COMPUTE_EXPR="db_cpu_users + userio_users > db_time_users ? 1/0 : db_time_users"
                        TRANSIENT="TRUE">
        <Display FOR_SUMMARY_UI="TRUE">
          <Label NLSID="wait_bottlenecks_active_sessions">Active Sessions</Label>
        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="other_wait_cnt" TYPE="NUMBER"
                        COMPUTE_EXPR="active_sessions - user_cpu_time_cnt - userio_wait_cnt">
        <Display FOR_SUMMARY_UI="TRUE">
          <Label NLSID="wait_bottlenecks_other_wait_cnt">Active Sessions Waiting: Other</Label>
          <ShortName NLSID="wait_bottlenecks_other_wait_cnt_short">Sessions: Other</ShortName>
        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="avg_user_cpu_time_pct" TYPE="NUMBER"
                        COMPUTE_EXPR="100*user_cpu_time_cnt/max_cpu_cnt">
        <Display FOR_SUMMARY_UI="TRUE">
          <Label NLSID="wait_bottlenecks_avg_user_cpu_time_pct">Average Instance CPU (%)</Label>
          <ShortName NLSID="wait_bottlenecks_avg_user_cpu_time_pct_short">Instance CPU (%)</ShortName>
        </Display>
      </ColumnDescriptor>

    </TableDescriptor>

    <QueryDescriptor FETCHLET_ID="SQL">
      <ValidIf>
        <CategoryProp NAME="VersionCategory" CHOICES="10gR1;10gR2;10gR203;11gR1;11gR2"/>
      </ValidIf>
      <Property NAME="STATEMENT" SCOPE="GLOBAL">
      <![CDATA[
        SELECT TO_CHAR(CAST(md.end_time AS TIMESTAMP) AT TIME ZONE 'GMT',
                       'YYYY-MM-DD HH24:MI:SS TZD') time,
               md.user_wait_time_pct,
               md.db_time_ps db_time_users,
               md.cpu_time_ps db_cpu_users,
               DECODE(:1, 'TRUE', md.host_cpu_usage_pct,
                                  NULL) host_cpu_usage_pct,
               wcd.users userio_users,
               :2 max_cpu_cnt
          FROM (SELECT DISTINCT wait_class_id
                  FROM v$event_name
                 WHERE wait_class = 'User I/O'
                   AND :3 = 'TRUE') wcn,
               (SELECT wait_class_id,
                       intsize_csec, end_time,
                       time_waited / intsize_csec users
                  FROM v$waitclassmetric_history
                 WHERE end_time >= SYSDATE - 15/(60*24)) wcd,
               (SELECT intsize_csec, end_time,
                       SUM(CASE WHEN metric_name = 'Database Wait Time Ratio'
                                THEN value
                                ELSE 0 END) user_wait_time_pct,
                       SUM(CASE WHEN metric_name = 'Database Time Per Sec'
                                THEN value / 100
                                ELSE 0 END) db_time_ps,
                       SUM(CASE WHEN metric_name = 'CPU Usage Per Sec'
                                 THEN value / 100
                                 ELSE 0 END) cpu_time_ps,
                       SUM(CASE WHEN metric_name = 'Host CPU Utilization (%)'
                                 THEN value
                                 ELSE 0 END) host_cpu_usage_pct
                  FROM v$sysmetric_history
                 WHERE metric_name IN ('Database Wait Time Ratio',
                                       'Database Time Per Sec',
                                        'CPU Usage Per Sec',
                                        'Host CPU Utilization (%)')
                   AND group_id = 2
                   AND end_time >= SYSDATE - 15/(60*24)
                 GROUP BY intsize_csec, end_time) md
         WHERE wcn.wait_class_id = wcd.wait_class_id
           AND wcd.intsize_csec = md.intsize_csec
           AND wcd.end_time = md.end_time
           AND :4 != 'BASIC'
         ORDER BY md.end_time ASC
         ]]>
      </Property>
      <Property NAME="SQLINPARAM1" SCOPE="INSTANCE">CPUTimingEnabled</Property>
      <Property NAME="SQLINPARAM2" SCOPE="INSTANCE">CPUCount</Property>
      <Property NAME="SQLINPARAM3" SCOPE="INSTANCE">TimedStatistics</Property>
      <Property NAME="SQLINPARAM4" SCOPE="INSTANCE">StatisticsLevel</Property>
      <Property NAME="MachineName" SCOPE="INSTANCE">MachineName</Property>
      <Property NAME="Port" SCOPE="INSTANCE">Port</Property>
      <Property NAME="SID" SCOPE="INSTANCE" OPTIONAL="TRUE">SID</Property>
      <Property NAME="UserName" SCOPE="INSTANCE">UserName</Property>
      <Property NAME="password" SCOPE="INSTANCE">password</Property>
      <Property NAME="Role" SCOPE="INSTANCE" OPTIONAL="TRUE">Role</Property>
    </QueryDescriptor>

  <PushDescriptor RECVLET_ID="AQMetrics">
    <Property NAME="QueueName" SCOPE="GLOBAL">ALERT_QUE</Property>
    <Property NAME="MachineName" SCOPE="INSTANCE">MachineName</Property>
    <Property NAME="Port" SCOPE="INSTANCE">Port</Property>
    <Property NAME="SID" SCOPE="INSTANCE">SID</Property>
    <Property NAME="UserName" SCOPE="INSTANCE">UserName</Property>
    <Property NAME="password" SCOPE="INSTANCE">password</Property>
    <Property NAME="Role" SCOPE="INSTANCE" OPTIONAL="TRUE">Role</Property>
    <Property NAME="InstanceName" SCOPE="INSTANCE">InstanceName</Property>
  </PushDescriptor>

  </Metric>
 <!--
  ======================================================================
  == Category:         Server-generated alert File
  == Collection Level: Recommended
  == Purpose:          Alerts, Trending
  ======================================================================
    -->
  <Metric NAME="file" TYPE="TABLE">
    <ValidIf>
       <CategoryProp NAME="VersionCategory" CHOICES="10gR1;10gR2;10gR203;11gR1;11gR2"/>
    </ValidIf>

    <Display>
      <Label NLSID="file">Database Files</Label>
    </Display>
    <TableDescriptor>
      <ColumnDescriptor NAME="time" TYPE="STRING" IS_TIMESTAMP="TRUE" TRANSIENT="TRUE" HELP="NO_HELP">
        <Display>
          <Label NLSID="time_series_time">Time</Label>
        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="file_name" TYPE="STRING" IS_KEY="TRUE">
          <Display>
            <Label NLSID="file_name">File Name</Label>
          </Display>
        </ColumnDescriptor>
      <ColumnDescriptor NAME="read_cs" TYPE="NUMBER" IS_KEY="FALSE">
          <Display>
            <Label NLSID="file_read_cs">Average File Read Time (centi-seconds)</Label>
          </Display>
        </ColumnDescriptor>
      <ColumnDescriptor NAME="write_cs" TYPE="NUMBER" IS_KEY="FALSE">
          <Display>
            <Label NLSID="file_write_cs">Average File Write Time (centi-seconds)</Label>
          </Display>
        </ColumnDescriptor>
    </TableDescriptor>
    <QueryDescriptor FETCHLET_ID="SQL">
      <Property NAME="STATEMENT" SCOPE="GLOBAL">
      <![CDATA[
         SELECT TO_CHAR(CAST(d.end_time AS TIMESTAMP) AT TIME ZONE 'GMT',
                        'YYYY-MM-DD HH24:MI:SS TZD'),
                n.name, d.average_read_time, d.average_write_time
         FROM v$dbfile n, v$filemetric d
         WHERE d.file_id = n.file#
         AND :1 != 'BASIC'
         ORDER BY d.end_time ASC

      ]]>
      </Property>
	   <Property NAME="SQLINPARAM1" SCOPE="INSTANCE">StatisticsLevel</Property>
      <Property NAME="MachineName" SCOPE="INSTANCE">MachineName</Property>
      <Property NAME="Port" SCOPE="INSTANCE">Port</Property>
      <Property NAME="SID" SCOPE="INSTANCE">SID</Property>
      <Property NAME="UserName" SCOPE="INSTANCE">UserName</Property>
      <Property NAME="password" SCOPE="INSTANCE">password</Property>
      <Property NAME="Role" SCOPE="INSTANCE" OPTIONAL="TRUE">Role</Property>
    </QueryDescriptor>
     <PushDescriptor RECVLET_ID="AQMetrics">
       <Property NAME="QueueName" SCOPE="GLOBAL">ALERT_QUE</Property>
       <Property NAME="MachineName" SCOPE="INSTANCE">MachineName</Property>
       <Property NAME="Port" SCOPE="INSTANCE">Port</Property>
       <Property NAME="SID" SCOPE="INSTANCE">SID</Property>
       <Property NAME="UserName" SCOPE="INSTANCE">UserName</Property>
       <Property NAME="password" SCOPE="INSTANCE">password</Property>
       <Property NAME="Role" SCOPE="INSTANCE" OPTIONAL="TRUE">Role</Property>
       <Property NAME="InstanceName" SCOPE="INSTANCE">InstanceName</Property>
       <Property NAME="KeyField" SCOPE="GLOBAL">OBJECT_NAME</Property>
       <Property NAME="KeyColumn" SCOPE="GLOBAL">file_name</Property>
     </PushDescriptor>
  </Metric>

    <!--
  ======================================================================
  == Category:         Server-generated alert Service
  == Collection Level: Recommended
  == Purpose:          Alerts, Trending
  ==
  == Comments:         Upload 1 min average value every 15 minutes
  ======================================================================
    -->
   
	<Metric NAME="service" TYPE="TABLE">
		<ValidIf>
			<CategoryProp NAME="VersionCategory" CHOICES="10gR1;10gR2;10gR203;11gR1;11gR2"/>
		</ValidIf>
		<Display>
			<Label NLSID="service">Database Services</Label>
		</Display>
		<TableDescriptor>
			<ColumnDescriptor NAME="time" TYPE="STRING" IS_TIMESTAMP="TRUE" TRANSIENT="TRUE" HELP="NO_HELP">
				<Display>
					<Label NLSID="time_series_time">Time</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="name" TYPE="STRING" IS_KEY="TRUE">
				<Display>
					<Label NLSID="service_name">Service Name</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="elapsed_cs" TYPE="NUMBER" IS_KEY="FALSE">
				<Display>
					<Label NLSID="service_elapsed_cs">Service Response Time (per user call) (microseconds)</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="cpu_cs" TYPE="NUMBER" IS_KEY="FALSE">
				<Display>
					<Label NLSID="service_cpu_cs">Service CPU Time (per user call) (microseconds)</Label>
				</Display>
			</ColumnDescriptor>
		</TableDescriptor>
		<QueryDescriptor FETCHLET_ID="SQL">
                   <ValidIf>
                     <CategoryProp NAME="VersionCategory" CHOICES="10gR1;10gR2;10gR203;11gR1;11gR2"/>
                   </ValidIf>
			<Property NAME="STATEMENT" SCOPE="GLOBAL"><![CDATA[
        SELECT TO_CHAR(CAST(d.end_time AS TIMESTAMP) AT TIME ZONE 'GMT',
                       'YYYY-MM-DD HH24:MI:SS TZD') time,
               d.service_name,
               AVG(d.elapsedpercall), AVG(d.cpupercall)
          FROM v$servicemetric_history d
         WHERE d.end_time >= SYSDATE - 15/(60*24) AND :1 != 'BASIC'
         AND d.group_id = 6
         GROUP BY d.end_time, d.service_name
         ORDER BY d.end_time ASC
      ]]></Property>
			<Property NAME="SQLINPARAM1" SCOPE="INSTANCE">StatisticsLevel</Property>
			<Property NAME="MachineName" SCOPE="INSTANCE">MachineName</Property>
			<Property NAME="Port" SCOPE="INSTANCE">Port</Property>
			<Property NAME="SID" SCOPE="INSTANCE">SID</Property>
			<Property NAME="UserName" SCOPE="INSTANCE">UserName</Property>
			<Property NAME="password" SCOPE="INSTANCE">password</Property>
			<Property NAME="Role" SCOPE="INSTANCE" OPTIONAL="TRUE">Role</Property>
		</QueryDescriptor>
		<PushDescriptor RECVLET_ID="AQMetrics">
			<Property NAME="QueueName" SCOPE="GLOBAL">ALERT_QUE</Property>
			<Property NAME="MachineName" SCOPE="INSTANCE">MachineName</Property>
			<Property NAME="Port" SCOPE="INSTANCE">Port</Property>
			<Property NAME="SID" SCOPE="INSTANCE">SID</Property>
			<Property NAME="UserName" SCOPE="INSTANCE">UserName</Property>
			<Property NAME="password" SCOPE="INSTANCE">password</Property>
			<Property NAME="Role" SCOPE="INSTANCE" OPTIONAL="TRUE">Role</Property>
			<Property NAME="InstanceName" SCOPE="INSTANCE">InstanceName</Property>
			<Property NAME="KeyField" SCOPE="GLOBAL">OBJECT_NAME</Property>
			<Property NAME="KeyColumn" SCOPE="GLOBAL">name</Property>
		</PushDescriptor>
	</Metric>

 <!--
  ======================================================================
  == INTERNAL AWR QUERY for summary (hour per row) metrics data
  ======================================================================
    -->
  <Metric NAME="summary_AWR" TYPE="TABLE" USAGE_TYPE="HIDDEN">
    <ValidIf>
       <CategoryProp NAME="VersionCategory" CHOICES="10gR1;10gR2;10gR203;11gR1;11gR2"/>
    </ValidIf>
    <TableDescriptor>
      <ColumnDescriptor NAME="time" TYPE="STRING" IS_TIMESTAMP="TRUE" 
            TRANSIENT="TRUE" HELP="NO_HELP"/>
      <ColumnDescriptor NAME="key_name" TYPE="STRING" IS_KEY="TRUE"/>
      <ColumnDescriptor NAME="metric_avg" TYPE="NUMBER" IS_KEY="FALSE"/>
      <ColumnDescriptor NAME="metric_min" TYPE="NUMBER" IS_KEY="FALSE"/>
      <ColumnDescriptor NAME="metric_max" TYPE="NUMBER" IS_KEY="FALSE"/>
    </TableDescriptor>
    <QueryDescriptor FETCHLET_ID="SQL">
      <Property NAME="STATEMENT" SCOPE="GLOBAL">
      <![CDATA[
    DECLARE
        metric_category_var VARCHAR2(80);
        metric_name_var  VARCHAR2(80);
        key_name_var  VARCHAR2(80);
        days_var  INTEGER;
        start_date_var  VARCHAR2(80);
        end_date_var  VARCHAR2(80);
              
    TYPE        
          values_cursor_type IS REF CURSOR;
          values_cursor values_cursor_type;

    BEGIN
    
    -- do this useless stuff, cause if you don't use every bind var
    -- the agent won't give you back any rows
    metric_category_var := :1;
    metric_name_var := :2;
    key_name_var := :3;
    days_var := to_number(:4);
    start_date_var := :5;
    end_date_var := :6;

    IF metric_category_var = 'instance_efficiency'  OR 
       metric_category_var = 'instance_throughput'  OR 
       metric_category_var = 'sga_pool_wastage'     OR 
       metric_category_var = 'Database_Resource_Usage'  OR 
       metric_category_var = 'rac_global_cache'  OR 
       metric_category_var = 'system_response_time_per_call'
    THEN 

      OPEN values_cursor FOR
     SELECT   m.end_time,  null, m.average,  m.minval, m.maxval
      FROM  dba_hist_sysmetric_summary m,   v$alert_types a, v$threshold_types t, v$instance i 
      WHERE  a.internal_metric_category = metric_category_var
       AND a.reason_id = t.alert_reason_id   
       AND t.metrics_id = m.metric_id   
       AND i.instance_number = m.instance_number
       AND m.group_id =2  
       AND a.internal_metric_name = :2
       AND (((start_date_var IS NOT NULL) AND (start_date_var <> 'NONE') AND (m.end_time >= TO_DATE(start_date_var, 'MM-DD-YYYY HH24'))
                AND (m.end_time <= TO_DATE(end_date_var, 'MM-DD-YYYY HH24')))
            OR
            ((start_date_var = 'NONE') AND (m.end_time >= SYSDATE - days_var)))
      ORDER BY m.end_time ASC;

    ELSIF metric_category_var = 'problemTbsp' 
    THEN
    OPEN values_cursor FOR      
      SELECT  TO_CHAR(CAST(to_timestamp(rtime, 'MM/DD/YYYY HH24:MI:SS') AS TIMESTAMP),
                          'YYYY-MM-DD HH24:MI:SS TZD'),
                 tsname,
        	-- do case three times for min/max/avg
	      CASE 
                WHEN (:2 = 'bytesFree') THEN 
                     mb_free
                WHEN (:2 = 'pctUsed') THEN 
                     pctUsed
              END,
	      CASE 
                WHEN (:2 = 'bytesFree') THEN 
                     mb_free
                WHEN (:2 = 'pctUsed') THEN 
                     pctUsed
              END,
	      CASE 
                WHEN (:2 = 'bytesFree') THEN 
                     mb_free
                WHEN (:2 = 'pctUsed') THEN 
                     pctUsed
              END
           FROM 
          (SELECT rtime, ts.tsname, 
                  (tsu.tablespace_usedsize / tsu.tablespace_maxsize)*100 pctUsed,
                  (tablespace_maxsize - tablespace_usedsize)*t.block_size/1024/1024 mb_free
	   FROM 
   	     (SELECT UNIQUE  ts#, tsname  
        	FROM  dba_hist_tablespace_stat
		WHERE tsname = :3 OR 'NONE' = :3) ts,  
   	     dba_hist_tbspc_space_usage  tsu,
             dba_tablespaces t
	  WHERE  ts.ts# = tsu.tablespace_id
            AND ts.tsname = t.tablespace_name
            AND (((start_date_var is not NULL) AND (start_date_var <> 'NONE')
            AND (to_timestamp(rtime, 'MM/DD/YYYY HH24:MI:SS') >= TO_DATE(start_date_var, 'MM-DD-YYYY HH24')) 
            AND (to_timestamp(rtime, 'MM/DD/YYYY HH24:MI:SS') <= TO_DATE(end_date_var, 'MM-DD-YYYY HH24')))
            OR
            ((start_date_var = 'NONE') AND (to_timestamp(rtime, 'MM/DD/YYYY HH24:MI:SS') >= SYSDATE - days_var))) )
      ORDER BY tsname, rtime ASC;

        END IF;

    :7 := values_cursor;

    END;
      ]]></Property>

     <Property NAME="SQLINPARAM1" SCOPE="USER">MetricCategory</Property>
     <Property NAME="SQLINPARAM2" SCOPE="USER">MetricName</Property>
     <Property NAME="SQLINPARAM3" SCOPE="USER">KeyValue</Property>
     <Property NAME="SQLINPARAM4" SCOPE="USER">Duration</Property>
     <Property NAME="SQLINPARAM5" SCOPE="USER">StartDate</Property>
     <Property NAME="SQLINPARAM6" SCOPE="USER">EndDate</Property>
     <Property NAME="SQLOUTPARAMPOS" SCOPE="GLOBAL">7</Property>
     <Property NAME="SQLOUTPARAMTYPE" SCOPE="GLOBAL">SQL_CURSOR</Property> 
      <Property NAME="MachineName" SCOPE="INSTANCE">MachineName</Property>
      <Property NAME="Port" SCOPE="INSTANCE">Port</Property>
      <Property NAME="SID" SCOPE="INSTANCE">SID</Property>
      <Property NAME="UserName" SCOPE="INSTANCE">UserName</Property>
      <Property NAME="password" SCOPE="INSTANCE">password</Property>
      <Property NAME="Role" SCOPE="INSTANCE" OPTIONAL="TRUE">Role</Property>
    </QueryDescriptor>
  </Metric>

 <!--
  ======================================================================
  == INTERNAL AWR QUERY for 1 hour of metrics data
  ======================================================================
    -->
  <Metric NAME="hour_AWR" TYPE="TABLE" USAGE_TYPE="HIDDEN">
    <ValidIf>
       <CategoryProp NAME="VersionCategory" CHOICES="10gR1;10gR2;10gR203;11gR1;11gR2"/>
    </ValidIf>
    <TableDescriptor>
      <ColumnDescriptor NAME="time" TYPE="STRING" IS_TIMESTAMP="TRUE" 
            TRANSIENT="TRUE" HELP="NO_HELP"/>
      <ColumnDescriptor NAME="key_name" TYPE="STRING" IS_KEY="TRUE"/>
      <ColumnDescriptor NAME="metric_value" TYPE="NUMBER" IS_KEY="FALSE"/>
    </TableDescriptor>
    <QueryDescriptor FETCHLET_ID="SQL">
      <Property NAME="STATEMENT" SCOPE="GLOBAL">
      <![CDATA[
    DECLARE
        metric_category_var VARCHAR2(80);
        metric_name_var  VARCHAR2(80);
        key_name_var  VARCHAR2(80);
        cpu_timing_var VARCHAR2(30);
        cpu_count_var  VARCHAR2(30);
        timestat_var  VARCHAR2(30);
        statlevel_var  VARCHAR2(30);
              
    TYPE        
          values_cursor_type IS REF CURSOR;
          values_cursor values_cursor_type;

    BEGIN
    
    -- do this useless stuff, cause if you don't use every bind var
    -- the agent won't give you back any rows
    metric_category_var := :1;
    metric_name_var := :2;
    key_name_var := :3;
    cpu_timing_var := :4;
    cpu_count_var := :5;
    timestat_var := :6;
    statlevel_var := :7;

    IF metric_category_var = 'instance_efficiency'  OR 
       metric_category_var = 'instance_throughput'  OR 
       metric_category_var = 'sga_pool_wastage'     OR 
       metric_category_var = 'Database_Resource_Usage'  OR 
       metric_category_var = 'rac_global_cache'  OR 
       metric_category_var = 'system_response_time_per_call'
    THEN 
      OPEN values_cursor FOR
              SELECT /*+ ORDERED */
                 TO_CHAR(CAST(m.end_time AS TIMESTAMP),
                        'YYYY-MM-DD HH24:MI:SS TZD'),
            null,
                        m.value
          FROM v$alert_types a, v$threshold_types t, v$sysmetric_history m
         WHERE a.internal_metric_category = metric_category_var
           AND a.reason_id = t.alert_reason_id
           AND t.metrics_id = m.metric_id
           AND a.internal_metric_name = :2
           AND m.group_id = 2
           AND :7 != 'BASIC'
         ORDER BY m.end_time ASC;

    ELSIF metric_category_var = 'problemTbsp' 
    THEN

        -- just get instant data, we don't have one hours of data for this metric!
    OPEN values_cursor FOR  
        SELECT 
                 TO_CHAR(CAST(sysdate AS TIMESTAMP),
                        'YYYY-MM-DD HH24:MI:SS TZD'),
                m.tablespace_name,
	      CASE 
                WHEN (:2 = 'bytesFree') THEN 
                        (m.tablespace_size - m.used_space)*t.block_size/1024/1024
                WHEN (:2 = 'pctUsed') THEN 
                        m.used_percent
              END
        FROM  dba_tablespace_usage_metrics m, dba_tablespaces t
        WHERE :7 != 'BASIC'
                AND t.tablespace_name = m.tablespace_name
              AND (m.tablespace_name = :3 OR 'NONE' = :3)
        ORDER BY m.tablespace_name;
	
        ELSIF metric_category_var = 'wait_bottlenecks' 
	THEN

    OPEN values_cursor FOR
    SELECT time, null key_value, 
          CASE WHEN (:2 = 'user_wait_time_pct') THEN user_wait_time_pct 
           WHEN (:2 = 'host_cpu_usage_pct') THEN host_cpu_usage_pct 
           WHEN (:2 = 'DUMMY') THEN active_sessions
           WHEN (:2 = 'userio_wait_cnt') THEN userio_wait_cnt
           WHEN (:2 = 'user_cpu_time_cnt') THEN user_cpu_time_cnt
           WHEN (:2 = 'other_wait_cnt') THEN 
            active_sessions - user_cpu_time_cnt - userio_wait_cnt
               WHEN (:2 = 'avg_user_cpu_time_pct') THEN 
            100*user_cpu_time_cnt / TO_NUMBER(:5)
            END
    FROM (
          SELECT TO_CHAR(CAST(md.end_time AS TIMESTAMP),
                       'YYYY-MM-DD HH24:MI:SS TZD') time,
          
               md.user_wait_time_pct user_wait_time_pct,
               DECODE(:4, 'TRUE', md.host_cpu_usage_pct, NULL) host_cpu_usage_pct,
           CASE WHEN (md.cpu_time_ps + wcd.users > md.db_time_ps) THEN null 
            ELSE  md.db_time_ps END active_sessions, 
           CASE WHEN (0 > wcd.users) THEN null ELSE  wcd.users END userio_wait_cnt,
           CASE WHEN (0 > md.cpu_time_ps) OR (md.cpu_time_ps > TO_NUMBER(:5) ) THEN null 
            ELSE md.cpu_time_ps END user_cpu_time_cnt
            FROM (SELECT DISTINCT wait_class_id
                  FROM v$event_name
                 WHERE wait_class = 'User I/O'
                   AND :6 = 'TRUE') wcn,
               (SELECT wait_class_id,
                       intsize_csec, end_time,
                       time_waited / intsize_csec users
                  FROM v$waitclassmetric_history) wcd,
               (SELECT intsize_csec, end_time,
                       SUM(CASE WHEN metric_name = 'Database Wait Time Ratio'
                                THEN value
                                ELSE 0 END) user_wait_time_pct,
                       SUM(CASE WHEN metric_name = 'Database Time Per Sec'
                                THEN value / 100
                                ELSE 0 END) db_time_ps,
                       SUM(CASE WHEN metric_name = 'CPU Usage Per Sec'
                                 THEN value / 100
                                 ELSE 0 END) cpu_time_ps,
                       SUM(CASE WHEN metric_name = 'Host CPU Utilization (%)'
                                 THEN value
                                 ELSE 0 END) host_cpu_usage_pct
                  FROM v$sysmetric_history
                 WHERE metric_name IN ('Database Wait Time Ratio',
                                       'Database Time Per Sec',
                                        'CPU Usage Per Sec',
                                        'Host CPU Utilization (%)')
                   AND group_id = 2
                 GROUP BY intsize_csec, end_time) md
           WHERE wcn.wait_class_id = wcd.wait_class_id
             AND wcd.intsize_csec = md.intsize_csec
             AND wcd.end_time = md.end_time
             AND :7 != 'BASIC'
       )
         ORDER BY time ASC;

    ELSIF metric_category_var = 'UserBlock' 
    THEN

    OPEN values_cursor FOR      
        SELECT /*+ ORDERED */
               TO_CHAR(CAST(d.end_time AS TIMESTAMP),
                            'YYYY-MM-DD HH24:MI:SS TZD') time,
                    'SID: '||d.entity_id||' Serial#: '||d.entity_sequence id, 
             d.value
          FROM v$alert_types a, v$threshold_types t, v$metric_history d
         WHERE a.internal_metric_category = 'UserBlock'
           AND a.internal_metric_name = 'count'
           AND a.reason_id = t.alert_reason_id
           AND t.metrics_id = d.metric_id
           AND d.group_id = 4
           AND :7 != 'BASIC'
       AND (('SID: '||d.entity_id||' Serial#: '||d.entity_sequence) = :3 OR 'NONE' = :3)
         ORDER BY id, d.end_time ASC;

    ELSIF metric_category_var = 'wait_sess_cls' 
    THEN
        
      OPEN values_cursor FOR
          SELECT TO_CHAR(CAST(wcd.end_time AS TIMESTAMP),
                       'YYYY-MM-DD HH24:MI:SS TZD') time,
               wcn.wait_class,
           CASE WHEN (:2 = 'avg_users_waiting_on_class') THEN wcd.average_waiter_count
            WHEN (:2 = 'dbtime_waitclass_pct') THEN wcd.dbtime_in_wait 
            END
          FROM (SELECT DISTINCT wait_class, wait_class_id
                  FROM v$event_name) wcn,
               (SELECT end_time, wait_class_id,
                       average_waiter_count, dbtime_in_wait
                  FROM v$waitclassmetric_history) wcd
         WHERE wcn.wait_class_id = wcd.wait_class_id
       AND (wcn.wait_class = :3 OR 'NONE' = :3)
           AND :7 != 'BASIC'
         ORDER BY wcn.wait_class, wcd.end_time ASC;

    ELSIF metric_category_var = 'file' 
    THEN

     OPEN values_cursor FOR
         SELECT TO_CHAR(CAST(d.end_time AS TIMESTAMP),
                        'YYYY-MM-DD HH24:MI:SS TZD'),
                n.name, 
        CASE WHEN (:2 = 'read_cs') THEN d.average_read_time
             WHEN (:2 = 'write_cs') THEN d.average_write_time
             END
         FROM v$dbfile n, v$filemetric_history d
         WHERE d.file_id = n.file#
       AND (n.name = :3 OR 'NONE' = :3)
           AND :7 != 'BASIC'
         ORDER BY n.name, d.end_time ASC;

    ELSIF metric_category_var = 'service' 
    THEN

      OPEN values_cursor FOR
          SELECT TO_CHAR(CAST(end_time AS TIMESTAMP),
                       'YYYY-MM-DD HH24:MI:SS TZD') time,
               service_name,
               CASE WHEN (:2 = 'elapsed_cs') THEN elapsedpercall
            WHEN (:2 = 'cpu_cs') THEN cpupercall
            END
          FROM v$servicemetric_history
         WHERE :7 != 'BASIC' AND group_id = 6
       AND (service_name = :3 OR 'NONE' = :3)
         ORDER BY service_name, end_time ASC;

        END IF;

    :8 := values_cursor;

    END;
      ]]></Property>

     <Property NAME="SQLINPARAM1" SCOPE="USER">MetricCategory</Property>
     <Property NAME="SQLINPARAM2" SCOPE="USER">MetricName</Property>
     <Property NAME="SQLINPARAM3" SCOPE="USER">KeyValue</Property>
     <Property NAME="SQLINPARAM4" SCOPE="INSTANCE">CPUTimingEnabled</Property>
     <Property NAME="SQLINPARAM5" SCOPE="INSTANCE">CPUCount</Property>
     <Property NAME="SQLINPARAM6" SCOPE="INSTANCE">TimedStatistics</Property>
     <Property NAME="SQLINPARAM7" SCOPE="INSTANCE">StatisticsLevel</Property>
     <Property NAME="SQLOUTPARAMPOS" SCOPE="GLOBAL">8</Property>
     <Property NAME="SQLOUTPARAMTYPE" SCOPE="GLOBAL">SQL_CURSOR</Property> 
      <Property NAME="MachineName" SCOPE="INSTANCE">MachineName</Property>
      <Property NAME="Port" SCOPE="INSTANCE">Port</Property>
      <Property NAME="SID" SCOPE="INSTANCE">SID</Property>
      <Property NAME="UserName" SCOPE="INSTANCE">UserName</Property>
      <Property NAME="password" SCOPE="INSTANCE">password</Property>
      <Property NAME="Role" SCOPE="INSTANCE" OPTIONAL="TRUE">Role</Property>
    </QueryDescriptor>
  </Metric>

 <!--
  ======================================================================
  == INTERNAL AWR QUERY for all current values of metrics that we now get from AWR
  == we do one big optimized union all to retrieve these values
  ======================================================================
    -->
  <Metric NAME="current_AWR" TYPE="TABLE" USAGE_TYPE="HIDDEN">
    <ValidIf>
       <CategoryProp NAME="VersionCategory" CHOICES="10gR1;10gR2;10gR203;11gR1;11gR2"/>
    </ValidIf>
    <TableDescriptor>
      <ColumnDescriptor NAME="time" TYPE="STRING" IS_TIMESTAMP="TRUE" 
			TRANSIENT="TRUE" HELP="NO_HELP"/>
      <ColumnDescriptor NAME="metric_category" TYPE="STRING" IS_KEY="TRUE"/>
      <ColumnDescriptor NAME="metric_name" TYPE="STRING" IS_KEY="TRUE"/>
      <ColumnDescriptor NAME="key_name" TYPE="STRING" IS_KEY="TRUE"/>
      <ColumnDescriptor NAME="group_id_key" TYPE="NUMBER" IS_KEY="TRUE"/>
      <ColumnDescriptor NAME="metric_value" TYPE="NUMBER" IS_KEY="FALSE"/>
    </TableDescriptor>
    <QueryDescriptor FETCHLET_ID="SQL">
      <Property NAME="STATEMENT" SCOPE="GLOBAL">
      <![CDATA[
	DECLARE
	    cpu_timing_var VARCHAR2(30);
	    cpu_count_var  VARCHAR2(30);
	    timestat_var  VARCHAR2(30);
	    statlevel_var  VARCHAR2(30);
	          
	TYPE        
          values_cursor_type IS REF CURSOR;
          values_cursor values_cursor_type;

	BEGIN
	
	-- do this useless stuff, cause if you dont use every bind var
	-- the agent won't give you back any rows
	cpu_timing_var := :1;
	cpu_count_var := :2;
	timestat_var := :3;
	statlevel_var := :4;

	OPEN values_cursor FOR
  SELECT /*+ ORDERED */
-- all sysmetrics
                 TO_CHAR(CAST(m.end_time AS TIMESTAMP),
                        'YYYY-MM-DD HH24:MI:SS TZD'),
            a.internal_metric_category, a.internal_metric_name, null, m.group_id, m.value
          FROM v$alert_types a, v$threshold_types t, v$sysmetric m
         WHERE a.reason_id = t.alert_reason_id
           AND t.metrics_id = m.metric_id
           AND m.group_id = 2
           AND a.internal_metric_category != 'wait_bottlenecks'  -- causes duplicate problem
UNION ALL
-- problemtablespace bytes free
  SELECT 
                 TO_CHAR(CAST(sysdate AS TIMESTAMP),
                        'YYYY-MM-DD HH24:MI:SS TZD'),
                'problemTbsp',  'bytesFree', m.tablespace_name, 0,
                        (m.tablespace_size - m.used_space)*t.block_size/1024/1024
  FROM  dba_tablespace_usage_metrics m, dba_tablespaces t
  WHERE t.tablespace_name = m.tablespace_name
UNION ALL
-- Problemtbsp  percent used
    SELECT 
                 TO_CHAR(CAST(sysdate AS TIMESTAMP),
                        'YYYY-MM-DD HH24:MI:SS TZD'),
                'problemTbsp',  'pctUsed', m.tablespace_name, 0,
                m.used_percent
  FROM  dba_tablespace_usage_metrics m, dba_tablespaces t
  WHERE t.tablespace_name = m.tablespace_name
UNION ALL
-- Wait bottleneck 
  SELECT TO_CHAR(CAST(end_time AS TIMESTAMP),
                        'YYYY-MM-DD HH24:MI:SS TZD'),
      'wait_bottlenecks', 
       CASE WHEN metric_name = 'Database Wait Time Ratio' THEN 'user_wait_time_pct'
             WHEN metric_name = 'Database Time Per Sec' THEN 'ACTIVE SESSIONS?'
             WHEN metric_name = 'CPU Usage Per Sec' THEN 'user_cpu_time_cnt'
             WHEN metric_name = 'Host CPU Utilization (%)' THEN 'host_cpu_usage_pct'
          END, null, group_id,
       CASE WHEN metric_name = 'Database Wait Time Ratio' THEN value
             WHEN metric_name = 'Database Time Per Sec' THEN value / 100
             WHEN metric_name = 'CPU Usage Per Sec' THEN value / 100
             WHEN metric_name = 'Host CPU Utilization (%)' THEN value 
          END
      FROM v$sysmetric
      WHERE metric_name IN ('Database Wait Time Ratio',
                                       'Database Time Per Sec',
                                        'CPU Usage Per Sec',
                                        'Host CPU Utilization (%)')
                   AND group_id = 2                
UNION ALL  
    -- wait bottleneck:  userio_wait_cnt
  select TO_CHAR(CAST(wcd.end_time AS TIMESTAMP),
                        'YYYY-MM-DD HH24:MI:SS TZD'), 
  'wait_bottlenecks' , 'userio_wait_cnt', null,0,  wcd.users
  FROM (SELECT DISTINCT wait_class_id
                  FROM v$event_name
                 WHERE wait_class = 'User I/O') wcn,
               (SELECT wait_class_id,
                       intsize_csec, end_time, 
                       time_waited / intsize_csec users
                  FROM v$waitclassmetric) wcd
  WHERE wcn.wait_class_id = wcd.wait_class_id
UNION ALL
 --  wait bottleneck: other wiat cnt
  SELECT TO_CHAR(CAST(A.end_time AS TIMESTAMP),
                        'YYYY-MM-DD HH24:MI:SS TZD'), 
    'wait_bottlenecks', 'other_wait_cnt',  null, A.group_id,
    CASE WHEN 0 > ((A.value / 100) -  (B.value / 100) - C.users) THEN null
        ELSE (A.value / 100) -  (B.value / 100) - C.users END
  FROM v$sysmetric A, v$sysmetric B, 
    (SELECT wcd.users
      FROM (SELECT DISTINCT wait_class_id
                  FROM v$event_name
                 WHERE wait_class = 'User I/O') wcn,
            (SELECT wait_class_id, intsize_csec, end_time, 
                       time_waited / intsize_csec users
                  FROM v$waitclassmetric) wcd
      WHERE wcn.wait_class_id = wcd.wait_class_id) C
  WHERE A.metric_name = 'Database Time Per Sec'  AND B.metric_name = 'CPU Usage Per Sec'
    AND A.group_id = 2 AND B.group_id = 2
UNION ALL
    --  avg user cpu time pct
  SELECT TO_CHAR(CAST(end_time AS TIMESTAMP),
                        'YYYY-MM-DD HH24:MI:SS TZD'), 
      'wait_bottlenecks', 'avg_user_cpu_time_pct' ,null, group_id, 
      CASE WHEN (0 > value) THEN null
             WHEN ((value / 100)  > TO_NUMBER(:2)) THEN null
             ELSE 100 * (value / 100) / TO_NUMBER(:2)
             END
    FROM v$sysmetric
    WHERE metric_name =  'CPU Usage Per Sec'
                   AND group_id = 2     
UNION ALL
-- userblock
   SELECT /*+ ORDERED */
               TO_CHAR(CAST(d.end_time AS TIMESTAMP),
                            'YYYY-MM-DD HH24:MI:SS TZD') time,
		     'UserBlock', 'count', 'SID: '||d.entity_id||' Serial#: '||d.entity_sequence id,
          d.group_id, d.value
          FROM v$alert_types a, v$threshold_types t, v$metric d
         WHERE a.internal_metric_category = 'UserBlock'
           AND a.internal_metric_name = 'count'
           AND a.reason_id = t.alert_reason_id
           AND t.metrics_id = d.metric_id
           AND d.group_id = 4
UNION ALL
-- wait_sess_cls
SELECT TO_CHAR(CAST(wcd.end_time AS TIMESTAMP),
                       'YYYY-MM-DD HH24:MI:SS TZD') time,
        'wait_sess_cls', label, wcn.wait_class, 0,
          wcd.value
   FROM (SELECT DISTINCT wait_class, wait_class_id
          FROM v$event_name) wcn,
        (SELECT end_time, wait_class_id,'avg_users_waiting_on_class' as label
               ,average_waiter_count as value
          FROM v$waitclassmetric
         UNION ALL
         SELECT end_time, wait_class_id,'dbtime_waitclass_pct' as label
                , dbtime_in_wait as value
          FROM v$waitclassmetric) wcd
   WHERE wcn.wait_class_id = wcd.wait_class_id
UNION ALL
-- file:  read
SELECT TO_CHAR(CAST(d.end_time AS TIMESTAMP),
                        'YYYY-MM-DD HH24:MI:SS TZD'),
                'file', 'read_cs', n.name, 0, d.average_read_time
  FROM v$dbfile n, v$filemetric d
  WHERE d.file_id = n.file#
UNION ALL
    -- file:  write
SELECT TO_CHAR(CAST(d.end_time AS TIMESTAMP),
                        'YYYY-MM-DD HH24:MI:SS TZD'),
                'file', 'write_cs', n.name, 0, d.average_write_time
  FROM v$dbfile n, v$filemetric d
  WHERE d.file_id = n.file#
UNION ALL
   -- service:  elaspsed cs
   SELECT TO_CHAR(CAST(end_time AS TIMESTAMP),
                       'YYYY-MM-DD HH24:MI:SS TZD') time,
               'service', 'elapsed_cs', service_name, group_id, elapsedpercall
     FROM v$servicemetric
UNION ALL
    -- service cpu
  SELECT TO_CHAR(CAST(end_time AS TIMESTAMP),
                       'YYYY-MM-DD HH24:MI:SS TZD') time,
               'service', 'cpu_cs', service_name, group_id, cpupercall
  FROM v$servicemetric;


	:5 := values_cursor;

	END;
      ]]></Property>

     <Property NAME="SQLINPARAM1" SCOPE="INSTANCE">CPUTimingEnabled</Property>
     <Property NAME="SQLINPARAM2" SCOPE="INSTANCE">CPUCount</Property>
     <Property NAME="SQLINPARAM3" SCOPE="INSTANCE">TimedStatistics</Property>
     <Property NAME="SQLINPARAM4" SCOPE="INSTANCE">StatisticsLevel</Property>
     <Property NAME="SQLOUTPARAMPOS" SCOPE="GLOBAL">5</Property>
     <Property NAME="SQLOUTPARAMTYPE" SCOPE="GLOBAL">SQL_CURSOR</Property> 
      <Property NAME="MachineName" SCOPE="INSTANCE">MachineName</Property>
      <Property NAME="Port" SCOPE="INSTANCE">Port</Property>
      <Property NAME="SID" SCOPE="INSTANCE">SID</Property>
      <Property NAME="UserName" SCOPE="INSTANCE">UserName</Property>
      <Property NAME="password" SCOPE="INSTANCE">password</Property>
      <Property NAME="Role" SCOPE="INSTANCE" OPTIONAL="TRUE">Role</Property>
    </QueryDescriptor>
  </Metric>



    <!--
  ======================================================================
  == Category:         Server-generated alert system_response_time_per_call
  == Collection Level: Recommended
  == Purpose:          Alerts, Trending
  ======================================================================
    -->
  	<Metric NAME="system_response_time_per_call" TYPE="TABLE">
		<ValidIf>
			<CategoryProp NAME="VersionCategory" CHOICES="10gR1;10gR2;10gR203;11gR1;11gR2"/>
		</ValidIf>
		<Display>
			<Label NLSID="system_response_time_per_call">System Response Time Per Call</Label>
		</Display>
		<TableDescriptor>
			<ColumnDescriptor NAME="time" TYPE="STRING" IS_TIMESTAMP="TRUE" TRANSIENT="TRUE" HELP="NO_HELP">
				<Display>
					<Label NLSID="time_series_time">Time</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="time_cs" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="system_response_time_per_call_time_cs">Response Time (centi-seconds per call)</Label>
				</Display>
			</ColumnDescriptor>
		</TableDescriptor>
		<QueryDescriptor FETCHLET_ID="SQL">
			<Property NAME="STATEMENT" SCOPE="GLOBAL"><![CDATA[
          SELECT /*+ ORDERED */
                 TO_CHAR(CAST(m.end_time AS TIMESTAMP) AT TIME ZONE 'GMT',
                        'YYYY-MM-DD HH24:MI:SS TZD'),
                        m.value
          FROM v$alert_types a, v$threshold_types t, v$sysmetric_history m
         WHERE a.internal_metric_category = 'system_response_time_per_call'
           AND a.reason_id = t.alert_reason_id
           AND t.metrics_id = m.metric_id
           AND a.internal_metric_name = 'time_cs'
           AND m.group_id = 2
           AND m.end_time >= sysdate - 15 / (60 * 24)
           AND :1 != 'BASIC'
         ORDER BY m.end_time ASC
      ]]></Property>
			<Property NAME="SQLINPARAM1" SCOPE="INSTANCE">StatisticsLevel</Property>
			<Property NAME="MachineName" SCOPE="INSTANCE">MachineName</Property>
			<Property NAME="Port" SCOPE="INSTANCE">Port</Property>
			<Property NAME="SID" SCOPE="INSTANCE">SID</Property>
			<Property NAME="UserName" SCOPE="INSTANCE">UserName</Property>
			<Property NAME="password" SCOPE="INSTANCE">password</Property>
			<Property NAME="Role" SCOPE="INSTANCE" OPTIONAL="TRUE">Role</Property>
		</QueryDescriptor>
		<PushDescriptor RECVLET_ID="AQMetrics">
			<Property NAME="QueueName" SCOPE="GLOBAL">ALERT_QUE</Property>
			<Property NAME="MachineName" SCOPE="INSTANCE">MachineName</Property>
			<Property NAME="Port" SCOPE="INSTANCE">Port</Property>
			<Property NAME="SID" SCOPE="INSTANCE">SID</Property>
			<Property NAME="Role" SCOPE="INSTANCE" OPTIONAL="TRUE">Role</Property>
			<Property NAME="UserName" SCOPE="INSTANCE">UserName</Property>
			<Property NAME="password" SCOPE="INSTANCE">password</Property>
			<Property NAME="InstanceName" SCOPE="INSTANCE">InstanceName</Property>
		</PushDescriptor>
	</Metric>
    <!--
  ======================================================================
  == Category:         Server-generated alert Database Limits
  == Collection Level: Minimum
  == Purpose:          Alerts, Trending
  ======================================================================
    -->
 	<Metric NAME="Database_Resource_Usage" TYPE="TABLE">
		<ValidIf>
			<CategoryProp NAME="VersionCategory" CHOICES="10gR1;10gR2;10gR203;11gR1;11gR2"/>
		</ValidIf>
		<Display>
			<Label NLSID="resource_usage">Database Limits</Label>
		</Display>
		<TableDescriptor>
			<ColumnDescriptor NAME="time" TYPE="STRING" IS_TIMESTAMP="TRUE" TRANSIENT="TRUE" HELP="NO_HELP">
				<Display>
					<Label NLSID="time_series_time">Time</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="logons" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="logons">Current Logons Count</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="opencursors" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="opencursors">Current Open Cursors Count</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="user_limit" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="user_limit">User Limit Usage (%)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="process_usage" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="process_usage">Process Limit Usage (%)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="session_usage" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="session_usage">Session Limit Usage (%)</Label>

				</Display>
			</ColumnDescriptor>
		</TableDescriptor>
		<QueryDescriptor FETCHLET_ID="SQL">
			<Property NAME="STATEMENT" SCOPE="GLOBAL"><![CDATA[
          SELECT /*+ ORDERED */
                 TO_CHAR(CAST(m.end_time AS TIMESTAMP) AT TIME ZONE 'GMT',
                        'YYYY-MM-DD HH24:MI:SS TZD'),
               SUM(CASE WHEN a.internal_metric_name = 'logons'
                        THEN m.value ELSE 0 END) logons,
               SUM(CASE WHEN a.internal_metric_name = 'opencursors'
                        THEN m.value ELSE 0 END) opencursors,
               SUM(CASE WHEN a.internal_metric_name = 'user_limit'
                        THEN m.value ELSE 0 END) user_limit,
               SUM(CASE WHEN a.internal_metric_name = 'process_usage'
                        THEN m.value ELSE 0 END) process_usage,
               SUM(CASE WHEN a.internal_metric_name = 'session_usage'
                        THEN m.value ELSE 0 END) session_usage
          FROM v$alert_types a, v$threshold_types t, v$sysmetric m
         WHERE a.internal_metric_category = 'Database_Resource_Usage'
           AND a.reason_id = t.alert_reason_id
           AND t.metrics_id = m.metric_id
           AND m.group_id = 2
           AND :1 != 'BASIC'
         GROUP BY m.end_time
         ORDER BY m.end_time ASC
      ]]></Property>
			<Property NAME="SQLINPARAM1" SCOPE="INSTANCE">StatisticsLevel</Property>
			<Property NAME="MachineName" SCOPE="INSTANCE">MachineName</Property>
			<Property NAME="Port" SCOPE="INSTANCE">Port</Property>
			<Property NAME="SID" SCOPE="INSTANCE">SID</Property>
			<Property NAME="UserName" SCOPE="INSTANCE">UserName</Property>
			<Property NAME="password" SCOPE="INSTANCE">password</Property>
			<Property NAME="Role" SCOPE="INSTANCE" OPTIONAL="TRUE">Role</Property>
		</QueryDescriptor>
		<PushDescriptor RECVLET_ID="AQMetrics">
			<Property NAME="QueueName" SCOPE="GLOBAL">ALERT_QUE</Property>
			<Property NAME="MachineName" SCOPE="INSTANCE">MachineName</Property>
			<Property NAME="Port" SCOPE="INSTANCE">Port</Property>
			<Property NAME="SID" SCOPE="INSTANCE">SID</Property>
			<Property NAME="Role" SCOPE="INSTANCE" OPTIONAL="TRUE">Role</Property>
			<Property NAME="UserName" SCOPE="INSTANCE">UserName</Property>
			<Property NAME="password" SCOPE="INSTANCE">password</Property>
			<Property NAME="InstanceName" SCOPE="INSTANCE">InstanceName</Property>
		</PushDescriptor>
	</Metric>
    <!--
  ======================================================================

  == Category:         Server-generated alert instance_efficiency
  == Collection Level: Recommended
  == Purpose:          Server generated alert
  ======================================================================
  -->
 	<Metric NAME="instance_efficiency" TYPE="TABLE">
		<ValidIf>
			<CategoryProp NAME="VersionCategory" CHOICES="10gR1;10gR2;10gR203;11gR1;11gR2"/>
		</ValidIf>
		<Display>
			<Label NLSID="instance_efficiency">Efficiency</Label>
		</Display>
		<TableDescriptor>
			<ColumnDescriptor NAME="time" TYPE="STRING" IS_TIMESTAMP="TRUE" TRANSIENT="TRUE" HELP="NO_HELP">
				<Display>
					<Label NLSID="time_series_time">Time</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="bufcachehit_pct" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_efficiency_bufcachehit_pct">Buffer Cache Hit (%)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="inmem_sort_pct" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_efficiency_inmem_sort_pct">Sorts in Memory (%)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="redologalloc_hit_pct" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_efficiency_redologalloc_hit_pct">Redo Log Allocation Hit (%)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="cursorcachehit_pct" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_efficiency_cursor_hit_pct">Cursor Cache Hit (%)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="cpuusage_ps" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_efficiency_cpu_usage_ps">CPU Usage (per second)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="cpuusage_pt" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_efficiency_cpuusage_pt">CPU Usage (per transaction)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="pxdwngrd25_ps" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_efficiency_pxdwngrd25_ps">Parallel Execution Downgraded 25% or more (per second)</Label>
					<ShortName NLSID="instance_efficiency_pxdwngrd25_ps_sht">PX Downgrade >=25% (per sec)</ShortName>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="pxdwngrd50_ps" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_efficiency_pxdwngrd50_ps">Parallel Execution Downgraded 50% or more (per second)</Label>
					<ShortName NLSID="instance_efficiency_pxdwngrd50_ps_sht">PX Downgrade >=50% (per sec)</ShortName>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="pxdwngrd75_ps" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_efficiency_pxdwngrd75_ps">Parallel Execution Downgraded 75% or more (per second)</Label>
					<ShortName NLSID="instance_efficiency_pxdwngrd75_ps_sht">PX Downgrade >=75% (per sec)</ShortName>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="pxdwngrd_ps" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_efficiency_pxdwngrd_ps">Parallel Execution Downgraded (per second)</Label>
					<ShortName NLSID="instance_efficiency_pxdwngrd_ps_sht">PX Downgrade (per sec)</ShortName>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="pxdwngrdserial_ps" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_efficiency_pxdwngrdserial_ps">Parallel Execution Downgraded to Serial (per second)</Label>
					<ShortName NLSID="instance_efficiency_pxdwngrdserial_ps_sht">PX Serial Downgrade (per sec)</ShortName>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="pxdwngrdserial_pt" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_efficiency_pxdwngrdserial_pt">Parallel Execution Downgraded to Serial (per transaction)</Label>
					<ShortName NLSID="instance_efficiency_pxdwngrdserial_pt_sht">PX Serial Downgrade (per txn)</ShortName>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="cpu_time_pct" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_efficiency_cpu_time_pct">Database CPU Time (%)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="response_time_pt" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_efficiency_response_time_pt">Response Time (per transaction)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="dictionaryhit_pct" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_efficiency_dictionaryhit_pct">Data Dictionary Hit (%)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="libcache_hit_pct" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_efficiency_libcache_hit_pct">Library Cache Hit (%)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="libcache_miss_pct" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_efficiency_libcache_miss_pct">Library Cache Miss (%)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="pgacachehit_pct" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_efficiency_pgacachehit_pct">PGA Cache Hit (%)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="dictionarymiss_pct" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="instance_efficiency_dictionarymiss_pct">Row Cache Miss Ratio (%)</Label>

				</Display>
			</ColumnDescriptor>
		</TableDescriptor>
		<QueryDescriptor FETCHLET_ID="SQL">
			<Property NAME="STATEMENT" SCOPE="GLOBAL"><![CDATA[
          SELECT /*+ ORDERED USE_MERGE(m) */
                 TO_CHAR(CAST(m.end_time AS TIMESTAMP) AT TIME ZONE 'GMT',
                        'YYYY-MM-DD HH24:MI:SS TZD'),
               SUM(CASE WHEN a.internal_metric_name = 'bufcachehit_pct'
                        THEN m.value ELSE 0 END) bufcachehit_pct,
               SUM(CASE WHEN a.internal_metric_name = 'inmem_sort_pct'
                        THEN m.value ELSE 0 END) inmem_sort_pct,
               SUM(CASE WHEN a.internal_metric_name = 'redologalloc_hit_pct'
                        THEN m.value ELSE 0 END) redologalloc_hit_pct,
               SUM(CASE WHEN a.internal_metric_name = 'cursorcachehit_pct'
                        THEN m.value ELSE 0 END) cursorcachehit_pct,
               SUM(CASE WHEN a.internal_metric_name = 'cpuusage_ps'
                        THEN m.value ELSE 0 END) cpuusage_ps,
               SUM(CASE WHEN a.internal_metric_name = 'cpuusage_pt'
                        THEN m.value ELSE 0 END) cpuusage_pt,
               SUM(CASE WHEN a.internal_metric_name = 'pxdwngrd25_ps'
                        THEN m.value ELSE 0 END) pxdwngrd25_ps,
               SUM(CASE WHEN a.internal_metric_name = 'pxdwngrd50_ps'
                        THEN m.value ELSE 0 END) pxdwngrd50_ps,
               SUM(CASE WHEN a.internal_metric_name = 'pxdwngrd75_ps'
                        THEN m.value ELSE 0 END) pxdwngrd75_ps,
               SUM(CASE WHEN a.internal_metric_name = 'pxdwngrd_ps'
                        THEN m.value ELSE 0 END) pxdwngrd_ps,
               SUM(CASE WHEN a.internal_metric_name = 'pxdwngrdserial_ps'
                        THEN m.value ELSE 0 END) pxdwngrdserial_ps,
               SUM(CASE WHEN a.internal_metric_name = 'pxdwngrdserial_pt'
                        THEN m.value ELSE 0 END) pxdwngrdserial_pt,
               SUM(CASE WHEN a.internal_metric_name = 'cpu_time_pct'
                        THEN m.value ELSE 0 END) cpu_time_pct,
               SUM(CASE WHEN a.internal_metric_name = 'response_time_pt'
                        THEN m.value ELSE 0 END) response_time_pt,
               SUM(CASE WHEN a.internal_metric_name = 'dictionaryhit_pct'
                        THEN m.value ELSE 0 END) dictionaryhit_pct,
               SUM(CASE WHEN a.internal_metric_name = 'libcache_hit_pct'
                        THEN m.value ELSE 0 END) libcache_hit_pct,
               SUM(CASE WHEN a.internal_metric_name = 'libcache_miss_pct'
                        THEN m.value ELSE 0 END) libcache_miss_pct,
               SUM(CASE WHEN a.internal_metric_name = 'pgacachehit_pct'
                        THEN m.value ELSE 0 END) pgacachehit_pct,
               SUM(CASE WHEN a.internal_metric_name = 'dictionarymiss_pct'
                        THEN m.value ELSE 0 END) dictionarymiss_pct
          FROM v$alert_types a, v$threshold_types t, v$sysmetric m
         WHERE a.internal_metric_category = 'instance_efficiency'
           AND a.reason_id = t.alert_reason_id
           AND t.metrics_id = m.metric_id
           AND m.group_id = 2
           AND :1 != 'BASIC'
         GROUP BY m.end_time
         ORDER BY m.end_time ASC
      ]]></Property>
			<Property NAME="SQLINPARAM1" SCOPE="INSTANCE">StatisticsLevel</Property>
			<Property NAME="MachineName" SCOPE="INSTANCE">MachineName</Property>
			<Property NAME="Port" SCOPE="INSTANCE">Port</Property>
			<Property NAME="SID" SCOPE="INSTANCE">SID</Property>
			<Property NAME="UserName" SCOPE="INSTANCE">UserName</Property>
			<Property NAME="password" SCOPE="INSTANCE">password</Property>
			<Property NAME="Role" SCOPE="INSTANCE" OPTIONAL="TRUE">Role</Property>
		</QueryDescriptor>
		<PushDescriptor RECVLET_ID="AQMetrics">
			<Property NAME="QueueName" SCOPE="GLOBAL">ALERT_QUE</Property>
			<Property NAME="MachineName" SCOPE="INSTANCE">MachineName</Property>
			<Property NAME="Port" SCOPE="INSTANCE">Port</Property>
			<Property NAME="SID" SCOPE="INSTANCE">SID</Property>
			<Property NAME="Role" SCOPE="INSTANCE" OPTIONAL="TRUE">Role</Property>
			<Property NAME="UserName" SCOPE="INSTANCE">UserName</Property>
			<Property NAME="password" SCOPE="INSTANCE">password</Property>
			<Property NAME="InstanceName" SCOPE="INSTANCE">InstanceName</Property>
		</PushDescriptor>
	</Metric>
  <!--
  ======================================================================
  == Category:         Wait by Session Class
  == Collection Level: Minimum
  == Purpose:          Alerts, Trending
  ======================================================================
    -->
  <Metric NAME="wait_sess_cls" TYPE="TABLE">
    <ValidIf>
       <CategoryProp NAME="VersionCategory" CHOICES="10gR1;10gR2;10gR203;11gR1;11gR2"/>
    </ValidIf>
    <Display>
      <Label NLSID="wait_sess_cls">Waits by Wait Class</Label>
    </Display>
    <TableDescriptor>
      <ColumnDescriptor NAME="time" TYPE="STRING" IS_TIMESTAMP="TRUE" TRANSIENT="TRUE" HELP="NO_HELP">
        <Display>
          <Label NLSID="time_series_time">Time</Label>
        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="class" TYPE="STRING" IS_KEY="TRUE">
          <Display>
            <Label NLSID="wait_sess_cls_class">Wait Class</Label>
          </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="avg_users_waiting_on_class" TYPE="NUMBER">
        <Display>
          <Label NLSID="wait_sess_cls_avg_users">Average Users Waiting Count</Label>
        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="dbtime_waitclass_pct" TYPE="NUMBER">
        <Display>
          <Label NLSID="wait_sess_cls_dbtime_pct">Database Time Spent Waiting (%)</Label>
        </Display>
      </ColumnDescriptor>
    </TableDescriptor>
    <QueryDescriptor FETCHLET_ID="SQL">
      <Property NAME="STATEMENT" SCOPE="GLOBAL">
      <![CDATA[
        SELECT TO_CHAR(CAST(wcd.end_time AS TIMESTAMP) AT TIME ZONE 'GMT',
                       'YYYY-MM-DD HH24:MI:SS TZD') time,
               wcn.wait_class,
               AVG(wcd.average_waiter_count), AVG(wcd.dbtime_in_wait)
          FROM (SELECT DISTINCT wait_class, wait_class_id
                  FROM v$event_name) wcn,
               (SELECT end_time, wait_class_id,
                       average_waiter_count, dbtime_in_wait
                  FROM v$waitclassmetric_history) wcd
         WHERE wcn.wait_class_id = wcd.wait_class_id
           AND wcd.end_time >= SYSDATE - 15/(60*24)
           AND :1 != 'BASIC'
         GROUP BY wcd.end_time, wcn.wait_class
         ORDER BY wcd.end_time ASC
      ]]>
      </Property>
			<Property NAME="SQLINPARAM1" SCOPE="INSTANCE">StatisticsLevel</Property>
      <Property NAME="MachineName" SCOPE="INSTANCE">MachineName</Property>
      <Property NAME="Port" SCOPE="INSTANCE">Port</Property>
      <Property NAME="SID" SCOPE="INSTANCE">SID</Property>
      <Property NAME="UserName" SCOPE="INSTANCE">UserName</Property>
      <Property NAME="password" SCOPE="INSTANCE">password</Property>
      <Property NAME="Role" SCOPE="INSTANCE" OPTIONAL="TRUE">Role</Property>
    </QueryDescriptor>
  <PushDescriptor RECVLET_ID="AQMetrics">
    <Property NAME="QueueName" SCOPE="GLOBAL">ALERT_QUE</Property>
    <Property NAME="MachineName" SCOPE="INSTANCE">MachineName</Property>
    <Property NAME="Port" SCOPE="INSTANCE">Port</Property>
    <Property NAME="SID" SCOPE="INSTANCE">SID</Property>
    <Property NAME="UserName" SCOPE="INSTANCE">UserName</Property>
    <Property NAME="password" SCOPE="INSTANCE">password</Property>
    <Property NAME="Role" SCOPE="INSTANCE" OPTIONAL="TRUE">Role</Property>
    <Property NAME="InstanceName" SCOPE="INSTANCE">InstanceName</Property>
    <Property NAME="KeyField" SCOPE="GLOBAL">OBJECT_NAME</Property>
    <Property NAME="KeyColumn" SCOPE="GLOBAL">class</Property>
  </PushDescriptor>
  </Metric>

    <!--
  ======================================================================
  == Category:         Server-generated alert User Block
  == Collection Level: Minimum
  == Purpose:          Alerts
  ======================================================================
    -->
    <Metric NAME="UserBlock" TYPE="TABLE">
        <ValidIf>
            <CategoryProp NAME="VersionCategory" CHOICES="10gR1;10gR2;10gR203;11gR1;11gR2"/>
            <CategoryProp NAME="MetricScope" CHOICES="DB"/>
        </ValidIf>
        <Display>
            <Label NLSID="userBlock">User Block</Label>
        </Display>
        <TableDescriptor>
                  <ColumnDescriptor NAME="time" TYPE="STRING" IS_TIMESTAMP="TRUE" TRANSIENT="TRUE" HELP="NO_HELP"/>
            <ColumnDescriptor NAME="sid" TYPE="STRING" IS_KEY="TRUE">
                <Display>
                    <Label NLSID="userBlock_blocking_sid">Blocking Session ID</Label>
                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="count" TYPE="NUMBER" IS_KEY="FALSE">
                <Display>
                    <Label NLSID="userBlock_count">Blocking Session Count</Label>
                </Display>
            </ColumnDescriptor>
        </TableDescriptor>
        <QueryDescriptor FETCHLET_ID="SQL">
            <Property NAME="STATEMENT" SCOPE="GLOBAL"><![CDATA[
        SELECT /*+ ORDERED */
               TO_CHAR(CAST(d.end_time AS TIMESTAMP) AT TIME ZONE 'GMT',
                               'YYYY-MM-DD HH24:MI:SS TZD') time,
                       'SID: '||d.entity_id||' Serial#: '||d.entity_sequence id, d.value
          FROM v$alert_types a, v$threshold_types t, v$metric_history d
         WHERE a.internal_metric_category = 'UserBlock'
           AND a.internal_metric_name = 'count'
           AND a.reason_id = t.alert_reason_id
           AND t.metrics_id = d.metric_id
           AND d.group_id = 4
           AND d.end_time >= SYSDATE - 15/(60*24)
           AND d.value > 0
           AND :1 != 'BASIC'
         ORDER BY d.end_time ASC
       ]]></Property>
            <Property NAME="SQLINPARAM1" SCOPE="INSTANCE">StatisticsLevel</Property>
            <Property NAME="MachineName" SCOPE="INSTANCE">MachineName</Property>
            <Property NAME="Port" SCOPE="INSTANCE">Port</Property>
            <Property NAME="SID" SCOPE="INSTANCE">SID</Property>
            <Property NAME="UserName" SCOPE="INSTANCE">UserName</Property>
            <Property NAME="password" SCOPE="INSTANCE">password</Property>
            <Property NAME="Role" SCOPE="INSTANCE" OPTIONAL="TRUE">Role</Property>
        </QueryDescriptor>
        <PushDescriptor RECVLET_ID="AQMetrics">
            <Property NAME="QueueName" SCOPE="GLOBAL">ALERT_QUE</Property>
            <Property NAME="MachineName" SCOPE="INSTANCE">MachineName</Property>
            <Property NAME="Port" SCOPE="INSTANCE">Port</Property>
            <Property NAME="SID" SCOPE="INSTANCE">SID</Property>
            <Property NAME="UserName" SCOPE="INSTANCE">UserName</Property>
            <Property NAME="password" SCOPE="INSTANCE">password</Property>
            <Property NAME="Role" SCOPE="INSTANCE" OPTIONAL="TRUE">Role</Property>
            <Property NAME="InstanceName" SCOPE="INSTANCE">InstanceName</Property>
            <Property NAME="KeyField" SCOPE="GLOBAL">OBJECT_NAME</Property>
            <Property NAME="KeyColumn" SCOPE="GLOBAL">sid</Property>
        </PushDescriptor>
    </Metric>

    <!--
  ======================================================================
  == Category:         alert User Block Chain
  == Collection Level: Minimum
  == Purpose:          Alerts
  ======================================================================
    -->

        <Metric NAME="UserBlockChain" TYPE="TABLE">
                <ValidIf>
                        <CategoryProp NAME="VersionCategory" CHOICES="10gR1;10gR2;10gR203;11gR1;11gR2"/>
                </ValidIf>
                <Display>
                        <Label NLSID="user_block_chain">User Block Chain</Label>
                </Display>
                <TableDescriptor>
                        <ColumnDescriptor NAME="id" TYPE="STRING" IS_KEY="TRUE">
                                <Display>
                                        <Label NLSID="user_block_chain_id">ID(lockID1_lockID2_sesID_sesSerial#)</Label>
                                </Display>
                        </ColumnDescriptor>
                        <ColumnDescriptor NAME="blocker_session_info" TYPE="STRING" IS_KEY="FALSE" TRANSIENT="TRUE">
                                <Display>
                                        <Label NLSID="user_block_chain_blocker_session_info">Blocking Session Info</Label>
                                </Display>
                        </ColumnDescriptor>
                        <ColumnDescriptor NAME="db_time" TYPE="NUMBER" IS_KEY="FALSE">
                                <Display>
                                        <Label NLSID="user_block_chain_db_time">Blocking Session DB Time</Label>
                                </Display>
                        </ColumnDescriptor>
                        <ColumnDescriptor NAME="count" TYPE="NUMBER" IS_KEY="FALSE">
                                <Display>
                                        <Label NLSID="user_block_chain_count">Blocking Session Count</Label>
                                </Display>
                        </ColumnDescriptor>
                </TableDescriptor>
                <QueryDescriptor FETCHLET_ID="SQL">
                        <Property NAME="STATEMENT" SCOPE="GLOBAL"><![CDATA[
WITH blocked_resources AS
(select
        id1
       ,id2
       ,SUM(ctime)   as blocked_secs
       ,MAX(request) as max_request
       ,COUNT(1)     as blocked_count
   from
        v$lock
  where
        request > 0
  group by
        id1,id2
)
,blockers AS
(select
        L.*
       ,BR.blocked_secs
       ,BR.blocked_count
   from
        v$lock    L
       ,blocked_resources  BR
  where
        BR.id1 = L.id1
    and BR.id2 = L.id2
    and L.lmode  > 0
    and L.block <> 0
)
select
      B.id1||'_'||B.id2||'_'||S.sid||'_'||S.serial#    as id
      ,'SID,SERIAL:'||S.sid||','||S.serial#||',LOCK_TYPE:'||B.type||',PROGRAM:'||S.program||',MODULE:'||S.module||',ACTION:'||S.action||',MACHINE:'||S.machine||',OSUSER:'||S.osuser||',USERNAME:'||S.username
                                              as info
      ,B.blocked_secs
      ,B.blocked_count
  from
       v$session   S
      ,blockers    B
 where
       B.sid = S.sid 
      ]]></Property>
                        <Property NAME="MachineName" SCOPE="INSTANCE">MachineName</Property>
                        <Property NAME="Port" SCOPE="INSTANCE">Port</Property>
                        <Property NAME="SID" SCOPE="INSTANCE">SID</Property>
                        <Property NAME="UserName" SCOPE="INSTANCE">UserName</Property>
                        <Property NAME="password" SCOPE="INSTANCE">password</Property>
                        <Property NAME="Role" SCOPE="INSTANCE" OPTIONAL="TRUE">Role</Property>
                </QueryDescriptor>
        </Metric>
    <!--
  ======================================================================
  == Category:         SGA Pool Wastage
  == Collection Level: Minimum
  == Purpose:          Alerts, Trending
  ======================================================================
    -->
 	<Metric NAME="sga_pool_wastage" TYPE="TABLE">
		<ValidIf>
			<CategoryProp NAME="VersionCategory" CHOICES="10gR1;10gR2;10gR203;11gR1;11gR2"/>
		</ValidIf>
		<Display>
			<Label NLSID="sga_pool_wastage">SGA Pool Wastage</Label>
		</Display>
		<TableDescriptor>
			<ColumnDescriptor NAME="shared_free_pct" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="sga_pool_wastage_shared_free_pct">Shared Pool Free (%)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="large_free_pct" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="sga_pool_wastage_large_free_pct">Large Pool Free (%)</Label>

				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="java_free_pct" TYPE="NUMBER" IS_KEY="FALSE">
				<Display FOR_SUMMARY_UI="TRUE">
					<Label NLSID="sga_pool_wastage_java_free_pct">Java Pool Free (%)</Label>

				</Display>
			</ColumnDescriptor>
		</TableDescriptor>
		<QueryDescriptor FETCHLET_ID="SQL">
			<Property NAME="STATEMENT" SCOPE="GLOBAL"><![CDATA[
DECLARE

  shared_free_pct NUMBER;
  large_free_pct  NUMBER;
  java_free_pct   NUMBER;

  TYPE        data_cursor_type IS REF CURSOR;
  data_cursor data_cursor_type;

BEGIN

  ----
  -- compute each percentage
  ----
  FOR pool_pct_pair IN
    (SELECT pool,
            DECODE(total_bytes, 0, NULL, 100 * free_bytes / total_bytes) pct
       FROM (SELECT pool,
                    SUM(bytes) total_bytes,
                    SUM(DECODE(name, 'free memory', bytes, 0)) free_bytes
               FROM v$sgastat
              GROUP BY pool))
  LOOP
    IF pool_pct_pair.pool = 'shared pool' THEN
      shared_free_pct := pool_pct_pair.pct;
    ELSIF pool_pct_pair.pool = 'java pool' THEN
      java_free_pct   := pool_pct_pair.pct;
    ELSIF pool_pct_pair.pool = 'large pool' THEN
      large_free_pct  := pool_pct_pair.pct;
    END IF;
  END LOOP;

  -- open the cursor to return
  OPEN data_cursor FOR
    SELECT shared_free_pct,
           large_free_pct,
           java_free_pct
      FROM dual;

  :1 := data_cursor;
END;
]]></Property>
			<Property NAME="SQLOUTPARAMPOS" SCOPE="GLOBAL">1</Property>
			<Property NAME="SQLOUTPARAMTYPE" SCOPE="GLOBAL">SQL_CURSOR</Property>
			<Property NAME="MachineName" SCOPE="INSTANCE">MachineName</Property>
			<Property NAME="Port" SCOPE="INSTANCE">Port</Property>
			<Property NAME="SID" SCOPE="INSTANCE">SID</Property>
			<Property NAME="UserName" SCOPE="INSTANCE">UserName</Property>
			<Property NAME="password" SCOPE="INSTANCE">password</Property>
			<Property NAME="Role" SCOPE="INSTANCE" OPTIONAL="TRUE">Role</Property>
		</QueryDescriptor>
		<PushDescriptor RECVLET_ID="AQMetrics">
			<Property NAME="QueueName" SCOPE="GLOBAL">ALERT_QUE</Property>
			<Property NAME="MachineName" SCOPE="INSTANCE">MachineName</Property>
			<Property NAME="Port" SCOPE="INSTANCE">Port</Property>
			<Property NAME="SID" SCOPE="INSTANCE">SID</Property>
			<Property NAME="UserName" SCOPE="INSTANCE">UserName</Property>
			<Property NAME="password" SCOPE="INSTANCE">password</Property>
			<Property NAME="Role" SCOPE="INSTANCE" OPTIONAL="TRUE">Role</Property>
			<Property NAME="InstanceName" SCOPE="INSTANCE">InstanceName</Property>
		</PushDescriptor>
	</Metric>  

  <!-- ******** Begin Baseline Metadata Metrics ******** -->

  <!-- 
  ======================================================================
  == Category:         Adaptive Thresholds
  == Collection Level: Minimum
  == Purpose:          Deliver the list of eligible metrics, with a flag
  ==                   describing whether the threshold is adaptive.
  ======================================================================
    --> 
  <Metric NAME="db_bsln_adaptive_thresholds" TYPE="RAW" HELP="NO_HELP">
    <ValidIf>
      <CategoryProp NAME="VersionCategory" CHOICES="10gR2;10gR203;11gR1;11gR2"/>
    </ValidIf>
    <ValidMidTierVersions START_VER="10.2.0.0.0"/>
    <Display>
      <Label NLSID="db_bsln_adaptive_thresholds">Metrics with Adaptive Thresholds</Label>
    </Display>
    <TableDescriptor TABLE_NAME="EM_adaptive_thresholds"
                     SKIP_METRIC_COLUMN="TRUE"
                     SKIP_COLLTIME_COLUMN="TRUE">
      <ColumnDescriptor NAME="target_type" COLUMN_NAME="target_type" TYPE="STRING">
        <Display>
          <Label NLSID="db_bsln_adaptive_thresholds_target_type">Target Type</Label>
        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="metric_name" COLUMN_NAME="metric_name" TYPE="STRING" IS_KEY="TRUE">
        <Display>
          <Label NLSID="db_bsln_adaptive_thresholds_metric_name">Metric Name</Label>
        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="metric_column" COLUMN_NAME="metric_column" TYPE="STRING" IS_KEY="TRUE">
        <Display>
          <Label NLSID="db_bsln_adaptive_thresholds_metric_column">Metric Column</Label>
        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="key_value" COLUMN_NAME="key_value" TYPE="STRING" IS_KEY="TRUE">
        <Display>
          <Label NLSID="db_bsln_adaptive_thresholds_key_value">Key Value</Label>
        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="has_active_baseline" COLUMN_NAME="has_active_baseline">
        <Display>
          <Label NLSID="db_bsln_adaptive_thresholds_hab">Adaptive Threshold (0/1)</Label>
        </Display>
      </ColumnDescriptor>
    </TableDescriptor>
    <QueryDescriptor FETCHLET_ID="SQL">
      <ValidIf>
        <CategoryProp NAME="VersionCategory" CHOICES="10gR2;10gR203"/>
      </ValidIf>
      <Property NAME="STATEMENT" SCOPE="GLOBAL">
<![CDATA[
select 'oracle_database' target_type,
       m.metric_name,
       m.metric_column,
       ' ' key_value,
       nvl(d.adaptive, 0) adaptive
  from (select at.internal_metric_category metric_name,
               at.internal_metric_name metric_column,
               tt.metrics_id metric_id
          from v$alert_types at, v$threshold_types tt,
               dbsnmp.mgmt_bsln_metrics em
         where at.reason_id = tt.alert_reason_id
           and dbsnmp.mgmt_bsln.metric_uid(tt.metrics_id) = em.metric_uid) m,
       (select ds.metric_id, 1 adaptive
          from dbsnmp.mgmt_bsln_baselines b,
               dbsnmp.mgmt_bsln_datasources ds,
               dbsnmp.mgmt_bsln_threshold_parms tp
         where b.target_uid = dbsnmp.mgmt_bsln.this_target_uid
           and b.status = 'ACTIVE'
           and ds.target_uid = b.target_uid
           and ds.source_type = 'DB'
           and tp.bsln_guid = b.bsln_guid
           and tp.datasource_guid = ds.datasource_guid) d
 where m.metric_id = d.metric_id(+)
]]>
      </Property>
      <Property NAME="MachineName" SCOPE="INSTANCE">MachineName</Property>
      <Property NAME="Port" SCOPE="INSTANCE">Port</Property>
      <Property NAME="SID" SCOPE="INSTANCE">SID</Property>
      <Property NAME="UserName" SCOPE="INSTANCE">UserName</Property>
      <Property NAME="password" SCOPE="INSTANCE">password</Property>
      <Property NAME="Role" SCOPE="INSTANCE" OPTIONAL="TRUE">Role</Property>
    </QueryDescriptor>
    <QueryDescriptor FETCHLET_ID="SQL">
      <ValidIf>
        <CategoryProp NAME="VersionCategory" CHOICES="11gR1;11gR2"/>
      </ValidIf>
      <Property NAME="STATEMENT" SCOPE="GLOBAL">
<![CDATA[
select 'oracle_database' target_type,
       m.metric_name,
       m.metric_column,
       ' ' key_value,
       nvl(d.adaptive, 0) adaptive
  from (select at.internal_metric_category metric_name,
               at.internal_metric_name metric_column,
               tt.metrics_id metric_id
          from v$alert_types at, v$threshold_types tt,
               dbsnmp.bsln_metric_defaults em
         where at.reason_id = tt.alert_reason_id
           and tt.metrics_id = em.metric_id) m,
       (select tp.metric_id, 1 adaptive
          from dbsnmp.bsln_baselines b,
               dbsnmp.bsln_threshold_params tp
         where b.dbid = dbsnmp.bsln_internal.this_dbid
           and b.instance_name = :1
           and tp.bsln_guid = b.bsln_guid
           and tp.in_effect = 'Y') d
 where m.metric_id = d.metric_id(+)
]]>
      </Property>
      <Property NAME="MachineName" SCOPE="INSTANCE">MachineName</Property>
      <Property NAME="Port" SCOPE="INSTANCE">Port</Property>
      <Property NAME="SID" SCOPE="INSTANCE">SID</Property>
      <Property NAME="UserName" SCOPE="INSTANCE">UserName</Property>
      <Property NAME="password" SCOPE="INSTANCE">password</Property>
      <Property NAME="Role" SCOPE="INSTANCE" OPTIONAL="TRUE">Role</Property>
      <Property NAME="SQLINPARAM1" SCOPE="INSTANCE">InstanceName</Property>
    </QueryDescriptor>
  </Metric>

  <!-- ******** End Baseline Metadata Metrics ******** -->

<!-- ESA database collection starts -->
  <Metric NAME="secureOSAuditLevel" TYPE="RAW" CONFIG="TRUE" KEYS_ONLY="TRUE"  HELP="NO_HELP">
    <!-- database instance-specific, initialization parameter -->
    <ValidMidTierVersions START_VER="10.2.0.0.0" />
    <ValidIf>
        <CategoryProp NAME="VersionCategory" CHOICES="10gR2;10gR203;11gR1;11gR2"/>
    </ValidIf>
    <Display>
      <Label NLSID="secure_OS_audit_level">Audit Syslog Level</Label>
    </Display>
     
    <TableDescriptor TABLE_NAME="esm_collection">
      <ColumnDescriptor NAME="property" COLUMN_NAME="property" TYPE="STRING" IS_KEY="TRUE" HELP="NO_HELP">
      </ColumnDescriptor>
      <ColumnDescriptor NAME="value" COLUMN_NAME="value" TYPE="STRING" IS_KEY="TRUE" HELP="NO_HELP">
      </ColumnDescriptor>
      <ColumnDescriptor NAME="value2" COLUMN_NAME="value2" TYPE="STRING" IS_KEY="TRUE" HELP="NO_HELP">
      </ColumnDescriptor>
    </TableDescriptor>

    <QueryDescriptor FETCHLET_ID="SQL">
      <Property NAME="STATEMENT" SCOPE="GLOBAL">
       <![CDATA[
         WITH max as (select :1 as aud_sys from dual)
         SELECT 'audit_syslog_level' "name", nvl(value, ' '), 'NA'
         FROM v$parameter
         where name ='audit_syslog_level' and EXISTS (select value from v$parameter where name = 'audit_trail' and value = 'OS') and rownum <= decode((select aud_sys from max),'-1',2147483647,(select aud_sys from max))
      ]]>
      </Property>
      <Property NAME="SQLINPARAM1" SCOPE="INSTANCE">audit_syslog_level_max</Property>
      <Property NAME="MachineName" SCOPE="INSTANCE">MachineName</Property>
      <Property NAME="Port" SCOPE="INSTANCE">Port</Property>
      <Property NAME="SID" SCOPE="INSTANCE">SID</Property>
      <Property NAME="UserName" SCOPE="INSTANCE">UserName</Property>
      <Property NAME="password" SCOPE="INSTANCE">password</Property>
      <Property NAME="Role" SCOPE="INSTANCE" OPTIONAL="TRUE">Role</Property>
    </QueryDescriptor>
  </Metric>
  
  <Metric NAME="umaskSetting" TYPE="RAW" CONFIG="TRUE" KEYS_ONLY="TRUE"  HELP="NO_HELP">
  <!-- database instance-specific, umask setting on the individual node/host m/c -->
    <ValidMidTierVersions START_VER="10.2.0.0.0" />
    <ValidIf>
	<CategoryProp NAME="VersionCategory" CHOICES="8iR2;9i;9iR2;10gR1;10gR2;10gR203;11gR1;11gR2"/>
    </ValidIf>
    <Display>
      <Label NLSID="umask_setting">umask_setting</Label>
    </Display>
     
    <TableDescriptor TABLE_NAME="esm_collection">
      <ColumnDescriptor NAME="property" COLUMN_NAME="property" TYPE="STRING" IS_KEY="TRUE" HELP="NO_HELP">
      </ColumnDescriptor>
      <ColumnDescriptor NAME="value" COLUMN_NAME="value" TYPE="STRING" IS_KEY="TRUE" HELP="NO_HELP">
      </ColumnDescriptor>
      <ColumnDescriptor NAME="value2" COLUMN_NAME="value2" TYPE="STRING" IS_KEY="TRUE" HELP="NO_HELP">
      </ColumnDescriptor>
    </TableDescriptor>
	<QueryDescriptor FETCHLET_ID="OSLineToken">
		<Property NAME="perlBin" SCOPE="SYSTEMGLOBAL">perlBin</Property>
		<Property NAME="scriptsDir" SCOPE="SYSTEMGLOBAL">scriptsDir</Property>
		<Property NAME="command" SCOPE="GLOBAL">
             %perlBin%/perl %scriptsDir%//db/umaskSetting.pl
        </Property>
        <Property NAME="ENVUMASKMAX" SCOPE="INSTANCE">umask_setting_max</Property>
		<Property NAME="startsWith" SCOPE="GLOBAL">em_result=</Property>
		<Property NAME="delimiter" SCOPE="GLOBAL">|</Property>
		<Property NAME="ENVEM_TARGET_NAME" SCOPE="INSTANCE">NAME</Property>
		<Property NAME="ENVEM_TARGET_ROLE" SCOPE="INSTANCE" OPTIONAL="TRUE">Role</Property>
		<Property NAME="MachineName" SCOPE="INSTANCE">MachineName</Property>
		<Property NAME="Port" SCOPE="INSTANCE">Port</Property>
		<Property NAME="SID" SCOPE="INSTANCE">SID</Property>
		<Property NAME="ENVEM_TARGET_ADDRESS" SCOPE="GLOBAL">(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=%MachineName%)(Port=%Port%))(CONNECT_DATA=(SID=%SID%)))
        </Property>
	    <Property NAME="ENVEM_TARGET_ORACLE_HOME" SCOPE="INSTANCE">OracleHome</Property>
	</QueryDescriptor>
  </Metric>
  <Metric NAME="osauthPrefixDomain" TYPE="RAW" CONFIG="TRUE" KEYS_ONLY="TRUE"  HELP="NO_HELP">
   <ValidMidTierVersions START_VER="10.2.0.0.0" /> 
   <ValidIf>
	<CategoryProp NAME="VersionCategory" CHOICES="8iR2;9i;9iR2;10gR1;10gR2;10gR203;11gR1;11gR2"/>
    </ValidIf>
    <Display>
      <Label NLSID="osauth_prefix_domain">osauth_prefix_domain</Label>
    </Display>
     
    <TableDescriptor TABLE_NAME="esm_collection">
      <ColumnDescriptor NAME="property" COLUMN_NAME="property" TYPE="STRING" IS_KEY="TRUE" HELP="NO_HELP">
      </ColumnDescriptor>
      <ColumnDescriptor NAME="value" COLUMN_NAME="value" TYPE="STRING" IS_KEY="TRUE" HELP="NO_HELP">
      </ColumnDescriptor>
      <ColumnDescriptor NAME="value2" COLUMN_NAME="value2" TYPE="STRING" IS_KEY="TRUE" HELP="NO_HELP">
      </ColumnDescriptor>
    </TableDescriptor>
	<QueryDescriptor FETCHLET_ID="OSLineToken">
		<Property NAME="perlBin" SCOPE="SYSTEMGLOBAL">perlBin</Property>
		<Property NAME="scriptsDir" SCOPE="SYSTEMGLOBAL">scriptsDir</Property>
		<Property NAME="command" SCOPE="GLOBAL">
             %perlBin%/perl %scriptsDir%//db/dbOsAuthentication.pl
        </Property>
        <Property NAME="ENVOSAUTHMAX" SCOPE="INSTANCE">osauth_prefix_domain_max</Property>
		<Property NAME="startsWith" SCOPE="GLOBAL">em_result=</Property>
		<Property NAME="delimiter" SCOPE="GLOBAL">|</Property>
		<Property NAME="ENVEM_TARGET_NAME" SCOPE="INSTANCE">NAME</Property>
		<Property NAME="ENVEM_TARGET_ROLE" SCOPE="INSTANCE" OPTIONAL="TRUE">Role</Property>
		<Property NAME="MachineName" SCOPE="INSTANCE">MachineName</Property>
		<Property NAME="Port" SCOPE="INSTANCE">Port</Property>
		<Property NAME="SID" SCOPE="INSTANCE">SID</Property>
		<Property NAME="ENVEM_TARGET_ADDRESS" SCOPE="GLOBAL">(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=%MachineName%)(Port=%Port%))(CONNECT_DATA=(SID=%SID%)))
        </Property>
		<Property NAME="ENVEM_TARGET_ORACLE_HOME" SCOPE="INSTANCE">OracleHome</Property>
	</QueryDescriptor>
  </Metric>

   <Metric NAME="logArchiveDest" TYPE="RAW" CONFIG="TRUE" KEYS_ONLY="TRUE"  HELP="NO_HELP">
    <!-- database instance-specific, init parameter-->
  <ValidMidTierVersions START_VER="10.2.0.0.0" />
  <ValidIf>
	<CategoryProp NAME="VersionCategory" CHOICES="8iR2;9i;9iR2;10gR1;10gR2;10gR203;11gR1;11gR2"/>
    </ValidIf>
    <Display>
      <Label NLSID="log_archive_dest">Log Archive Dest</Label>
    </Display>
     
    <TableDescriptor TABLE_NAME="esm_collection">
      <ColumnDescriptor NAME="property" COLUMN_NAME="property" TYPE="STRING" IS_KEY="TRUE" HELP="NO_HELP">
      </ColumnDescriptor>
      <ColumnDescriptor NAME="value" COLUMN_NAME="value" TYPE="STRING" IS_KEY="TRUE" HELP="NO_HELP">
      </ColumnDescriptor>
      <ColumnDescriptor NAME="value2" COLUMN_NAME="value2" TYPE="STRING" IS_KEY="TRUE" HELP="NO_HELP">
      </ColumnDescriptor>
    </TableDescriptor>
	<QueryDescriptor FETCHLET_ID="OSLineToken">
		<Property NAME="perlBin" SCOPE="SYSTEMGLOBAL">perlBin</Property>
		<Property NAME="scriptsDir" SCOPE="SYSTEMGLOBAL">scriptsDir</Property>
		<Property NAME="command" SCOPE="GLOBAL">
             %perlBin%/perl %scriptsDir%//db/logArchiveDest.pl
        </Property>
        <Property NAME="ENVLADPERM" SCOPE="INSTANCE">log_archive_dest_perm_max</Property>
        <Property NAME="ENVNLADPERM" SCOPE="INSTANCE">nt_log_archive_dest_perm_max</Property>
        <Property NAME="ENVLADOWN" SCOPE="INSTANCE">log_archive_dest_owner_max</Property>
        <Property NAME="ENVLADDXPERM" SCOPE="INSTANCE">log_archive_duplex_dest_perm_max</Property>
        <Property NAME="ENVNLADDXPERM" SCOPE="INSTANCE">nt_log_archive_duplex_dest_perm_max</Property>
        <Property NAME="ENVLADDXOWN" SCOPE="INSTANCE">log_archive_duplex_dest_owner_max</Property>
		<Property NAME="startsWith" SCOPE="GLOBAL">em_result=</Property>
		<Property NAME="delimiter" SCOPE="GLOBAL">|</Property>
		<Property NAME="ENVEM_TARGET_NAME" SCOPE="INSTANCE">NAME</Property>
		<Property NAME="STDINEM_TARGET_USERNAME" SCOPE="INSTANCE">UserName</Property>
		<Property NAME="STDINEM_TARGET_PASSWORD" SCOPE="INSTANCE">password</Property>
		<Property NAME="ENVEM_TARGET_ROLE" SCOPE="INSTANCE" OPTIONAL="TRUE">Role</Property>
		<Property NAME="MachineName" SCOPE="INSTANCE">MachineName</Property>
		<Property NAME="Port" SCOPE="INSTANCE">Port</Property>
		<Property NAME="SID" SCOPE="INSTANCE">SID</Property>
		<Property NAME="ENVEM_TARGET_ADDRESS" SCOPE="GLOBAL">(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=%MachineName%)(Port=%Port%))(CONNECT_DATA=(SID=%SID%)))
      </Property>
		<Property NAME="ENVEM_TARGET_ORACLE_HOME" SCOPE="INSTANCE">OracleHome</Property>
	</QueryDescriptor>
 </Metric>
 <Metric NAME="ohBinFilesOwner" TYPE="RAW" CONFIG="TRUE" KEYS_ONLY="TRUE"  HELP="NO_HELP">
    <!-- database instance-specific, home may or may not be common to all instances-->
   <ValidMidTierVersions START_VER="10.2.0.0.0" /> 
   <ValidIf>
	<CategoryProp NAME="VersionCategory" CHOICES="8iR2;9i;9iR2;10gR1;10gR2;10gR203;11gR1;11gR2"/>
    </ValidIf>
    <Display>
      <Label NLSID="oh_bin_files_owner">OracleHome/Bin Files Owner</Label>
    </Display>
     
    <TableDescriptor TABLE_NAME="esm_collection">
      <ColumnDescriptor NAME="property" COLUMN_NAME="property" TYPE="STRING" IS_KEY="TRUE" HELP="NO_HELP">
      </ColumnDescriptor>
      <ColumnDescriptor NAME="value" COLUMN_NAME="value" TYPE="STRING" IS_KEY="TRUE" HELP="NO_HELP">
      </ColumnDescriptor>		
      <ColumnDescriptor NAME="value2" COLUMN_NAME="value2" TYPE="STRING" IS_KEY="TRUE" HELP="NO_HELP">
      </ColumnDescriptor>		
    </TableDescriptor>
	<QueryDescriptor FETCHLET_ID="OSLineToken">
		<Property NAME="perlBin" SCOPE="SYSTEMGLOBAL">perlBin</Property>
		<Property NAME="scriptsDir" SCOPE="SYSTEMGLOBAL">scriptsDir</Property>
		<Property NAME="command" SCOPE="GLOBAL">
             %perlBin%/perl %scriptsDir%//db/ohBinFilesOwner.pl
        </Property>
        <Property NAME="ENVOHBINOWN" SCOPE="INSTANCE">oh_bin_files_owner_max</Property>
		<Property NAME="startsWith" SCOPE="GLOBAL">em_result=</Property>
		<Property NAME="delimiter" SCOPE="GLOBAL">|</Property>
		<Property NAME="ENVEM_TARGET_NAME" SCOPE="INSTANCE">NAME</Property>
		<Property NAME="ENVEM_TARGET_ROLE" SCOPE="INSTANCE" OPTIONAL="TRUE">Role</Property>
		<Property NAME="MachineName" SCOPE="INSTANCE">MachineName</Property>
		<Property NAME="Port" SCOPE="INSTANCE">Port</Property>
		<Property NAME="SID" SCOPE="INSTANCE">SID</Property>
		<Property NAME="ENVEM_TARGET_ADDRESS" SCOPE="GLOBAL">(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=%MachineName%)(Port=%Port%))(CONNECT_DATA=(SID=%SID%)))
      </Property>
		<Property NAME="ENVEM_TARGET_ORACLE_HOME" SCOPE="INSTANCE">OracleHome</Property>
	</QueryDescriptor>
 </Metric>
 <Metric NAME="ohFilesPermission" TYPE="RAW" CONFIG="TRUE" KEYS_ONLY="TRUE"  HELP="NO_HELP">
    <!-- database instance-specific, home may or may not be common to all instances-->
     <ValidMidTierVersions START_VER="10.2.0.0.0" />
    <ValidIf>
	<CategoryProp NAME="VersionCategory" CHOICES="8iR2;9i;9iR2;10gR1;10gR2;10gR203;11gR1;11gR2"/>
    </ValidIf>
    <Display>
      <Label NLSID="oh_files_perm">OracleHome Folder's  File Permission</Label>
    </Display>
    <TableDescriptor TABLE_NAME="esm_collection">
      <ColumnDescriptor NAME="property" COLUMN_NAME="property" TYPE="STRING" IS_KEY="TRUE" HELP="NO_HELP">
      </ColumnDescriptor>
      <ColumnDescriptor NAME="value" COLUMN_NAME="value" TYPE="STRING" IS_KEY="TRUE" HELP="NO_HELP">
      </ColumnDescriptor>		
      <ColumnDescriptor NAME="value2" COLUMN_NAME="value2" TYPE="STRING" IS_KEY="TRUE" HELP="NO_HELP">
      </ColumnDescriptor>		
    </TableDescriptor>
	<QueryDescriptor FETCHLET_ID="OSLineToken">
		<Property NAME="perlBin" SCOPE="SYSTEMGLOBAL">perlBin</Property>
		<Property NAME="scriptsDir" SCOPE="SYSTEMGLOBAL">scriptsDir</Property>
		<Property NAME="command" SCOPE="GLOBAL">
             %perlBin%/perl %scriptsDir%//db/ohFilesPerm.pl
        </Property>
        <Property NAME="ENVOHPERM" SCOPE="INSTANCE">oh_files_perm_max</Property>
        <Property NAME="ENVOHPERM1" SCOPE="INSTANCE">nt_oh_files_perm_max</Property>
		<Property NAME="startsWith" SCOPE="GLOBAL">em_result=</Property>
		<Property NAME="delimiter" SCOPE="GLOBAL">|</Property>
		<Property NAME="ENVEM_TARGET_NAME" SCOPE="INSTANCE">NAME</Property>
		<Property NAME="ENVEM_TARGET_ROLE" SCOPE="INSTANCE" OPTIONAL="TRUE">Role</Property>
		<Property NAME="MachineName" SCOPE="INSTANCE">MachineName</Property>
		<Property NAME="Port" SCOPE="INSTANCE">Port</Property>
		<Property NAME="SID" SCOPE="INSTANCE">SID</Property>
		<Property NAME="ENVEM_TARGET_ADDRESS" SCOPE="GLOBAL">(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=%MachineName%)(Port=%Port%))(CONNECT_DATA=(SID=%SID%)))
      </Property>
		<Property NAME="ENVEM_TARGET_ORACLE_HOME" SCOPE="INSTANCE">OracleHome</Property>
	</QueryDescriptor>
</Metric>

<!-- files_perm_owner-->
 <Metric NAME="files_perm_owner" TYPE="RAW" CONFIG="TRUE" KEYS_ONLY="TRUE"  HELP="NO_HELP"> 
    <!-- database instance-specific, home may or may not be common to all instances-->
     <ValidMidTierVersions START_VER="10.2.0.0.0" />
    <ValidIf>
        <CategoryProp NAME="VersionCategory" CHOICES="8iR2;9i;9iR2;10gR1;10gR2;10gR203;11gR1;11gR2"/>
    </ValidIf>
    <Display>
      <Label NLSID="files_perm_owner_metric">  File Permission and Owner</Label>
    </Display>
    <TableDescriptor TABLE_NAME="esm_collection">
      <ColumnDescriptor NAME="property" COLUMN_NAME="property" TYPE="STRING" IS_KEY="TRUE" HELP="NO_HELP">
      </ColumnDescriptor>
      <ColumnDescriptor NAME="value" COLUMN_NAME="value" TYPE="STRING" IS_KEY="TRUE" HELP="NO_HELP">
      </ColumnDescriptor>
      <ColumnDescriptor NAME="value2" COLUMN_NAME="value2" TYPE="STRING" IS_KEY="TRUE" HELP="NO_HELP">
      </ColumnDescriptor>		
    </TableDescriptor>
        <QueryDescriptor FETCHLET_ID="OSLineToken">
                <Property NAME="perlBin" SCOPE="SYSTEMGLOBAL">perlBin</Property>
                <Property NAME="scriptsDir" SCOPE="SYSTEMGLOBAL">scriptsDir</Property>
                <Property NAME="command" SCOPE="GLOBAL">
             %perlBin%/perl %scriptsDir%//db/files_perm_owner.pl
        </Property>
                <Property NAME="startsWith" SCOPE="GLOBAL">em_result=</Property>
                <Property NAME="delimiter" SCOPE="GLOBAL">|</Property>
                <Property NAME="ENVEM_TARGET_NAME" SCOPE="INSTANCE">NAME</Property>
		<Property NAME="ENVEM_TARGET_ROLE" SCOPE="INSTANCE" OPTIONAL="TRUE">Role</Property>
		<Property NAME="ENVTKPROF" SCOPE="INSTANCE">tkprof_max</Property>
		<Property NAME="ENVSQLPLUS" SCOPE="INSTANCE">sqlplus_max</Property> 
        <Property NAME="ENVNTKPROF" SCOPE="INSTANCE">nt_tkprof_max</Property>
        <Property NAME="ENVNSQLPLUS" SCOPE="INSTANCE">nt_sqlplus_max</Property> 
		<Property NAME="ENVTKPROF_OWNER" SCOPE="INSTANCE">tkprof_owner_max</Property>
		<Property NAME="ENVSQLPLUS_OWNER" SCOPE="INSTANCE">sqlplus_owner_max</Property> 
		<Property NAME="ENVWEBCACHE" SCOPE="INSTANCE">webcache_max</Property> 
        <Property NAME="ENVNWEBCACHE" SCOPE="INSTANCE">nt_webcache_max</Property> 
		<Property NAME="ENVWEBCACHE_OWNER" SCOPE="INSTANCE">webcache_owner_max</Property> 
		<Property NAME="ENVSNMP_RO" SCOPE="INSTANCE">snmp_ro_max</Property> 
        <Property NAME="ENVNSNMP_RO" SCOPE="INSTANCE">nt_snmp_ro_max</Property> 
		<Property NAME="ENVSNMP_RO_OWNER" SCOPE="INSTANCE">snmp_ro_owner_max</Property> 
		<Property NAME="ENVSNMP_RW" SCOPE="INSTANCE">snmp_rw_max</Property> 
        <Property NAME="ENVNSNMP_RW" SCOPE="INSTANCE">nt_snmp_rw_max</Property> 
		<Property NAME="ENVSNMP_RW_OWNER" SCOPE="INSTANCE">snmp_rw_owner_max</Property> 
		<Property NAME="ENVWDBSVR" SCOPE="INSTANCE">wdbsvr_max</Property> 
        <Property NAME="ENVNWDBSVR" SCOPE="INSTANCE">nt_wdbsvr_max</Property> 
		<Property NAME="ENVWDBSVR_OWNER" SCOPE="INSTANCE">wdbsvr_owner_max</Property> 
		<Property NAME="ENVHTPERM" SCOPE="INSTANCE">htperm_max</Property> 
        <Property NAME="ENVNHTPERM" SCOPE="INSTANCE">nt_htperm_max</Property> 
		<Property NAME="ENVHTOWNER" SCOPE="INSTANCE">htowner_max</Property> 
		<Property NAME="ENVXSQL" SCOPE="INSTANCE">xsql_max</Property> 
        <Property NAME="ENVNXSQL" SCOPE="INSTANCE">nt_xsql_max</Property> 
		<Property NAME="ENVXSQL_OWNER" SCOPE="INSTANCE">xsql_owner_max</Property> 
                <Property NAME="MachineName" SCOPE="INSTANCE">MachineName</Property>
                <Property NAME="Port" SCOPE="INSTANCE">Port</Property>
                <Property NAME="SID" SCOPE="INSTANCE">SID</Property>
                <Property NAME="ENVEM_TARGET_ADDRESS" SCOPE="GLOBAL">(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=%MachineName%)(Port=%Port%))(CONNECT_DATA=(SID=%SID%)))
      </Property>
                <Property NAME="ENVEM_TARGET_ORACLE_HOME" SCOPE="INSTANCE">OracleHome</Property>
        </QueryDescriptor>
 </Metric>

 <!-- files_perm_owner end -->

<!-- otrace-->
 <Metric NAME="otrace" TYPE="RAW" CONFIG="TRUE" KEYS_ONLY="TRUE"  HELP="NO_HELP"> 
    <!-- database instance-specific, home may or may not be common to all instances-->
     <ValidMidTierVersions START_VER="10.2.0.0.0" />
    <ValidIf>
        <CategoryProp NAME="VersionCategory" CHOICES="8iR2;9i;9iR2"/>
    </ValidIf>
    <Display>
      <Label NLSID="otrace_metric">OracleHome/otrace/admin/ has *.dat file[s]  </Label>
    </Display>
    <TableDescriptor TABLE_NAME="esm_collection">
      <ColumnDescriptor NAME="property" COLUMN_NAME="property" TYPE="STRING" IS_KEY="TRUE" HELP="NO_HELP">
      </ColumnDescriptor>
      <ColumnDescriptor NAME="value" COLUMN_NAME="value" TYPE="STRING" IS_KEY="TRUE" HELP="NO_HELP">
      </ColumnDescriptor>
    </TableDescriptor>
        <QueryDescriptor FETCHLET_ID="OSLineToken">
                <Property NAME="perlBin" SCOPE="SYSTEMGLOBAL">perlBin</Property>
                <Property NAME="scriptsDir" SCOPE="SYSTEMGLOBAL">scriptsDir</Property>
                <Property NAME="command" SCOPE="GLOBAL">
             %perlBin%/perl %scriptsDir%//db/otrace.pl
        </Property>
                <Property NAME="startsWith" SCOPE="GLOBAL">em_result=</Property>
                <Property NAME="delimiter" SCOPE="GLOBAL">|</Property>
                <Property NAME="ENVEM_TARGET_NAME" SCOPE="INSTANCE">NAME</Property>
		<Property NAME="ENVEM_TARGET_ROLE" SCOPE="INSTANCE" OPTIONAL="TRUE">Role</Property>
                <Property NAME="MachineName" SCOPE="INSTANCE">MachineName</Property>
		 <Property NAME="ENVOTRACE" SCOPE="INSTANCE">otrace_max</Property>
                <Property NAME="Port" SCOPE="INSTANCE">Port</Property>
                <Property NAME="SID" SCOPE="INSTANCE">SID</Property>
                <Property NAME="ENVEM_TARGET_ADDRESS" SCOPE="GLOBAL">(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=%MachineName%)(Port=%Port%))(CONNECT_DATA=(SID=%SID%)))
      </Property>
                <Property NAME="ENVEM_TARGET_ORACLE_HOME" SCOPE="INSTANCE">OracleHome</Property>
        </QueryDescriptor>
 </Metric>

 <!-- otrace end -->
 
  

 <Metric NAME="ohExeBinFilesPerm" TYPE="RAW" CONFIG="TRUE" KEYS_ONLY="TRUE"  HELP="NO_HELP">
     <!-- database instance-specific, home may or may not be common to all instances-->
     <ValidMidTierVersions START_VER="10.2.0.0.0" />
   <ValidIf>
	<CategoryProp NAME="VersionCategory" CHOICES="8iR2;9i;9iR2;10gR1;10gR2;10gR203;11gR1;11gR2"/>
    </ValidIf>
    <Display>
      <Label NLSID="oh_exebin_files_perm">OracleHome/Bin Executables Permission</Label>
    </Display>
    <TableDescriptor TABLE_NAME="esm_collection">
      <ColumnDescriptor NAME="property" COLUMN_NAME="property" TYPE="STRING" IS_KEY="TRUE" HELP="NO_HELP">
      </ColumnDescriptor>
      <ColumnDescriptor NAME="value" COLUMN_NAME="value" TYPE="STRING" IS_KEY="TRUE" HELP="NO_HELP">
      </ColumnDescriptor>		
      <ColumnDescriptor NAME="value2" COLUMN_NAME="value2" TYPE="STRING" IS_KEY="TRUE" HELP="NO_HELP">
      </ColumnDescriptor>		
    </TableDescriptor>
	<QueryDescriptor FETCHLET_ID="OSLineToken">
		<Property NAME="perlBin" SCOPE="SYSTEMGLOBAL">perlBin</Property>
		<Property NAME="scriptsDir" SCOPE="SYSTEMGLOBAL">scriptsDir</Property>
		<Property NAME="command" SCOPE="GLOBAL">
             %perlBin%/perl %scriptsDir%//db/ohExeBinPerm.pl
        </Property>
        <Property NAME="ENVOHEXEPERM" SCOPE="INSTANCE">oh_exebin_files_perm_max</Property>
        <Property NAME="ENVNOHEXEPERM" SCOPE="INSTANCE">nt_oh_exebin_files_perm_max</Property>
		<Property NAME="startsWith" SCOPE="GLOBAL">em_result=</Property>
		<Property NAME="delimiter" SCOPE="GLOBAL">|</Property>
		<Property NAME="ENVEM_TARGET_NAME" SCOPE="INSTANCE">NAME</Property>
		<Property NAME="STDINEM_TARGET_USERNAME" SCOPE="INSTANCE">UserName</Property>
		<Property NAME="STDINEM_TARGET_PASSWORD" SCOPE="INSTANCE">password</Property>
		<Property NAME="ENVEM_TARGET_ROLE" SCOPE="INSTANCE" OPTIONAL="TRUE">Role</Property>
		<Property NAME="MachineName" SCOPE="INSTANCE">MachineName</Property>
		<Property NAME="Port" SCOPE="INSTANCE">Port</Property>
		<Property NAME="SID" SCOPE="INSTANCE">SID</Property>
		<Property NAME="ENVEM_TARGET_ADDRESS" SCOPE="GLOBAL">(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=%MachineName%)(Port=%Port%))(CONNECT_DATA=(SID=%SID%)))
      </Property>
		<Property NAME="ENVEM_TARGET_ORACLE_HOME" SCOPE="INSTANCE">OracleHome</Property>
	</QueryDescriptor>
 </Metric>
<Metric NAME="windowsPlatform" TYPE="RAW" CONFIG="TRUE" KEYS_ONLY="TRUE"  HELP="NO_HELP">
     <!-- database instance-specific, home may or may not be common to all instances-->
     <ValidMidTierVersions START_VER="10.2.0.0.0" />
   <ValidIf>
    <CategoryProp NAME="VersionCategory" CHOICES="8iR2;9i;9iR2;10gR1;10gR2;10gR203;11gR1;11gR2"/>
    </ValidIf>
    <Display>
      <Label NLSID="windows_platform">Oracle Installed on which windows platform</Label>
    </Display>
    <TableDescriptor TABLE_NAME="esm_collection">
      <ColumnDescriptor NAME="property" COLUMN_NAME="property" TYPE="STRING" IS_KEY="TRUE" HELP="NO_HELP">
      </ColumnDescriptor>
      <ColumnDescriptor NAME="value" COLUMN_NAME="value" TYPE="STRING" IS_KEY="TRUE" HELP="NO_HELP">
      </ColumnDescriptor>        
    </TableDescriptor>
    <QueryDescriptor FETCHLET_ID="OSLineToken">
        <Property NAME="perlBin" SCOPE="SYSTEMGLOBAL">perlBin</Property>
        <Property NAME="scriptsDir" SCOPE="SYSTEMGLOBAL">scriptsDir</Property>
        <Property NAME="command" SCOPE="GLOBAL">
             %perlBin%/perl %scriptsDir%//db/winplat.pl
        </Property>
        <Property NAME="ENVWINPLAT" SCOPE="INSTANCE">win_plat_max</Property>
        <Property NAME="startsWith" SCOPE="GLOBAL">em_result=</Property>
        <Property NAME="delimiter" SCOPE="GLOBAL">|</Property>
        <Property NAME="ENVEM_TARGET_NAME" SCOPE="INSTANCE">NAME</Property>
        <Property NAME="STDINEM_TARGET_USERNAME" SCOPE="INSTANCE">UserName</Property>
        <Property NAME="STDINEM_TARGET_PASSWORD" SCOPE="INSTANCE">password</Property>
        <Property NAME="ENVEM_TARGET_ROLE" SCOPE="INSTANCE" OPTIONAL="TRUE">Role</Property>
        <Property NAME="MachineName" SCOPE="INSTANCE">MachineName</Property>
        <Property NAME="Port" SCOPE="INSTANCE">Port</Property>
        <Property NAME="SID" SCOPE="INSTANCE">SID</Property>
        <Property NAME="ENVEM_TARGET_ADDRESS" SCOPE="GLOBAL">(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=%MachineName%)(Port=%Port%))(CONNECT_DATA=(SID=%SID%)))
      </Property>
        <Property NAME="ENVEM_TARGET_ORACLE_HOME" SCOPE="INSTANCE">OracleHome</Property>
    </QueryDescriptor>
 </Metric>

<Metric NAME="drivePerm" TYPE="RAW" CONFIG="TRUE" KEYS_ONLY="TRUE"  HELP="NO_HELP">
     <!-- database instance-specific, home may or may not be common to all instances-->
     <ValidMidTierVersions START_VER="10.2.0.0.0" />
   <ValidIf>
    <CategoryProp NAME="VersionCategory" CHOICES="8iR2;9i;9iR2;10gR1;10gR2;10gR203;11gR1;11gR2"/>
    </ValidIf>
    <Display>
      <Label NLSID="install_drive_perm">Oracle Installed drive/partition permissions</Label>
    </Display>
    <TableDescriptor TABLE_NAME="esm_collection">
      <ColumnDescriptor NAME="property" COLUMN_NAME="property" TYPE="STRING" IS_KEY="TRUE" HELP="NO_HELP">
      </ColumnDescriptor>
      <ColumnDescriptor NAME="value" COLUMN_NAME="value" TYPE="STRING" IS_KEY="TRUE" HELP="NO_HELP">
      </ColumnDescriptor>        
    </TableDescriptor>
    <QueryDescriptor FETCHLET_ID="OSLineToken">
        <Property NAME="perlBin" SCOPE="SYSTEMGLOBAL">perlBin</Property>
        <Property NAME="scriptsDir" SCOPE="SYSTEMGLOBAL">scriptsDir</Property>
        <Property NAME="command" SCOPE="GLOBAL">
             %perlBin%/perl %scriptsDir%//db/installationdrv.pl
        </Property>
        <Property NAME="ENVDRIVEPERM" SCOPE="INSTANCE">drive_perm_max</Property>
        <Property NAME="startsWith" SCOPE="GLOBAL">em_result=</Property>
        <Property NAME="delimiter" SCOPE="GLOBAL">|</Property>
        <Property NAME="ENVEM_TARGET_NAME" SCOPE="INSTANCE">NAME</Property>
        <Property NAME="STDINEM_TARGET_USERNAME" SCOPE="INSTANCE">UserName</Property>
        <Property NAME="STDINEM_TARGET_PASSWORD" SCOPE="INSTANCE">password</Property>
        <Property NAME="ENVEM_TARGET_ROLE" SCOPE="INSTANCE" OPTIONAL="TRUE">Role</Property>
        <Property NAME="MachineName" SCOPE="INSTANCE">MachineName</Property>
        <Property NAME="Port" SCOPE="INSTANCE">Port</Property>
        <Property NAME="SID" SCOPE="INSTANCE">SID</Property>
        <Property NAME="ENVEM_TARGET_ADDRESS" SCOPE="GLOBAL">(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=%MachineName%)(Port=%Port%))(CONNECT_DATA=(SID=%SID%)))
      </Property>
        <Property NAME="ENVEM_TARGET_ORACLE_HOME" SCOPE="INSTANCE">OracleHome</Property>
    </QueryDescriptor>
 </Metric>
 
<Metric NAME="domainUsersGrp" TYPE="RAW" CONFIG="TRUE" KEYS_ONLY="TRUE"  HELP="NO_HELP">
     <!-- database instance-specific, home may or may not be common to all instances-->
     <ValidMidTierVersions START_VER="10.2.0.0.0" />
   <ValidIf>
    <CategoryProp NAME="VersionCategory" CHOICES="8iR2;9i;9iR2;10gR1;10gR2;10gR203;11gR1;11gR2"/>
    </ValidIf>
    <Display>
      <Label NLSID="domain_users_grp">Domain Users group in local users group</Label>
    </Display>
    <TableDescriptor TABLE_NAME="esm_collection">
      <ColumnDescriptor NAME="property" COLUMN_NAME="property" TYPE="STRING" IS_KEY="TRUE" HELP="NO_HELP">
      </ColumnDescriptor>
      <ColumnDescriptor NAME="value" COLUMN_NAME="value" TYPE="STRING" IS_KEY="TRUE" HELP="NO_HELP">
      </ColumnDescriptor>        
    </TableDescriptor>
    <QueryDescriptor FETCHLET_ID="OSLineToken">
        <Property NAME="perlBin" SCOPE="SYSTEMGLOBAL">perlBin</Property>
        <Property NAME="scriptsDir" SCOPE="SYSTEMGLOBAL">scriptsDir</Property>
        <Property NAME="command" SCOPE="GLOBAL">
             %perlBin%/perl %scriptsDir%//db/domainusergrp.pl
        </Property>
        <Property NAME="ENVDOMAINUSER" SCOPE="INSTANCE">domain_user_grp_max</Property>
        <Property NAME="startsWith" SCOPE="GLOBAL">em_result=</Property>
        <Property NAME="delimiter" SCOPE="GLOBAL">|</Property>
        <Property NAME="ENVEM_TARGET_NAME" SCOPE="INSTANCE">NAME</Property>
        <Property NAME="STDINEM_TARGET_USERNAME" SCOPE="INSTANCE">UserName</Property>
        <Property NAME="STDINEM_TARGET_PASSWORD" SCOPE="INSTANCE">password</Property>
        <Property NAME="ENVEM_TARGET_ROLE" SCOPE="INSTANCE" OPTIONAL="TRUE">Role</Property>
        <Property NAME="MachineName" SCOPE="INSTANCE">MachineName</Property>
        <Property NAME="Port" SCOPE="INSTANCE">Port</Property>
        <Property NAME="SID" SCOPE="INSTANCE">SID</Property>
        <Property NAME="ENVEM_TARGET_ADDRESS" SCOPE="GLOBAL">(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=%MachineName%)(Port=%Port%))(CONNECT_DATA=(SID=%SID%)))
      </Property>
        <Property NAME="ENVEM_TARGET_ORACLE_HOME" SCOPE="INSTANCE">OracleHome</Property>
    </QueryDescriptor>
 </Metric>

<Metric NAME="wintools" TYPE="RAW" CONFIG="TRUE" KEYS_ONLY="TRUE"  HELP="NO_HELP">
     <!-- database instance-specific, home may or may not be common to all instances-->
     <ValidMidTierVersions START_VER="10.2.0.0.0" />
   <ValidIf>
    <CategoryProp NAME="VersionCategory" CHOICES="8iR2;9i;9iR2;10gR1;10gR2;10gR203;11gR1;11gR2"/>
    </ValidIf>
    <Display>
      <Label NLSID="win_tools_perm">windows tools permissions</Label>
    </Display>
    <TableDescriptor TABLE_NAME="esm_collection">
      <ColumnDescriptor NAME="property" COLUMN_NAME="property" TYPE="STRING" IS_KEY="TRUE" HELP="NO_HELP">
      </ColumnDescriptor>
      <ColumnDescriptor NAME="value" COLUMN_NAME="value" TYPE="STRING" IS_KEY="TRUE" HELP="NO_HELP">
      </ColumnDescriptor>        
    </TableDescriptor>
    <QueryDescriptor FETCHLET_ID="OSLineToken">
        <Property NAME="perlBin" SCOPE="SYSTEMGLOBAL">perlBin</Property>
        <Property NAME="scriptsDir" SCOPE="SYSTEMGLOBAL">scriptsDir</Property>
        <Property NAME="command" SCOPE="GLOBAL">
             %perlBin%/perl %scriptsDir%//db/wintools.pl
        </Property>
        <Property NAME="ENVWINTOOL" SCOPE="INSTANCE">win_tools_max</Property>
        <Property NAME="startsWith" SCOPE="GLOBAL">em_result=</Property>
        <Property NAME="delimiter" SCOPE="GLOBAL">|</Property>
        <Property NAME="ENVEM_TARGET_NAME" SCOPE="INSTANCE">NAME</Property>
        <Property NAME="STDINEM_TARGET_USERNAME" SCOPE="INSTANCE">UserName</Property>
        <Property NAME="STDINEM_TARGET_PASSWORD" SCOPE="INSTANCE">password</Property>
        <Property NAME="ENVEM_TARGET_ROLE" SCOPE="INSTANCE" OPTIONAL="TRUE">Role</Property>
        <Property NAME="MachineName" SCOPE="INSTANCE">MachineName</Property>
        <Property NAME="Port" SCOPE="INSTANCE">Port</Property>
        <Property NAME="SID" SCOPE="INSTANCE">SID</Property>
        <Property NAME="ENVEM_TARGET_ADDRESS" SCOPE="GLOBAL">(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=%MachineName%)(Port=%Port%))(CONNECT_DATA=(SID=%SID%)))
      </Property>
        <Property NAME="ENVEM_TARGET_ORACLE_HOME" SCOPE="INSTANCE">OracleHome</Property>
    </QueryDescriptor>
 </Metric>
 
 <Metric NAME="dbParamCollection" TYPE="RAW" CONFIG="TRUE" KEYS_ONLY="TRUE"  HELP="NO_HELP">
     <!-- database instance-specific, initialization parameters specific to instances-->
     <ValidMidTierVersions START_VER="10.2.0.0.0" />
   <ValidIf>
	<CategoryProp NAME="VersionCategory" CHOICES="8iR2;9i;9iR2;10gR1;10gR2;10gR203;11gR1;11gR2"/>
    </ValidIf>
    <Display>
      <Label NLSID="db_parameter_collection">Data Base parameter collection</Label>
    </Display>
    <TableDescriptor TABLE_NAME="esm_collection">
      <ColumnDescriptor NAME="property" COLUMN_NAME="property" TYPE="STRING" IS_KEY="TRUE" HELP="NO_HELP">
      </ColumnDescriptor>
      <ColumnDescriptor NAME="value" COLUMN_NAME="value" TYPE="STRING" IS_KEY="TRUE" HELP="NO_HELP">
      </ColumnDescriptor>
      <ColumnDescriptor NAME="value2" COLUMN_NAME="value2" TYPE="STRING" IS_KEY="TRUE" HELP="NO_HELP">
      </ColumnDescriptor>
    </TableDescriptor>

    <QueryDescriptor FETCHLET_ID="SQL">
      <Property NAME="STATEMENT" SCOPE="GLOBAL">
       <![CDATA[
WITH max as (select :1 as trc_file, :2 as rem_lsnr, :3 as aud_trl, :4 as os_auth, :5 as sql92, :6 as db_lnk from dual)
         SELECT 'trace_files_public' "name",nvl(value,'FALSE'),'NA' 
         FROM v$parameter
         where name='_trace_files_public' and rownum <= decode((select trc_file from max),'-1',2147483647,(select trc_file from max))
         union
         SELECT 'remote_listener' "name",nvl(value,' '),'NA'
         FROM v$parameter
         where name='remote_listener' and rownum <=  decode((select rem_lsnr from max),'-1',2147483647,(select rem_lsnr from max))  
         union
         SELECT 'audit_trail' "name",nvl(value,'none'),'NA'
         FROM v$parameter
         where name='audit_trail' and rownum <=  decode((select aud_trl from max),'-1',2147483647,(select aud_trl from max))
         union
         SELECT 'os_authent_prefix' "name",nvl(value,' '),'NA'
         FROM v$parameter
         where name='os_authent_prefix' and rownum <=  decode((select os_auth from max),'-1',2147483647,(select os_auth from max)) 
         union
         SELECT 'sql92_security' "name",nvl(value,'FALSE'),'NA'
         FROM v$parameter
         where name='sql92_security' and rownum <=  decode((select sql92 from max),'-1',2147483647,(select sql92 from max))
         UNION
         SELECT 'db_link_global_name'"name" ,value,'NA'
         FROM v$parameter 
         WHERE name='global_names' and rownum <= decode((select db_lnk from max),'-1',2147483647,(select db_lnk from max))
]]> 
      </Property>
      <Property NAME="SQLINPARAM1" SCOPE="INSTANCE">trace_files_public_max</Property>
      <Property NAME="SQLINPARAM2" SCOPE="INSTANCE">remote_listener_max</Property>
      <Property NAME="SQLINPARAM3" SCOPE="INSTANCE">audit_trail_max</Property>
      <Property NAME="SQLINPARAM4" SCOPE="INSTANCE">os_authent_prefix_max</Property>
      <Property NAME="SQLINPARAM5" SCOPE="INSTANCE">sql92_security_max</Property>
      <Property NAME="SQLINPARAM6" SCOPE="INSTANCE">db_link_global_name_max</Property> 
      <Property NAME="MachineName" SCOPE="INSTANCE">MachineName</Property>
      <Property NAME="Port" SCOPE="INSTANCE">Port</Property>
      <Property NAME="SID" SCOPE="INSTANCE">SID</Property>
      <Property NAME="UserName" SCOPE="INSTANCE">UserName</Property>
      <Property NAME="password" SCOPE="INSTANCE">password</Property>
      <Property NAME="Role" SCOPE="INSTANCE" OPTIONAL="TRUE">Role</Property>
    </QueryDescriptor>
  </Metric>

 <Metric NAME="dbInitParamFilesPerm" TYPE="RAW" CONFIG="TRUE" KEYS_ONLY="TRUE"  HELP="NO_HELP">
      <!-- database instance-specific, initialization file specific to instances-->
    <ValidMidTierVersions START_VER="10.2.0.0.0" />
   <ValidIf>
	<CategoryProp NAME="VersionCategory" CHOICES="8iR2;9i;9iR2;10gR1;10gR2;10gR203;11gR1;11gR2"/>
    </ValidIf>
    <Display>
      <Label NLSID="db_initparam_files_perm">DB InitParameter File Permissions</Label>
    </Display>
    
    <TableDescriptor TABLE_NAME="esm_collection">
      <ColumnDescriptor NAME="property" COLUMN_NAME="property" TYPE="STRING" IS_KEY="TRUE" HELP="NO_HELP">
      </ColumnDescriptor>
      <ColumnDescriptor NAME="value" COLUMN_NAME="value" TYPE="STRING" IS_KEY="TRUE" HELP="NO_HELP">
      </ColumnDescriptor>		
      <ColumnDescriptor NAME="value2" COLUMN_NAME="value2" TYPE="STRING" IS_KEY="TRUE" HELP="NO_HELP">
      </ColumnDescriptor>		
    </TableDescriptor>
	<QueryDescriptor FETCHLET_ID="OSLineToken">
		<Property NAME="perlBin" SCOPE="SYSTEMGLOBAL">perlBin</Property>
		<Property NAME="scriptsDir" SCOPE="SYSTEMGLOBAL">scriptsDir</Property>
		<Property NAME="command" SCOPE="GLOBAL">
             %perlBin%/perl %scriptsDir%//db/dbInitParamFilesPerm.pl
        </Property>
        <Property NAME="ENVSPFILEMAX" SCOPE="INSTANCE">spfile_perm</Property>
        <Property NAME="ENVINITORAMAX" SCOPE="INSTANCE">initora_perm</Property>
        <Property NAME="ENVNSPFILEMAX" SCOPE="INSTANCE">nt_spfile_perm</Property>
        <Property NAME="ENVNINITORAMAX" SCOPE="INSTANCE">nt_initora_perm</Property>
		<Property NAME="startsWith" SCOPE="GLOBAL">em_result=</Property>
		<Property NAME="delimiter" SCOPE="GLOBAL">|</Property>
		<Property NAME="ENVEM_TARGET_NAME" SCOPE="INSTANCE">NAME</Property>
		<Property NAME="STDINEM_TARGET_USERNAME" SCOPE="INSTANCE">UserName</Property>
		<Property NAME="STDINEM_TARGET_PASSWORD" SCOPE="INSTANCE">password</Property>
		<Property NAME="ENVEM_TARGET_ROLE" SCOPE="INSTANCE" OPTIONAL="TRUE">Role</Property>
		<Property NAME="MachineName" SCOPE="INSTANCE">MachineName</Property>
		<Property NAME="Port" SCOPE="INSTANCE">Port</Property>
		<Property NAME="ENVDB_SID" SCOPE="INSTANCE">SID</Property>
		<Property NAME="ENVEM_TARGET_ADDRESS" SCOPE="GLOBAL">(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=%MachineName%)(Port=%Port%))(CONNECT_DATA=(SID=%SID%)))
      </Property>
		<Property NAME="ENVEM_TARGET_ORACLE_HOME" SCOPE="INSTANCE">OracleHome</Property>
	</QueryDescriptor>
 </Metric>

   <Metric NAME="dbAuditPerm" TYPE="RAW" CONFIG="TRUE" KEYS_ONLY="TRUE"  HELP="NO_HELP">
     <!-- database instance-specific, audit file specific to instances-->

    <ValidMidTierVersions START_VER="10.2.0.0.0" />
    <ValidIf>
	<CategoryProp NAME="VersionCategory" CHOICES="8iR2;9i;9iR2;10gR1;10gR2;10gR203;11gR1;11gR2"/>
    </ValidIf>
    <Display>
      <Label NLSID="db_audit_perm">DB Audit Files Permissions</Label>
    </Display>
    <TableDescriptor TABLE_NAME="esm_collection">
      <ColumnDescriptor NAME="property" COLUMN_NAME="property" TYPE="STRING" IS_KEY="TRUE" HELP="NO_HELP">
      </ColumnDescriptor>
      <ColumnDescriptor NAME="value" COLUMN_NAME="value" TYPE="STRING" IS_KEY="TRUE" HELP="NO_HELP">
      </ColumnDescriptor>		
      <ColumnDescriptor NAME="value2" COLUMN_NAME="value2" TYPE="STRING" IS_KEY="TRUE" HELP="NO_HELP">
      </ColumnDescriptor>		
    </TableDescriptor>
	<QueryDescriptor FETCHLET_ID="OSLineToken">
		<Property NAME="perlBin" SCOPE="SYSTEMGLOBAL">perlBin</Property>
		<Property NAME="scriptsDir" SCOPE="SYSTEMGLOBAL">scriptsDir</Property>
		<Property NAME="command" SCOPE="GLOBAL">
             %perlBin%/perl %scriptsDir%//db/dbAuditPerm.pl
        </Property>
        <Property NAME="ENVAFDMAX" SCOPE="INSTANCE">audit_file_dest_max</Property>
        <Property NAME="ENVUDDMAX" SCOPE="INSTANCE">user_dump_dest_max</Property>
        <Property NAME="ENVBDDMAX" SCOPE="INSTANCE">background_dump_dest_max</Property>
        <Property NAME="ENVCDDMAX" SCOPE="INSTANCE">core_dump_dest_max</Property>
        <Property NAME="ENVNAFDMAX" SCOPE="INSTANCE">nt_audit_file_dest_max</Property>
        <Property NAME="ENVNUDDMAX" SCOPE="INSTANCE">nt_user_dump_dest_max</Property>
        <Property NAME="ENVNBDDMAX" SCOPE="INSTANCE">nt_background_dump_dest_max</Property>
        <Property NAME="ENVNCDDMAX" SCOPE="INSTANCE">nt_core_dump_dest_max</Property>
		<Property NAME="startsWith" SCOPE="GLOBAL">em_result=</Property>
		<Property NAME="delimiter" SCOPE="GLOBAL">|</Property>
		<Property NAME="ENVEM_TARGET_NAME" SCOPE="INSTANCE">NAME</Property>
		<Property NAME="STDINEM_TARGET_USERNAME" SCOPE="INSTANCE">UserName</Property>
		<Property NAME="STDINEM_TARGET_PASSWORD" SCOPE="INSTANCE">password</Property>
		<Property NAME="ENVEM_TARGET_ROLE" SCOPE="INSTANCE" OPTIONAL="TRUE">Role</Property>
		<Property NAME="MachineName" SCOPE="INSTANCE">MachineName</Property>
		<Property NAME="Port" SCOPE="INSTANCE">Port</Property>
		<Property NAME="SID" SCOPE="INSTANCE">SID</Property>
		<Property NAME="ENVEM_TARGET_ADDRESS" SCOPE="GLOBAL">(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=%MachineName%)(Port=%Port%))(CONNECT_DATA=(SID=%SID%)))
      </Property>
		<Property NAME="ENVEM_TARGET_ORACLE_HOME" SCOPE="INSTANCE">OracleHome</Property>
	</QueryDescriptor>
 </Metric>
 <Metric NAME="utlFileDirSetting" TYPE="RAW" CONFIG="TRUE" KEYS_ONLY="TRUE"  HELP="NO_HELP">
     <!-- database instance-specific, UTL_FILE_DIR specific to instances-->
     <ValidMidTierVersions START_VER="10.2.0.0.0" />
    <ValidIf>
	<CategoryProp NAME="VersionCategory" CHOICES="8iR2;9i;9iR2;10gR1;10gR2;10gR203;11gR1;11gR2"/>
    </ValidIf>
    <Display>
      <Label NLSID="utl_file_dir_setting">Utl File Directroy Setting</Label>
    </Display>
    <TableDescriptor TABLE_NAME="esm_collection">
      <ColumnDescriptor NAME="property" COLUMN_NAME="property" TYPE="STRING" IS_KEY="TRUE" HELP="NO_HELP">
      </ColumnDescriptor>
      <ColumnDescriptor NAME="value" COLUMN_NAME="value" TYPE="STRING" IS_KEY="TRUE" HELP="NO_HELP">
      </ColumnDescriptor>
      <ColumnDescriptor NAME="value2" COLUMN_NAME="value2" TYPE="STRING" IS_KEY="TRUE" HELP="NO_HELP">
      </ColumnDescriptor>
    </TableDescriptor>
	<QueryDescriptor FETCHLET_ID="OSLineToken">
		<Property NAME="perlBin" SCOPE="SYSTEMGLOBAL">perlBin</Property>
		<Property NAME="scriptsDir" SCOPE="SYSTEMGLOBAL">scriptsDir</Property>
		<Property NAME="command" SCOPE="GLOBAL">
             %perlBin%/perl %scriptsDir%//db/utlFileDir.pl
        </Property>
        <Property NAME="ENVUTLFILEDIRMAX" SCOPE="INSTANCE">utl_file_dir_max</Property>
        <Property NAME="ENVUTLFILEDIR9MAX" SCOPE="INSTANCE">utl_file_dir_9i_max</Property>
		<Property NAME="startsWith" SCOPE="GLOBAL">em_result=</Property>
		<Property NAME="delimiter" SCOPE="GLOBAL">|</Property>
		<Property NAME="ENVEM_TARGET_NAME" SCOPE="INSTANCE">NAME</Property>
		<Property NAME="STDINEM_TARGET_USERNAME" SCOPE="INSTANCE">UserName</Property>
		<Property NAME="STDINEM_TARGET_PASSWORD" SCOPE="INSTANCE">password</Property>
		<Property NAME="ENVEM_TARGET_ROLE" SCOPE="INSTANCE" OPTIONAL="TRUE">Role</Property>
		<Property NAME="MachineName" SCOPE="INSTANCE">MachineName</Property>
		<Property NAME="Port" SCOPE="INSTANCE">Port</Property>
		<Property NAME="SID" SCOPE="INSTANCE">SID</Property>
		<Property NAME="ENVEM_TARGET_ADDRESS" SCOPE="GLOBAL">(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=%MachineName%)(Port=%Port%))(CONNECT_DATA=(SID=%SID%)))
      </Property>
		<Property NAME="ENVEM_TARGET_ORACLE_HOME" SCOPE="INSTANCE">OracleHome</Property>
	</QueryDescriptor>
 </Metric>
 <Metric NAME="iFileRefPerm" TYPE="RAW" CONFIG="TRUE" KEYS_ONLY="TRUE"  HELP="NO_HELP">
     <!-- database instance-specific, init file specific to instances-->
     <ValidMidTierVersions START_VER="10.2.0.0.0" />
    <ValidIf>
	<CategoryProp NAME="VersionCategory" CHOICES="8iR2;9i;9iR2;10gR1;10gR2;10gR203;11gR1;11gR2"/>
    </ValidIf>
    <Display>
      <Label NLSID="ifile_ref_files_perm">IFiles Permissions</Label>
    </Display>
    <TableDescriptor TABLE_NAME="esm_collection">
      <ColumnDescriptor NAME="property" COLUMN_NAME="property" TYPE="STRING" IS_KEY="TRUE" HELP="NO_HELP">
      </ColumnDescriptor>
      <ColumnDescriptor NAME="value" COLUMN_NAME="value" TYPE="STRING" IS_KEY="TRUE" HELP="NO_HELP">
      </ColumnDescriptor>
      <ColumnDescriptor NAME="value2" COLUMN_NAME="value2" TYPE="STRING" IS_KEY="TRUE" HELP="NO_HELP">
      </ColumnDescriptor>
    </TableDescriptor>
	<QueryDescriptor FETCHLET_ID="OSLineToken">
		<Property NAME="perlBin" SCOPE="SYSTEMGLOBAL">perlBin</Property>
		<Property NAME="scriptsDir" SCOPE="SYSTEMGLOBAL">scriptsDir</Property>
		<Property NAME="command" SCOPE="GLOBAL">
             %perlBin%/perl %scriptsDir%//db/iFileRefPerm.pl
        </Property>
        <Property NAME="ENVIFILEMAX" SCOPE="INSTANCE">oh_ifile_perm_max</Property>
        <Property NAME="ENVNIFILEMAX" SCOPE="INSTANCE">nt_oh_ifile_perm_max</Property>
		<Property NAME="startsWith" SCOPE="GLOBAL">em_result=</Property>
		<Property NAME="delimiter" SCOPE="GLOBAL">|</Property>
		<Property NAME="ENVEM_TARGET_NAME" SCOPE="INSTANCE">NAME</Property>
		<Property NAME="STDINEM_TARGET_USERNAME" SCOPE="INSTANCE">UserName</Property>
		<Property NAME="STDINEM_TARGET_PASSWORD" SCOPE="INSTANCE">password</Property>
		<Property NAME="ENVEM_TARGET_ROLE" SCOPE="INSTANCE" OPTIONAL="TRUE">Role</Property>
		<Property NAME="MachineName" SCOPE="INSTANCE">MachineName</Property>
		<Property NAME="Port" SCOPE="INSTANCE">Port</Property>
		<Property NAME="ENVDB_SID" SCOPE="INSTANCE">SID</Property>
		<Property NAME="ENVEM_TARGET_ADDRESS" SCOPE="GLOBAL">(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=%MachineName%)(Port=%Port%))(CONNECT_DATA=(SID=%SID%)))
      </Property>
		<Property NAME="ENVEM_TARGET_ORACLE_HOME" SCOPE="INSTANCE">OracleHome</Property>
	</QueryDescriptor>
 </Metric>
<!-- ESA database collection ends -->


<!-- ESM collection -->
  <Metric NAME="remoteRolesAndAuthentication" TYPE="RAW" CONFIG="TRUE" KEYS_ONLY="TRUE"  HELP="NO_HELP">

    <ValidIf>
    <CategoryProp NAME="VersionCategory" CHOICES="8iR2;9i;9iR2;10gR1;10gR2;10gR203;11gR1;11gR2"/>
    </ValidIf>
    <Display>
      <Label NLSID="remote_role_authentication">Remote OS Roles and Authentication</Label>
    </Display>
    <TableDescriptor TABLE_NAME="esm_collection">
      <ColumnDescriptor NAME="property" COLUMN_NAME="property" TYPE="STRING" IS_KEY="TRUE" HELP="NO_HELP">
      </ColumnDescriptor>
      <ColumnDescriptor NAME="value" COLUMN_NAME="value" TYPE="STRING" IS_KEY="TRUE" HELP="NO_HELP">
      </ColumnDescriptor>
    </TableDescriptor>

    <QueryDescriptor FETCHLET_ID="SQL">
      <Property NAME="STATEMENT" SCOPE="GLOBAL">
<![CDATA[
  WITH max as (select :1 as rem_roles, :2 as rem_auth from dual)
  SELECT name,value
  FROM sys.v_$parameter
  where name='remote_os_roles' and rownum <= decode((select rem_roles from max),'-1',2147483647,(select rem_roles from max)) 
  UNION
  SELECT name,value
  FROM sys.v_$parameter
  where name='remote_os_authent' and rownum <= decode((select rem_auth from max),'-1',2147483647,(select rem_auth from max))
]]>
      </Property>
      <Property NAME="SQLINPARAM1" SCOPE="INSTANCE">remote_os_roles_max</Property>
      <Property NAME="SQLINPARAM2" SCOPE="INSTANCE">remote_os_authent_max</Property>
      <Property NAME="MachineName" SCOPE="INSTANCE">MachineName</Property>
      <Property NAME="Port" SCOPE="INSTANCE">Port</Property>
      <Property NAME="SID" SCOPE="INSTANCE">SID</Property>
      <Property NAME="UserName" SCOPE="INSTANCE">UserName</Property>
      <Property NAME="password" SCOPE="INSTANCE">password</Property>
      <Property NAME="Role" SCOPE="INSTANCE" OPTIONAL="TRUE">Role</Property>

    </QueryDescriptor>
  </Metric>

  <Metric NAME="remoteLoginPasswordFile" TYPE="RAW" CONFIG="TRUE" KEYS_ONLY="TRUE" HELP="NO_HELP" >
    <ValidIf>
    <CategoryProp NAME="VersionCategory" CHOICES="8iR2;9i;9iR2;10gR1;10gR2;10gR203;11gR1;11gR2"/>
    </ValidIf>
    <Display>
      <Label NLSID="remote_password_file">Remote Password File</Label>
    </Display>
    <TableDescriptor TABLE_NAME="esm_collection">
      <ColumnDescriptor NAME="property" COLUMN_NAME="property" TYPE="STRING" IS_KEY="TRUE" HELP="NO_HELP">
      </ColumnDescriptor>
      <ColumnDescriptor NAME="value" COLUMN_NAME="value" TYPE="STRING" IS_KEY="TRUE" HELP="NO_HELP">
      </ColumnDescriptor>
    </TableDescriptor>

    <QueryDescriptor FETCHLET_ID="SQL">
      <Property NAME="STATEMENT" SCOPE="GLOBAL">
<![CDATA[
  WITH max as (select :1 as rem_log_pass from dual)
  SELECT name,value
  FROM sys.v_$parameter
  where name='remote_login_passwordfile' and rownum <= decode((select rem_log_pass from max),'-1',2147483647,(select rem_log_pass  from max)) 
]]>
      </Property>
      <Property NAME="SQLINPARAM1" SCOPE="INSTANCE">remote_login_passwordfile_max</Property>
      <Property NAME="MachineName" SCOPE="INSTANCE">MachineName</Property>
      <Property NAME="Port" SCOPE="INSTANCE">Port</Property>
      <Property NAME="SID" SCOPE="INSTANCE">SID</Property>
      <Property NAME="UserName" SCOPE="INSTANCE">UserName</Property>
      <Property NAME="password" SCOPE="INSTANCE">password</Property>
      <Property NAME="Role" SCOPE="INSTANCE" OPTIONAL="TRUE">Role</Property>

    </QueryDescriptor>
  </Metric>

  <!--
  ======================================================================
  == SGA Metric
  ======================================================================
    -->
        <Metric NAME="sga_stats" TYPE="TABLE" USAGE_TYPE="HIDDEN">
          <ValidIf>
            <CategoryProp NAME="VersionCategory" CHOICES="10gR203;11gR1;11gR2"/>
          </ValidIf>
                <Display>
                        <Label NLSID="sga_stats">Statistics from Direct SGA Attach</Label>
                </Display>
        <TableDescriptor>
                <ColumnDescriptor NAME="data" TYPE="STRING" IS_KEY="FALSE">
                        <Display>
                                <Label NLSID="sga_stats_data">Data from the SGA</Label>
                        </Display>
                </ColumnDescriptor>
        </TableDescriptor>
        <QueryDescriptor FETCHLET_ID="SGA">
                <Property NAME="METRIC_QUERY_NAME" SCOPE="USER">METRIC_QUERY_NAME</Property>
            	<Property NAME="ENVEM_TARGET_ORACLE_HOME" SCOPE="INSTANCE">OracleHome</Property>
		<Property NAME="Port" SCOPE="INSTANCE">Port</Property>
		<Property NAME="SID" SCOPE="INSTANCE">SID</Property>
		<Property NAME="MachineName" SCOPE="HOST">NAME</Property>
	        <Property NAME="ConnStr" SCOPE="GLOBAL">(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=%MachineName%)(Port=%Port%))(CONNECT_DATA=(SID=%SID%)))</Property>
        </QueryDescriptor>
        </Metric>

   <!--
  ======================================================================
  == HealthCheck Metric
  ======================================================================
    -->
        <Metric NAME="health_check" TYPE="TABLE">
           <ValidIf>
              <CategoryProp NAME="VersionCategory" CHOICES="10gR1;10gR2;10gR203;11gR1;11gR2" /> 
           </ValidIf>              
                <Display>
			<Label NLSID="health_check_title">Health Check</Label>
		</Display>
        <TableDescriptor>
                <ColumnDescriptor NAME="Status" TYPE="NUMBER" IS_KEY="FALSE">
                        <Display>
                                <Label NLSID="health_check_status">Instance Status</Label>
                        </Display>
                </ColumnDescriptor>
                <ColumnDescriptor NAME="Unmounted" TYPE="NUMBER" IS_KEY="FALSE">
                        <Display>
                                <Label NLSID="health_check_unmounted">Unmounted</Label>
                        </Display>
                </ColumnDescriptor>
                <ColumnDescriptor NAME="Mounted" TYPE="NUMBER" IS_KEY="FALSE">
                        <Display>
                                <Label NLSID="health_check_mounted">Mounted</Label>
                        </Display>
                </ColumnDescriptor>
                <ColumnDescriptor NAME="Unavailable" TYPE="NUMBER" IS_KEY="FALSE">
                        <Display>
                                <Label NLSID="health_check_unavailable">Unavailable</Label>
                        </Display>
                </ColumnDescriptor>
               <ColumnDescriptor NAME="Maintenance" TYPE="NUMBER" IS_KEY="FALSE">
                        <Display>
                                <Label NLSID="health_check_maint">Maintenance</Label>
                        </Display>
                </ColumnDescriptor>
                <ColumnDescriptor NAME="text" TYPE="STRING" IS_KEY="FALSE">
                        <Display>
                                <Label NLSID="health_check_state_desc">State Description</Label>
                        </Display>
                </ColumnDescriptor>
                <ColumnDescriptor NAME="State_Table" TYPE="NUMBER" IS_KEY="FALSE">
                        <Display>
                                <Label NLSID="health_check_state">Instance State</Label>
                        </Display>
                </ColumnDescriptor>


        </TableDescriptor>
        <QueryDescriptor FETCHLET_ID="HC">
              	<Property NAME="ENVEM_TARGET_ORACLE_HOME" SCOPE="INSTANCE">OracleHome</Property>
   		<Property NAME="SID" SCOPE="INSTANCE">SID</Property>
        </QueryDescriptor>
        </Metric>


  <!--
    ======================================================================
    == Hang Analyze Metric
    ======================================================================
    -->
  <Metric NAME="waiting_sessions" TYPE="TABLE" USAGE_TYPE="HIDDEN" KEYS_ONLY="TRUE">
    <ValidIf>
      <CategoryProp NAME="VersionCategory" CHOICES="8iR2;9i;9iR2;10gR1;10gR2;10gR203"/>
    </ValidIf>
    <TableDescriptor/>
    <QueryDescriptor FETCHLET_ID="OSLineToken">
      <Property NAME="perlBin" SCOPE="SYSTEMGLOBAL">perlBin</Property>
      <Property NAME="scriptsDir" SCOPE="SYSTEMGLOBAL">scriptsDir</Property>
      <Property NAME="ENVEM_TARGET_ORACLE_HOME" SCOPE="INSTANCE">OracleHome</Property>
      <Property NAME="SID" SCOPE="INSTANCE">SID</Property>
      <Property NAME="analysisAreaOption" SCOPE="USER" OPTIONAL="TRUE">analysisAreaOption</Property>
      <Property NAME="command" SCOPE="GLOBAL">
%perlBin%/perl %scriptsDir%/db/hanganalyze.pl %OracleHome% %SID% %scriptsDir%/db/ %analysisAreaOption%
      </Property>
      <Property NAME="startsWith" SCOPE="GLOBAL">em_result=</Property>
      <Property NAME="delimiter" SCOPE="GLOBAL">|</Property>
    </QueryDescriptor>
  </Metric>

  <!--
    ======================================================================
    == Hang Analyze Metric (11g replacement)
    ======================================================================
    -->
  <Metric NAME="session_wait_chains" TYPE="TABLE" USAGE_TYPE="HIDDEN" KEYS_ONLY="TRUE">
    <ValidIf>
      <CategoryProp NAME="VersionCategory" CHOICES="11gR1;11gR2"/>
    </ValidIf>
    <TableDescriptor/>
    <QueryDescriptor FETCHLET_ID="OSLineToken">
      <Property NAME="perlBin" SCOPE="SYSTEMGLOBAL">perlBin</Property>
      <Property NAME="scriptsDir" SCOPE="SYSTEMGLOBAL">scriptsDir</Property>
      <Property NAME="MachineName" SCOPE="INSTANCE">MachineName</Property>
      <Property NAME="Port" SCOPE="INSTANCE">Port</Property>
      <Property NAME="SID" SCOPE="INSTANCE">SID</Property>
      <Property NAME="analysisAreaOption" SCOPE="USER" OPTIONAL="TRUE">analysisAreaOption</Property>
      <Property NAME="ENVEM_TARGET_ADDRESS" SCOPE="GLOBAL">
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=%MachineName%)(Port=%Port%))(CONNECT_DATA=(SID=%SID%)))
      </Property>
      <Property NAME="OracleHome" SCOPE="INSTANCE">OracleHome</Property>
      <Property NAME="STDINEM_SYSDBA_USERNAME" SCOPE="USER" OPTIONAL="TRUE">SYSDBAUserName</Property>
      <Property NAME="STDINEM_SYSDBA_PASSWORD" SCOPE="USER" OPTIONAL="TRUE">SYSDBAPassword</Property>
      <Property NAME="command" SCOPE="GLOBAL">
%perlBin%/perl %scriptsDir%/db/waitChains.pl %OracleHome% %SID% %analysisAreaOption%
      </Property>
      <Property NAME="startsWith" SCOPE="GLOBAL">em_result=</Property>
      <Property NAME="delimiter" SCOPE="GLOBAL">|</Property>
    </QueryDescriptor>
  </Metric>

  <!--
    ======================================================================
    == Hang Diagnostic Traces Metric
    ======================================================================
    -->
  <Metric NAME="hung_system_traces" TYPE="TABLE" USAGE_TYPE="HIDDEN">
    <ValidIf>
      <CategoryProp NAME="VersionCategory" CHOICES="11gR1;11gR2"/>
    </ValidIf>
    <TableDescriptor>
      <ColumnDescriptor NAME="tracefile" TYPE="STRING" IS_KEY="TRUE"/>
    </TableDescriptor>
    <QueryDescriptor FETCHLET_ID="OSLineToken">
      <Property NAME="perlBin" SCOPE="SYSTEMGLOBAL">perlBin</Property>
      <Property NAME="scriptsDir" SCOPE="SYSTEMGLOBAL">scriptsDir</Property>
      <Property NAME="MachineName" SCOPE="INSTANCE">MachineName</Property>
      <Property NAME="Port" SCOPE="INSTANCE">Port</Property>
      <Property NAME="SID" SCOPE="INSTANCE">SID</Property>
      <Property NAME="ENVEM_TARGET_ADDRESS" SCOPE="GLOBAL">
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=%MachineName%)(Port=%Port%))(CONNECT_DATA=(SID=%SID%)))
      </Property>
      <Property NAME="OracleHome" SCOPE="INSTANCE">OracleHome</Property>
      <Property NAME="STDINEM_SYSDBA_USERNAME" SCOPE="USER" OPTIONAL="TRUE">SYSDBAUserName</Property>
      <Property NAME="STDINEM_SYSDBA_PASSWORD" SCOPE="USER" OPTIONAL="TRUE">SYSDBAPassword</Property>
      <Property NAME="command" SCOPE="GLOBAL">
%perlBin%/perl %scriptsDir%/db/getHangTraces.pl %OracleHome% %SID%
      </Property>
      <Property NAME="startsWith" SCOPE="GLOBAL">em_result=</Property>
      <Property NAME="delimiter" SCOPE="GLOBAL">|</Property>
    </QueryDescriptor>
  </Metric>

  <!--
  ======================================================================
  == SGA Start Metric
  ======================================================================
    -->
        <Metric NAME="sga_start" TYPE="TABLE" USAGE_TYPE="COLLECT_UPLOAD">
          <ValidIf>
            <CategoryProp NAME="VersionCategory" CHOICES="10gR203;11gR1;11gR2"/>
          </ValidIf>
                <TableDescriptor>
                	<ColumnDescriptor NAME="dummy" TYPE="STRING" IS_KEY="FALSE"/>
                </TableDescriptor>
                <QueryDescriptor FETCHLET_ID="OSLineToken">
                        <Property NAME="AgentOracleHome" SCOPE="GLOBAL">%OracleHome%</Property>
			<Property NAME="Port" SCOPE="INSTANCE">Port</Property>
			<Property NAME="SID" SCOPE="INSTANCE">SID</Property>
                 	<Property NAME="ENVEM_TARGET_ORACLE_HOME" SCOPE="INSTANCE">OracleHome</Property>
			<Property NAME="STDINEM_TARGET_USERNAME" SCOPE="INSTANCE">UserName</Property>
			<Property NAME="STDINEM_TARGET_PASSWORD" SCOPE="INSTANCE">password</Property>
                        <Property NAME="perlBin" SCOPE="SYSTEMGLOBAL">perlBin</Property>
                        <Property NAME="scriptsDir" SCOPE="SYSTEMGLOBAL">scriptsDir</Property>
                        <Property NAME="ENVEM_TARGET_VERSION" SCOPE="INSTANCE">VersionCategory</Property>
			<Property NAME="MachineName" SCOPE="HOST">NAME</Property>
		        <Property NAME="ConnStr" SCOPE="GLOBAL">(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=%MachineName%)(Port=%Port%))(CONNECT_DATA=(SID=%SID%)))</Property>
  		        <Property NAME="ADVERT_DIR" SCOPE="GLOBAL">%AgentOracleHome%/%MachineName%_%SID%/sysman/log</Property>
                        <Property NAME="command" SCOPE="GLOBAL">%perlBin%/perl %scriptsDir%/db/sgastart.pl DSGA %ConnStr% %MachineName% %Port% %SID% %AgentOracleHome% %ADVERT_DIR%</Property>
                        <Property NAME="startsWith" SCOPE="GLOBAL">em_result=</Property>
                        <Property NAME="delimiter" SCOPE="GLOBAL">|</Property>
                        <Property NAME="ENVRDBMS_GROUP_OWNER" SCOPE="USER" OPTIONAL="TRUE">rdbmsGroupOwner</Property>
                </QueryDescriptor>
        </Metric>
  <!--
  ======================================================================
  == SGA Stop Metric
  ======================================================================
  -->
        <Metric NAME="sga_stop" TYPE="TABLE" USAGE_TYPE="HIDDEN">
          <ValidIf>
            <CategoryProp NAME="VersionCategory" CHOICES="10gR203;11gR1;11gR2"/>
          </ValidIf>
                <TableDescriptor>
                	<ColumnDescriptor NAME="dummy" TYPE="STRING" IS_KEY="FALSE"/>
                </TableDescriptor>
                <QueryDescriptor FETCHLET_ID="OSLineToken">
                        <Property NAME="AgentOracleHome" SCOPE="GLOBAL">%OracleHome%</Property>
			<Property NAME="Port" SCOPE="INSTANCE">Port</Property>
			<Property NAME="SID" SCOPE="INSTANCE">SID</Property>
                 	<Property NAME="ENVEM_TARGET_ORACLE_HOME" SCOPE="INSTANCE">OracleHome</Property>
			<Property NAME="STDINEM_TARGET_USERNAME" SCOPE="INSTANCE">UserName</Property>
			<Property NAME="STDINEM_TARGET_PASSWORD" SCOPE="INSTANCE">password</Property>
                        <Property NAME="perlBin" SCOPE="SYSTEMGLOBAL">perlBin</Property>
                        <Property NAME="scriptsDir" SCOPE="SYSTEMGLOBAL">scriptsDir</Property>
                        <Property NAME="ENVEM_TARGET_VERSION" SCOPE="INSTANCE">VersionCategory</Property>
			<Property NAME="MachineName" SCOPE="HOST">NAME</Property>
		        <Property NAME="ConnStr" SCOPE="GLOBAL">(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=%MachineName%)(Port=%Port%))(CONNECT_DATA=(SID=%SID%)))</Property>
  		        <Property NAME="ADVERT_DIR" SCOPE="GLOBAL">%AgentOracleHome%/%MachineName%_%SID%/sysman/log</Property>
                        <Property NAME="command" SCOPE="GLOBAL">%perlBin%/perl %scriptsDir%/db/sgastart.pl DSGA %ConnStr% %MachineName% %Port% %SID% %AgentOracleHome% %ADVERT_DIR% stop</Property>
                        <Property NAME="startsWith" SCOPE="GLOBAL">em_result=</Property>
                        <Property NAME="delimiter" SCOPE="GLOBAL">|</Property>
                </QueryDescriptor>
        </Metric>
   <!--
    ======================================================================
    == SGA Resume Metric
    ======================================================================
    -->
        <Metric NAME="sga_resume" TYPE="TABLE" USAGE_TYPE="HIDDEN">
          <ValidIf>
            <CategoryProp NAME="VersionCategory" CHOICES="10gR203;11gR1;11gR2"/>
          </ValidIf>
                  <TableDescriptor>
                  	<ColumnDescriptor NAME="dummy" TYPE="STRING" IS_KEY="FALSE"/>
                  </TableDescriptor>
                  <QueryDescriptor FETCHLET_ID="OSLineToken">
                        <Property NAME="AgentOracleHome" SCOPE="GLOBAL">%OracleHome%</Property>
  			<Property NAME="Port" SCOPE="INSTANCE">Port</Property>
  			<Property NAME="SID" SCOPE="INSTANCE">SID</Property>
                   	<Property NAME="ENVEM_TARGET_ORACLE_HOME" SCOPE="INSTANCE">OracleHome</Property>
  			<Property NAME="STDINEM_TARGET_USERNAME" SCOPE="INSTANCE">UserName</Property>
  			<Property NAME="STDINEM_TARGET_PASSWORD" SCOPE="INSTANCE">password</Property>
                          <Property NAME="perlBin" SCOPE="SYSTEMGLOBAL">perlBin</Property>
                          <Property NAME="scriptsDir" SCOPE="SYSTEMGLOBAL">scriptsDir</Property>
                        <Property NAME="ENVEM_TARGET_VERSION" SCOPE="INSTANCE">VersionCategory</Property>
  			<Property NAME="MachineName" SCOPE="HOST">NAME</Property>
  		        <Property NAME="ConnStr" SCOPE="GLOBAL">(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=%MachineName%)(Port=%Port%))(CONNECT_DATA=(SID=%SID%)))</Property>
    		        <Property NAME="ADVERT_DIR" SCOPE="GLOBAL">%AgentOracleHome%/%MachineName%_%SID%/sysman/log</Property>
                          <Property NAME="command" SCOPE="GLOBAL">%perlBin%/perl %scriptsDir%/db/sgastart.pl DSGA %ConnStr% %MachineName% %Port% %SID% %AgentOracleHome% %ADVERT_DIR% resume</Property>
                          <Property NAME="startsWith" SCOPE="GLOBAL">em_result=</Property>
                          <Property NAME="delimiter" SCOPE="GLOBAL">|</Property>
                  </QueryDescriptor>
          </Metric>
   <!--
    ======================================================================
    == SGA status Metric
    ======================================================================
    -->
        <Metric NAME="sga_status" TYPE="TABLE" USAGE_TYPE="HIDDEN">
          <ValidIf>
            <CategoryProp NAME="VersionCategory" CHOICES="10gR203;11gR1;11gR2"/>
          </ValidIf>
                  <TableDescriptor>
                  	<ColumnDescriptor NAME="dummy" TYPE="STRING" IS_KEY="FALSE"/>
                  </TableDescriptor>
                  <QueryDescriptor FETCHLET_ID="OSLineToken">
                        <Property NAME="AgentOracleHome" SCOPE="GLOBAL">%OracleHome%</Property>
  			<Property NAME="Port" SCOPE="INSTANCE">Port</Property>
  			<Property NAME="SID" SCOPE="INSTANCE">SID</Property>
                   	<Property NAME="ENVEM_TARGET_ORACLE_HOME" SCOPE="INSTANCE">OracleHome</Property>
  			<Property NAME="STDINEM_TARGET_USERNAME" SCOPE="INSTANCE">UserName</Property>
  			<Property NAME="STDINEM_TARGET_PASSWORD" SCOPE="INSTANCE">password</Property>
                          <Property NAME="perlBin" SCOPE="SYSTEMGLOBAL">perlBin</Property>
                          <Property NAME="scriptsDir" SCOPE="SYSTEMGLOBAL">scriptsDir</Property>
                        <Property NAME="ENVEM_TARGET_VERSION" SCOPE="INSTANCE">VersionCategory</Property>
  			<Property NAME="MachineName" SCOPE="HOST">NAME</Property>
  		        <Property NAME="ConnStr" SCOPE="GLOBAL">(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=%MachineName%)(Port=%Port%))(CONNECT_DATA=(SID=%SID%)))</Property>
    		        <Property NAME="ADVERT_DIR" SCOPE="GLOBAL">%AgentOracleHome%/%MachineName%_%SID%/sysman/log</Property>
                          <Property NAME="command" SCOPE="GLOBAL">%perlBin%/perl %scriptsDir%/db/sgastart.pl DSGA %ConnStr% %MachineName% %Port% %SID% %AgentOracleHome% %ADVERT_DIR% status</Property>
                          <Property NAME="startsWith" SCOPE="GLOBAL">em_result=</Property>
                          <Property NAME="delimiter" SCOPE="GLOBAL">|</Property>
                  </QueryDescriptor>
          </Metric>
  
  <!--
  ======================================================================
  == SGA Hostname
  ======================================================================
    -->
        <Metric NAME="sga_hostname" TYPE="TABLE" USAGE_TYPE="HIDDEN">
                <TableDescriptor>
                	<ColumnDescriptor NAME="dummy" TYPE="STRING" IS_KEY="FALSE"/>
                </TableDescriptor>
                <QueryDescriptor FETCHLET_ID="OSLineToken">
			<Property NAME="HostName" SCOPE="HOST">NAME</Property>
                        <Property NAME="perlBin" SCOPE="SYSTEMGLOBAL">perlBin</Property>
                        <Property NAME="scriptsDir" SCOPE="SYSTEMGLOBAL">scriptsDir</Property>
                        <Property NAME="command" SCOPE="GLOBAL">%perlBin%/perl %scriptsDir%/db/gethostname.pl %HostName%</Property>
                        <Property NAME="startsWith" SCOPE="GLOBAL">em_result=</Property>
                        <Property NAME="delimiter" SCOPE="GLOBAL">|</Property>
                </QueryDescriptor>
        </Metric>

  <!--
  ======================================================================
  == SGA Physical CPUs
  ======================================================================
    -->
        <Metric NAME="sga_physicalcpu" TYPE="TABLE" USAGE_TYPE="HIDDEN">
                <TableDescriptor>
                	<ColumnDescriptor NAME="dummy" TYPE="STRING" IS_KEY="FALSE"/>
                </TableDescriptor>
                <QueryDescriptor FETCHLET_ID="OSLineToken">
                        <Property NAME="perlBin" SCOPE="SYSTEMGLOBAL">perlBin</Property>
                        <Property NAME="scriptsDir" SCOPE="SYSTEMGLOBAL">scriptsDir</Property>
                        <Property NAME="command" SCOPE="GLOBAL">%perlBin%/perl %scriptsDir%/db/getphysicalcpu.pl %perlBin% %scriptsDir%</Property>
                        <Property NAME="startsWith" SCOPE="GLOBAL">em_result=</Property>
                        <Property NAME="delimiter" SCOPE="GLOBAL">|</Property>
                </QueryDescriptor>
        </Metric>

	<!-- High Availability - Instance Recovery (MTTR) -->
	<Metric NAME="ha_mttr" TYPE="RAW">
		<ValidIf>
			<CategoryProp NAME="VersionCategory" CHOICES="9i;9iR2;10gR1;10gR2;10gR203;11gR1;11gR2"/>
		</ValidIf>
		<Display>
			<Label NLSID="ha_mttr">mgmt_ha_mttr</Label>
		</Display>
		<TableDescriptor TABLE_NAME="mgmt_ha_mttr" SKIP_COLLTIME_PK="TRUE" SKIP_METRIC_COLUMN="TRUE">
			<ColumnDescriptor NAME="estimated_mttr" COLUMN_NAME="estimated_mttr" TYPE="NUMBER" IS_KEY="FALSE">
				<Display>
					<Label NLSID="ha_mttr_estimated_mttr">Estimated MTTR</Label>
				</Display>
			</ColumnDescriptor>
		</TableDescriptor>
		<QueryDescriptor FETCHLET_ID="SQL">
			<ValidIf>
				<CategoryProp NAME="VersionCategory" CHOICES="9i;9iR2;10gR1;10gR2;10gR203;11gR1;11gR2"/>
			</ValidIf>
			<Property NAME="STATEMENT" SCOPE="GLOBAL"><![CDATA[
    SELECT  estimated_mttr "Estimated MTTR"
    FROM    v$instance_recovery
]]></Property>
			<Property NAME="MachineName" SCOPE="INSTANCE">MachineName</Property>
			<Property NAME="Port" SCOPE="INSTANCE">Port</Property>
			<Property NAME="SID" SCOPE="INSTANCE">SID</Property>
			<Property NAME="UserName" SCOPE="INSTANCE">UserName</Property>
			<Property NAME="password" SCOPE="INSTANCE">password</Property>
			<Property NAME="Role" SCOPE="INSTANCE" OPTIONAL="TRUE">Role</Property>
		</QueryDescriptor>
	</Metric>

<!--  RAC Interconnects colletion. RAC instance only -->
    <Metric NAME="ha_rac_intrconn" TYPE="RAW" CONFIG="TRUE">
        <ValidIf>
             <CategoryProp NAME="VersionCategory" CHOICES="10gR2;10gR203;11gR1;11gR2"/>
             <CategoryProp NAME="MetricScope" CHOICES="RACINST"/>
        </ValidIf>
        <ValidMidTierVersions START_VER="10.2.0.0.0"/>
        <Display>
            <Label NLSID="ha_rac_intrconn">mgmt_ha_rac_intrconn</Label>
        </Display>
        <TableDescriptor TABLE_NAME="MGMT_HA_RAC_INTR_CONN">
            <ColumnDescriptor NAME="ic_name" COLUMN_NAME="ic_name" TYPE="STRING" IS_KEY="TRUE">
                <Display>
                    <Label NLSID="ha_cls_intrconn_ic_name">Interconnect Name</Label>
                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="ic_ip" COLUMN_NAME="ic_ip" TYPE="STRING" IS_KEY="TRUE">
                <Display>
                    <Label NLSID="ha_cls_intrconn_ic_ip">IP Address</Label>
                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="ic_public" COLUMN_NAME="ic_public" TYPE="STRING" IS_KEY="FALSE">
                <Display>
                    <Label NLSID="ha_cls_intrconn_ic_public">Public</Label>
                </Display>
            </ColumnDescriptor>
            <ColumnDescriptor NAME="ic_source" COLUMN_NAME="ic_source" TYPE="STRING" IS_KEY="FALSE">
                <Display>
                    <Label NLSID="ha_cls_intrconn_ic_source">Source</Label>
                </Display>
            </ColumnDescriptor>
        </TableDescriptor>
        
		<QueryDescriptor FETCHLET_ID="OSLineToken">
			<Property NAME="perlBin" SCOPE="SYSTEMGLOBAL">perlBin</Property>
			<Property NAME="scriptsDir" SCOPE="SYSTEMGLOBAL">scriptsDir</Property>
			<Property NAME="command" SCOPE="GLOBAL">
             %perlBin%/perl %scriptsDir%/rac/dbIntrconn.pl
         </Property>
			<Property NAME="startsWith" SCOPE="GLOBAL">em_result=</Property>
			<Property NAME="delimiter" SCOPE="GLOBAL">|</Property>
			<Property NAME="ENVEM_TARGET_NAME" SCOPE="INSTANCE">NAME</Property>
			<Property NAME="STDINEM_TARGET_USERNAME" SCOPE="INSTANCE">UserName</Property>
			<Property NAME="STDINEM_TARGET_PASSWORD" SCOPE="INSTANCE">password</Property>
			<Property NAME="ENVEM_TARGET_ROLE" SCOPE="INSTANCE" OPTIONAL="TRUE">Role</Property>
			<Property NAME="MachineName" SCOPE="INSTANCE">MachineName</Property>
			<Property NAME="Port" SCOPE="INSTANCE">Port</Property>
			<Property NAME="SID" SCOPE="INSTANCE">SID</Property>
			<Property NAME="ENVEM_TARGET_ADDRESS" SCOPE="GLOBAL">(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=%MachineName%)(Port=%Port%))(CONNECT_DATA=(SID=%SID%)))
            </Property>
		</QueryDescriptor>
	</Metric>

<!-- RAC Interconnect Traffic, RAC Instance Only -->
  <Metric NAME="ha_rac_intrconn_traffic" TYPE="TABLE">
    <ValidIf>
         <CategoryProp NAME="VersionCategory" CHOICES="10gR2;10gR203;11gR1;11gR2"/>
         <CategoryProp NAME="MetricScope" CHOICES="RACINST"/>
    </ValidIf>
    <Display>
      <Label NLSID="ha_rac_intrconn_traffic">Interconnect Traffic</Label>
    </Display>
    <TableDescriptor>
      <ColumnDescriptor NAME="instance" TYPE="STRING" IS_KEY="TRUE">
        <Display>
          <Label NLSID="ha_rac_intrconn_traffic_instance">Instance Name</Label>
        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="db_block_size" TYPE="NUMBER" TRANSIENT="TRUE" IS_KEY="FALSE">
        <Display>
          <Label NLSID="ha_rac_intrconn_traffic_db_block_size">db_block_size</Label>
        </Display>
      </ColumnDescriptor>

      <ColumnDescriptor NAME="gc_cr_recv" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
        <Display>
          <Label NLSID="ha_rac_intrconn_traffic_gc_cr_recv">gc cr blocks received</Label>
        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="gc_cur_recv" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
        <Display>
          <Label NLSID="ha_rac_intrconn_traffic_gc_cr_recv">gc current blocks received</Label>
        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="gc_cr_serv" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
        <Display>
          <Label NLSID="ha_rac_intrconn_traffic_gc_cr_serv">gc cr blocks served</Label>
        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="gc_cur_serv" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
        <Display>
          <Label NLSID="ha_rac_intrconn_traffic_gc_cur_serv">gc current blocks served</Label>
        </Display>
      </ColumnDescriptor>
      
      <ColumnDescriptor NAME="msg_sent_dir" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
        <Display>
          <Label NLSID="ha_rac_intrconn_traffic_msg_sent_dir">messages sent directly</Label>
        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="msg_sent_indir" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
        <Display>
          <Label NLSID="ha_rac_intrconn_traffic_msg_sent_indir">messages sent indirectly</Label>
        </Display>
      </ColumnDescriptor>
      <ColumnDescriptor NAME="msg_recv_act" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" HELP="NO_HELP">
        <Display>
          <Label NLSID="ha_rac_intrconn_traffic_msg_recv_act">messages received actual</Label>
        </Display>
      </ColumnDescriptor>

      <ColumnDescriptor NAME="gc_cr_recv_rate" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" COMPUTE_EXPR="((gc_cr_recv &lt; _gc_cr_recv) ? 0 : (gc_cr_recv - _gc_cr_recv))/__interval" >
        <Display>
          <Label NLSID="ha_rac_intrconn_traffic_gc_cr_recv_rate">gc cr blocks received (per sec)</Label>
        </Display>
      </ColumnDescriptor>

      <ColumnDescriptor NAME="gc_cur_recv_rate" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" COMPUTE_EXPR="((gc_cur_recv &lt; _gc_cur_recv) ? 0 : (gc_cur_recv - _gc_cur_recv))/__interval" >
        <Display>
          <Label NLSID="ha_rac_intrconn_traffic_gc_cur_recv_rate">gc current blocks received (per sec)</Label>
        </Display>
      </ColumnDescriptor>

      <ColumnDescriptor NAME="gc_cr_serv_rate" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" COMPUTE_EXPR="((gc_cr_serv &lt; _gc_cr_serv) ? 0 : (gc_cr_serv - _gc_cr_serv))/__interval" >
        <Display>
          <Label NLSID="ha_rac_intrconn_traffic_gc_cr_serv_rate">gc cr blocks served (per sec)</Label>
        </Display>
      </ColumnDescriptor>

      <ColumnDescriptor NAME="gc_cur_serv_rate" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" COMPUTE_EXPR="((gc_cur_serv &lt; _gc_cur_serv) ? 0 : (gc_cur_serv - _gc_cur_serv))/__interval" >
        <Display>
          <Label NLSID="ha_rac_intrconn_traffic_gc_cur_serv_rate">gc current blocks served (per sec)</Label>
        </Display>
      </ColumnDescriptor>

      <ColumnDescriptor NAME="msg_sent_dir_rate" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" COMPUTE_EXPR="((msg_sent_dir &lt; _msg_sent_dir) ? 0 : (msg_sent_dir - _msg_sent_dir))/__interval" >
        <Display>
          <Label NLSID="ha_rac_intrconn_traffic_msg_sent_dir_rate">messages sent directly (per sec)</Label>
        </Display>
      </ColumnDescriptor>

      <ColumnDescriptor NAME="msg_sent_indir_rate" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" COMPUTE_EXPR="((msg_sent_indir &lt; _msg_sent_indir) ? 0 : (msg_sent_indir - _msg_sent_indir))/__interval" >
        <Display>
          <Label NLSID="ha_rac_intrconn_traffic_msg_sent_indir_rate">messages sent indirectly (per sec)</Label>
        </Display>
      </ColumnDescriptor>

      <ColumnDescriptor NAME="msg_recv_act_rate" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="TRUE" COMPUTE_EXPR="((msg_recv_act &lt; _msg_recv_act) ? 0 : (msg_recv_act - _msg_recv_act))/__interval" >
        <Display>
          <Label NLSID="ha_rac_intrconn_traffic_msg_recv_act_rate">messages received actual (per sec)</Label>
        </Display>
      </ColumnDescriptor>
      
      <ColumnDescriptor NAME="interconnect_rate" TYPE="NUMBER" IS_KEY="FALSE"  COMPUTE_EXPR="( ((gc_cr_recv_rate + gc_cur_recv_rate + gc_cr_serv_rate + gc_cur_serv_rate) * db_block_size + (msg_sent_dir_rate + msg_sent_indir_rate + msg_recv_act_rate) * 200) / 1024 / 1024 )" >
        <Display>
          <Label NLSID="ha_rac_intrconn_traffic_interconnect_rate">Transfer Rate (MB/s)</Label>
        </Display>
      </ColumnDescriptor>
      
    </TableDescriptor>

		<QueryDescriptor FETCHLET_ID="SQL">
			<Property NAME="STATEMENT" SCOPE="GLOBAL"><![CDATA[
    select * from
    (select instance_name c1 from v$instance),
    (select value from v$parameter where name like 'db_block_size'),
    (select value from v$sysstat where name='gc cr blocks received'),
    (select value from v$sysstat where name='gc current blocks received'),
    (select value from v$sysstat where name='gc cr blocks served'),
    (select value from v$sysstat where name='gc current blocks served'),
    (select value from V$dlm_misc where name='messages sent directly'),
    (select value from V$dlm_misc where name='messages sent indirectly'),
    (select value from V$dlm_misc where name='messages received actual')
]]></Property>
			<Property NAME="MachineName" SCOPE="INSTANCE">MachineName</Property>
			<Property NAME="Port" SCOPE="INSTANCE">Port</Property>
			<Property NAME="SID" SCOPE="INSTANCE">SID</Property>
			<Property NAME="UserName" SCOPE="INSTANCE">UserName</Property>
			<Property NAME="password" SCOPE="INSTANCE">password</Property>
			<Property NAME="Role" SCOPE="INSTANCE" OPTIONAL="TRUE">Role</Property>
		</QueryDescriptor>
    
  </Metric>

  <Metric NAME="ha_rac_intrconn_type" TYPE="TABLE">
    <ValidIf>
         <CategoryProp NAME="VersionCategory" CHOICES="10gR2;10gR203;11gR1;11gR2"/>
         <CategoryProp NAME="MetricScope" CHOICES="RACINST"/>
    </ValidIf>

    <Display>
      <Label NLSID="ha_rac_intrconn_type">Interconnect</Label>
    </Display>
    
    <TableDescriptor>
      
      <ColumnDescriptor NAME="if_name" TYPE="STRING" IS_KEY="TRUE">
        <Display>
          <Label NLSID="ha_rac_intrconn_type_if_name">Interface Name</Label>
        </Display>
       </ColumnDescriptor>
       
       <ColumnDescriptor NAME="if_type" TYPE="STRING">
        <Display>
          <Label NLSID="ha_rac_intrconn_type_if_type">Interface Type</Label>
        </Display>
      </ColumnDescriptor>
     </TableDescriptor>

	<QueryDescriptor FETCHLET_ID="OSLineToken">
		<Property NAME="perlBin" SCOPE="SYSTEMGLOBAL">perlBin</Property>
		<Property NAME="scriptsDir" SCOPE="SYSTEMGLOBAL">scriptsDir</Property>
		<Property NAME="command" SCOPE="GLOBAL">
         %perlBin%/perl %scriptsDir%/rac/dbIntrconnType.pl
     </Property>
		<Property NAME="startsWith" SCOPE="GLOBAL">em_result=</Property>
		<Property NAME="delimiter" SCOPE="GLOBAL">|</Property>
		<Property NAME="ENVEM_TARGET_NAME" SCOPE="INSTANCE">NAME</Property>
		<Property NAME="STDINEM_TARGET_USERNAME" SCOPE="INSTANCE">UserName</Property>
		<Property NAME="STDINEM_TARGET_PASSWORD" SCOPE="INSTANCE">password</Property>
		<Property NAME="ENVEM_TARGET_ROLE" SCOPE="INSTANCE" OPTIONAL="TRUE">Role</Property>
		<Property NAME="MachineName" SCOPE="INSTANCE">MachineName</Property>
		<Property NAME="Port" SCOPE="INSTANCE">Port</Property>
		<Property NAME="SID" SCOPE="INSTANCE">SID</Property>
		<Property NAME="ENVEM_TARGET_ADDRESS" SCOPE="GLOBAL">(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=%MachineName%)(Port=%Port%))(CONNECT_DATA=(SID=%SID%)))
        </Property>
	</QueryDescriptor>
  </Metric>
  
  <!-- End RAC Interconnect Metrics -->  
    	
	

    	
	
	  	<Metric NAME="latest_hdm_findings" TYPE="RAW">
		<ValidIf>
			<CategoryProp NAME="VersionCategory" CHOICES="10gR1;10gR2;10gR203"/>
		</ValidIf>
		<Display>
			<Label NLSID="hdm_findings_1">Latest HDM Findings</Label>
		</Display>
		<TableDescriptor TABLE_NAME="mgmt_db_latest_hdm_findings" SKIP_COLLTIME_PK="TRUE" SKIP_METRIC_COLUMN="TRUE">
			<ColumnDescriptor NAME="task_id" TYPE="NUMBER" COLUMN_NAME="task_id" IS_KEY="TRUE">
				<Display>
					<Label NLSID="latest_hdm_findings_task_id">Task ID</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="finding_id" TYPE="NUMBER" COLUMN_NAME="finding_id" IS_KEY="TRUE">
				<Display>
					<Label NLSID="latest_hdm_findings_finding_id">Finding ID</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="rec_type" TYPE="STRING" COLUMN_NAME="rec_type" IS_KEY="TRUE">
				<Display>
					<Label NLSID="latest_hdm_findings_rec_type">Rec Type</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="rec_count" TYPE="NUMBER" COLUMN_NAME="rec_count" IS_KEY="FALSE">
				<Display>
					<Label NLSID="latest_hdm_findings_rec_count">Rec Count</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="impact_pct" TYPE="NUMBER" COLUMN_NAME="impact_pct" IS_KEY="FALSE">
				<Display>
					<Label NLSID="latest_hdm_findings_impact_pct">Impact (%)</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="message" TYPE="STRING" COLUMN_NAME="message" IS_KEY="FALSE">
				<Display>
					<Label NLSID="latest_hdm_findings_message">Finding Message</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="start_time" TYPE="STRING" IS_DATE="TRUE" COLUMN_NAME="start_time" IS_KEY="FALSE">
				<Display>
					<Label NLSID="latest_hdm_findings_start_time">Start Time</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="end_time" TYPE="STRING" IS_DATE="TRUE" COLUMN_NAME="end_time" IS_KEY="FALSE">
				<Display>
					<Label NLSID="latest_hdm_findings_end_time">End Time</Label>
				</Display>
			</ColumnDescriptor>
		</TableDescriptor>
		<QueryDescriptor FETCHLET_ID="SQL">
			<Property NAME="STATEMENT" SCOPE="GLOBAL"><![CDATA[
DECLARE
        instance_number NUMBER;
	latest_task_id NUMBER;
	db_elapsed_time NUMBER;
	start_time VARCHAR2(1024);
	end_time VARCHAR2(1024);
	db_id NUMBER;
        TYPE        data_cursor_type IS REF CURSOR;
        data_cursor data_cursor_type;


        CURSOR get_latest_task_id  IS
        SELECT TASK_LIST.TASK_ID
   FROM (SELECT /*+ NO_MERGE(T) ORDERED */ T.TASK_ID
        FROM   (select * from dba_advisor_tasks order by task_id desc) T,
             dba_advisor_parameters_proj P1,
             dba_advisor_parameters_proj P2
        WHERE T.ADVISOR_NAME='ADDM'
          AND T.STATUS = 'COMPLETED'
          AND T.EXECUTION_START >= (sysdate - 1)
          AND T.HOW_CREATED = 'AUTO'
          AND T.TASK_ID = P1.TASK_ID
          AND P1.PARAMETER_NAME = 'INSTANCE'
          AND P1.PARAMETER_VALUE = SYS_CONTEXT('USERENV','INSTANCE')
          AND T.TASK_ID = P2.TASK_ID
          AND P2.PARAMETER_NAME = 'DB_ID'
          AND P2.PARAMETER_VALUE = to_char(db_id)
        ORDER BY T.TASK_ID DESC) TASK_LIST
WHERE ROWNUM = 1;
BEGIN

	SELECT dbid INTO db_id from v$database;

	OPEN get_latest_task_id;
	FETCH get_latest_task_id INTO latest_task_id;
	CLOSE get_latest_task_id;

	FOR param_info IN
        (SELECT parameter_value, parameter_name
         FROM dba_advisor_parameters_proj WHERE task_id= latest_task_id AND (parameter_name='START_TIME'
         OR parameter_name='END_TIME' OR parameter_name='DB_ELAPSED_TIME') ORDER BY 2)

	 LOOP
		IF param_info.parameter_name = 'DB_ELAPSED_TIME' THEN
		    db_elapsed_time:= param_info.parameter_value;
		ELSIF param_info.parameter_name = 'END_TIME' THEN
		   end_time := param_info.parameter_value;
		ELSIF param_info.parameter_name = 'START_TIME' THEN
		   start_time := param_info.parameter_value;


		END IF;
	END LOOP;

	  -- open the cursor to return
  OPEN data_cursor FOR
	 SELECT latest_task_id task_id, f.finding_id finding_id,DECODE(recInfo.type,NULL, 'Uncategorized',recInfo.type) rec_type, recInfo.recCount rec_count,
          f.impact*100/db_elapsed_time impact_pct, f.message message,
          TO_DATE(start_time ,'MM-DD-YYYY HH24:MI:SS') start_time,
          TO_DATE(end_time,'MM-DD-YYYY HH24:MI:SS') end_time
     FROM dba_advisor_findings f,
     (SELECT finding_id, count(r.rec_id) recCount,r.type
     FROM dba_advisor_recommendations r WHERE task_id=latest_task_id GROUP BY r.finding_id, r.type) recInfo
     WHERE f.task_id=latest_task_id AND f.type<>'INFORMATION' AND f.type<>'WARNING' AND f.parent=0 AND  f.finding_id=recInfo.finding_id (+)
     AND :1 != 'BASIC'
     ORDER BY f.finding_id;

  :2 := data_cursor;
END;
]]></Property>
			<Property NAME="SQLINPARAM1" SCOPE="INSTANCE">StatisticsLevel</Property>
			<Property NAME="SQLOUTPARAMPOS" SCOPE="GLOBAL">2</Property>
			<Property NAME="SQLOUTPARAMTYPE" SCOPE="GLOBAL">SQL_CURSOR</Property>
			<Property NAME="MachineName" SCOPE="INSTANCE">MachineName</Property>
			<Property NAME="Port" SCOPE="INSTANCE">Port</Property>
			<Property NAME="SID" SCOPE="INSTANCE">SID</Property>
			<Property NAME="UserName" SCOPE="INSTANCE">UserName</Property>
			<Property NAME="password" SCOPE="INSTANCE">password</Property>
			<Property NAME="Role" SCOPE="INSTANCE" OPTIONAL="TRUE">Role</Property>
		</QueryDescriptor>
	</Metric>



		
	  	<Metric NAME="latest_hdm_findings" TYPE="RAW">
		<ValidIf>
			<CategoryProp NAME="VersionCategory" CHOICES="11gR1;11gR2"/>
		</ValidIf>
		<Display>
			<Label NLSID="hdm_findings_1">Latest HDM Findings</Label>
		</Display>
		<TableDescriptor TABLE_NAME="mgmt_db_latest_hdm_findings" SKIP_COLLTIME_PK="TRUE" SKIP_METRIC_COLUMN="TRUE">
			<ColumnDescriptor NAME="task_id" TYPE="NUMBER" COLUMN_NAME="task_id" IS_KEY="TRUE">
				<Display>
					<Label NLSID="latest_hdm_findings_task_id">Task ID</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="finding_id" TYPE="NUMBER" COLUMN_NAME="finding_id" IS_KEY="TRUE">
				<Display>
					<Label NLSID="latest_hdm_findings_finding_id">Finding ID</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="rec_type" TYPE="STRING" COLUMN_NAME="rec_type" IS_KEY="TRUE">
				<Display>
					<Label NLSID="latest_hdm_findings_rec_type">Rec Type</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="rec_count" TYPE="NUMBER" COLUMN_NAME="rec_count" IS_KEY="FALSE">
				<Display>
					<Label NLSID="latest_hdm_findings_rec_count">Rec Count</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="impact_pct" TYPE="NUMBER" COLUMN_NAME="impact_pct" IS_KEY="FALSE">
				<Display>
					<Label NLSID="latest_hdm_findings_impact_pct">Impact (%)</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="message" TYPE="STRING" COLUMN_NAME="message" IS_KEY="FALSE">
				<Display>
					<Label NLSID="latest_hdm_findings_message">Finding Message</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="start_time" TYPE="STRING" IS_DATE="TRUE" COLUMN_NAME="start_time" IS_KEY="FALSE">
				<Display>
					<Label NLSID="latest_hdm_findings_start_time">Start Time</Label>
				</Display>
			</ColumnDescriptor>
			<ColumnDescriptor NAME="end_time" TYPE="STRING" IS_DATE="TRUE" COLUMN_NAME="end_time" IS_KEY="FALSE">
				<Display>
					<Label NLSID="latest_hdm_findings_end_time">End Time</Label>
				</Display>
			</ColumnDescriptor>

	                	<ColumnDescriptor NAME="finding_count" TYPE="NUMBER" COLUMN_NAME="finding_count" IS_KEY="FALSE">
				<Display>
					<Label NLSID="latest_hdm_findings_finding_count">Finding Count</Label>
				</Display>
			</ColumnDescriptor>
                                 	<ColumnDescriptor NAME="finding_name" TYPE="STRING" COLUMN_NAME="finding_name" IS_KEY="FALSE">
				<Display>
					<Label NLSID="latest_hdm_findings_finding_name">Finding Name</Label>
				</Display>
			</ColumnDescriptor>
                        	<ColumnDescriptor NAME="active_sessions" TYPE="NUMBER" COLUMN_NAME="active_sessions" IS_KEY="FALSE">
				<Display>
					<Label NLSID="latest_hdm_findings_finding_active_sessions">Finding Count</Label>
				</Display>
			</ColumnDescriptor>


		</TableDescriptor>
		<QueryDescriptor FETCHLET_ID="SQL">
			<Property NAME="STATEMENT" SCOPE="GLOBAL"><![CDATA[
DECLARE
        instance_number NUMBER;
	latest_task_id NUMBER;
	start_time VARCHAR2(1024);
	end_time VARCHAR2(1024);
	db_id NUMBER;
        TYPE        data_cursor_type IS REF CURSOR;
        data_cursor data_cursor_type;


        CURSOR get_latest_task_id  IS
        SELECT TASK_LIST.TASK_ID
   FROM (SELECT /*+ NO_MERGE(T) ORDERED */ T.TASK_ID
        FROM   (select * from dba_advisor_tasks order by task_id desc) T,
             dba_advisor_parameters_proj P1,
             dba_advisor_parameters_proj P2
        WHERE T.ADVISOR_NAME='ADDM'
          AND T.STATUS = 'COMPLETED'
          AND T.EXECUTION_START >= (sysdate - 1)
          AND T.HOW_CREATED = 'AUTO'
          AND T.TASK_ID = P1.TASK_ID
          AND P1.PARAMETER_NAME = 'INSTANCE'
          AND P1.PARAMETER_VALUE = SYS_CONTEXT('USERENV','INSTANCE')
          AND T.TASK_ID = P2.TASK_ID
          AND P2.PARAMETER_NAME = 'DB_ID'
          AND P2.PARAMETER_VALUE = to_char(db_id)
        ORDER BY T.TASK_ID DESC) TASK_LIST
WHERE ROWNUM = 1;
BEGIN

	SELECT dbid INTO db_id from v$database;

	OPEN get_latest_task_id;
	FETCH get_latest_task_id INTO latest_task_id;
	CLOSE get_latest_task_id;

        FOR param_info IN
        (SELECT parameter_value, parameter_name
         FROM dba_advisor_parameters_proj WHERE task_id= latest_task_id AND (parameter_name='START_TIME'
         OR parameter_name='END_TIME') ORDER BY 2)

	 LOOP
		IF param_info.parameter_name = 'END_TIME' THEN
		   end_time := param_info.parameter_value;
		ELSIF param_info.parameter_name = 'START_TIME' THEN
		   start_time := param_info.parameter_value;


		END IF;
	END LOOP;

	  -- open the cursor to return
  OPEN data_cursor FOR
	 SELECT latest_task_id task_id, f.finding_id finding_id,DECODE(recInfo.type,NULL, 'Uncategorized',recInfo.type) rec_type, recInfo.recCount rec_count,
          f.perc_active_sess impact_pct, f.message message,
          TO_DATE(start_time ,'MM-DD-YYYY HH24:MI:SS') start_time,
          TO_DATE(end_time,'MM-DD-YYYY HH24:MI:SS') end_time,
	  history.finding_count  finding_count,
	  f.finding_name finding_name,
	  f.active_sessions active_sessions 
     FROM dba_addm_findings f,
     (SELECT finding_id, count(r.rec_id) recCount,r.type
     FROM dba_advisor_recommendations r WHERE task_id=latest_task_id GROUP BY r.finding_id, r.type) recInfo,
 (select count(f_all.task_id) finding_count, f_curr.finding_name FROM 
	(select finding_name from dba_advisor_findings where task_id=latest_task_id) f_curr,
   (select t.task_id,i.local_task_id,t.end_time, t.begin_time  from dba_addm_tasks t,dba_addm_instances i 
	where t.end_time>sysdate -1 AND
	t.task_id=i.task_id AND i.instance_number=sys_context('USERENV','INSTANCE')
        AND t.requested_analysis='INSTANCE'
 )  tasks,
 dba_advisor_findings f_all
 WHERE  f_all.task_id=tasks.task_id 
 AND f_all.finding_name=f_curr.finding_name 
  AND f_all.type<>'INFORMATION' AND f_all.type<>'WARNING'  AND f_all.parent=0 
GROUP BY f_curr.finding_name) history 
     WHERE f.task_id=latest_task_id AND f.type<>'INFORMATION' AND f.type<>'WARNING' AND f.filtered<>'Y' AND f.parent=0 AND  f.finding_id=recInfo.finding_id (+)
     AND f.finding_name=history.finding_name 
     ORDER BY f.finding_id;
  :2 := data_cursor;
END;
]]></Property>
			<Property NAME="SQLINPARAM1" SCOPE="INSTANCE">StatisticsLevel</Property>
			<Property NAME="SQLOUTPARAMPOS" SCOPE="GLOBAL">2</Property>
			<Property NAME="SQLOUTPARAMTYPE" SCOPE="GLOBAL">SQL_CURSOR</Property>
			<Property NAME="MachineName" SCOPE="INSTANCE">MachineName</Property>
			<Property NAME="Port" SCOPE="INSTANCE">Port</Property>
			<Property NAME="SID" SCOPE="INSTANCE">SID</Property>
			<Property NAME="UserName" SCOPE="INSTANCE">UserName</Property>
			<Property NAME="password" SCOPE="INSTANCE">password</Property>
			<Property NAME="Role" SCOPE="INSTANCE" OPTIONAL="TRUE">Role</Property>
		</QueryDescriptor>
	</Metric>












	<Metric NAME="latest_hdm_metric_helper" TYPE="RAW">
		<ValidIf>
			<CategoryProp NAME="VersionCategory" CHOICES="10gR1;10gR2;10gR203"/>
		</ValidIf>
		<Display>
			<Label NLSID="latest_hdm_metric_helper">latest_hdm_metric_helper</Label>
		</Display>
		<TableDescriptor TABLE_NAME="mgmt_db_hdm_metric_helper" SKIP_COLLTIME_PK="TRUE" SKIP_METRIC_COLUMN="TRUE">
			<ColumnDescriptor NAME="task_available" TYPE="NUMBER" COLUMN_NAME="task_available" IS_KEY="FALSE">
				<Display>
					<Label NLSID="mgmt_db_hdm_metric_helper_task_available">Task Available</Label>
				</Display>
			</ColumnDescriptor>
		</TableDescriptor>
		<QueryDescriptor FETCHLET_ID="SQL">
			<Property NAME="STATEMENT" SCOPE="GLOBAL"><![CDATA[
DECLARE
        instance_number NUMBER;
        task_id NUMBER;
	db_id NUMBER;
        TYPE        data_cursor_type IS REF CURSOR;
        data_cursor data_cursor_type;

        CURSOR get_task_id IS
SELECT t.task_id
FROM   dba_advisor_tasks t,
       dba_advisor_parameters_proj p,
       dba_advisor_parameters_proj p1
WHERE  t.advisor_name='ADDM'
  AND  t.task_id = p.task_id
  AND  p.parameter_name = 'INSTANCE'
  AND  p.parameter_value = sys_context('USERENV','INSTANCE')
  AND  t.task_id = p1.task_id
  AND  p1.parameter_name = 'DB_ID'
  AND  p1.parameter_value = to_char(db_id)
  AND  rownum = 1;
BEGIN
	SELECT dbid INTO db_id from v$database;

        task_id:=-1;
	OPEN get_task_id;
	FETCH get_task_id INTO task_id;
	CLOSE get_task_id;

	  -- open the cursor to return
  OPEN data_cursor FOR
	 SELECT task_id task_available from dual;
  :1 := data_cursor;
END;
]]></Property>
			<Property NAME="SQLOUTPARAMPOS" SCOPE="GLOBAL">1</Property>
			<Property NAME="SQLOUTPARAMTYPE" SCOPE="GLOBAL">SQL_CURSOR</Property>
			<Property NAME="MachineName" SCOPE="INSTANCE">MachineName</Property>
			<Property NAME="Port" SCOPE="INSTANCE">Port</Property>
			<Property NAME="SID" SCOPE="INSTANCE">SID</Property>
			<Property NAME="UserName" SCOPE="INSTANCE">UserName</Property>
			<Property NAME="password" SCOPE="INSTANCE">password</Property>
			<Property NAME="Role" SCOPE="INSTANCE" OPTIONAL="TRUE">Role</Property>
		</QueryDescriptor>
	</Metric>

  	<Metric NAME="latest_hdm_metric_helper" TYPE="RAW">
		<ValidIf>
			<CategoryProp NAME="VersionCategory" CHOICES="11gR1;11gR2"/>
		</ValidIf>
		<Display>
			<Label NLSID="latest_hdm_metric_helper">latest_hdm_metric_helper</Label>
		</Display>
		<TableDescriptor TABLE_NAME="mgmt_db_hdm_metric_helper" SKIP_COLLTIME_PK="TRUE" SKIP_METRIC_COLUMN="TRUE">
			<ColumnDescriptor NAME="task_available" TYPE="NUMBER" COLUMN_NAME="task_available" IS_KEY="FALSE">
				<Display>
					<Label NLSID="mgmt_db_hdm_metric_helper_task_available">Task Available</Label>
				</Display>
			</ColumnDescriptor>
		                <ColumnDescriptor NAME="task_count" TYPE="NUMBER" COLUMN_NAME="task_count" IS_KEY="FALSE">
				<Display>
					<Label NLSID="latest_hdm_findings_task_count">Task Count</Label>
				</Display>
			</ColumnDescriptor>
		</TableDescriptor>
		<QueryDescriptor FETCHLET_ID="SQL">
			<Property NAME="STATEMENT" SCOPE="GLOBAL"><![CDATA[
DECLARE
        instance_number NUMBER;
        task_id NUMBER;
	db_id NUMBER;
        TYPE        data_cursor_type IS REF CURSOR;
        data_cursor data_cursor_type;

        CURSOR get_task_id IS
SELECT t.task_id
FROM   dba_advisor_tasks t,
       dba_advisor_parameters_proj p,
       dba_advisor_parameters_proj p1
WHERE  t.advisor_name='ADDM'
  AND  t.task_id = p.task_id
  AND  p.parameter_name = 'INSTANCE'
  AND  p.parameter_value = sys_context('USERENV','INSTANCE')
  AND  t.task_id = p1.task_id
  AND  p1.parameter_name = 'DB_ID'
  AND  p1.parameter_value = to_char(db_id)
  AND  rownum = 1
  ORDER BY 1 DESC;
BEGIN
	SELECT dbid INTO db_id from v$database;

        task_id:=-1;
	OPEN get_task_id;
	FETCH get_task_id INTO task_id;
	CLOSE get_task_id;

	  -- open the cursor to return
OPEN data_cursor FOR
	SELECT task_id task_available, latest_tasks.task_count from dual,
	(select count(*) task_count from dba_addm_tasks t,
dba_addm_instances i WHERE t.task_id=i.task_id AND
	t.end_time>sysdate -1 AND
	i.instance_number=sys_context('USERENV','INSTANCE' )
        AND requested_analysis='INSTANCE')  latest_tasks;
  :1 := data_cursor;
END;
]]></Property>
			<Property NAME="SQLOUTPARAMPOS" SCOPE="GLOBAL">1</Property>
			<Property NAME="SQLOUTPARAMTYPE" SCOPE="GLOBAL">SQL_CURSOR</Property>
			<Property NAME="MachineName" SCOPE="INSTANCE">MachineName</Property>
			<Property NAME="Port" SCOPE="INSTANCE">Port</Property>
			<Property NAME="SID" SCOPE="INSTANCE">SID</Property>
			<Property NAME="UserName" SCOPE="INSTANCE">UserName</Property>
			<Property NAME="password" SCOPE="INSTANCE">password</Property>
			<Property NAME="Role" SCOPE="INSTANCE" OPTIONAL="TRUE">Role</Property>
		</QueryDescriptor>
	</Metric>


  <!--
  ======================================================================
  == Category:         Text Index Log Content
  == Collection Level: {Not Collected}
  == Purpose:          On-Demand
  ======================================================================
    -->
        <Metric NAME="textIndexLogContent" TYPE="TABLE" HELP="NO_HELP" USAGE_TYPE="COLLECT_UPLOAD">
                <Display>
                        <Label NLSID="textIndexLogContent">Text Index Log Content</Label>
                </Display>
                <TableDescriptor>
                        <ColumnDescriptor NAME="textIndexLogContent" TYPE="STRING" IS_KEY="FALSE">
                                <Display>
                                        <Label NLSID="textIndexLog_content">Content</Label>
                                </Display>
                        </ColumnDescriptor>
                </TableDescriptor>
                <QueryDescriptor FETCHLET_ID="OS">
                        <Property NAME="perlBin" SCOPE="SYSTEMGLOBAL">perlBin</Property>
                        <Property NAME="scriptsDir" SCOPE="SYSTEMGLOBAL">scriptsDir</Property>
                        <Property NAME="startsWith" SCOPE="GLOBAL">em_result=</Property>
                        <Property NAME="ConvertFromCharset" SCOPE="INSTANCE">ConvertFromCharset</Property>
                        <Property NAME="needCharsetConvert" SCOPE="INSTANCE">needCharsetConvert</Property>
                        <Property NAME="logFileToView" SCOPE="USER">logFileToView</Property>
                        <Property NAME="sizeToView" SCOPE="USER">sizeToView</Property>
                        <Property NAME="startTime" SCOPE="USER" OPTIONAL="TRUE">startTime</Property>
                        <Property NAME="endTime" SCOPE="USER" OPTIONAL="TRUE">endTime</Property>
                        <Property NAME="command" SCOPE="GLOBAL">
         %perlBin%/perl %scriptsDir%/txt/textIndexLogViewer.pl %logFileToView%  %sizeToView% %startTime% %endTime%
      </Property>
                </QueryDescriptor>
        </Metric>
  <!--
  ======================================================================
  == Category:         Text Index Remove Log 
  == Collection Level: {Not Collected}
  == Purpose:          On-Demand
  ======================================================================
    -->
        <Metric NAME="textIndexLogRemover" TYPE="TABLE" HELP="NO_HELP" USAGE_TYPE="COLLECT_UPLOAD">
                <Display>
                        <Label NLSID="textIndexLogRemover">Text Index Log Remover</Label>
                </Display>
                <TableDescriptor>
                        <ColumnDescriptor NAME="textIndexLogRemover" TYPE="STRING" IS_KEY="FALSE">
                                <Display>
                                        <Label NLSID="textIndexLog_content">Content</Label>
                                </Display>
                        </ColumnDescriptor>
                </TableDescriptor>
                <QueryDescriptor FETCHLET_ID="OS">
                        <Property NAME="perlBin" SCOPE="SYSTEMGLOBAL">perlBin</Property>
                        <Property NAME="scriptsDir" SCOPE="SYSTEMGLOBAL">scriptsDir</Property>
                        <Property NAME="startsWith" SCOPE="GLOBAL">em_result=</Property>
                        <Property NAME="ConvertFromCharset" SCOPE="INSTANCE">ConvertFromCharset</Property>
                        <Property NAME="needCharsetConvert" SCOPE="INSTANCE">needCharsetConvert</Property>
                        <Property NAME="logFileToRemove" SCOPE="USER">logFileToRemove</Property>
                        <Property NAME="command" SCOPE="GLOBAL">
         %perlBin%/perl %scriptsDir%/txt/textIndexLogRemover.pl %logFileToRemove% 
      </Property>
                </QueryDescriptor>
        </Metric>
        
        <!--
        ======================================================================
        == Category:         Password expiry send mail
        == Collection Level: Collection Level: Every 24 hours
        == Purpose:          To send mail,with a list of users whose password's are abt to expire.
        ======================================================================
        -->
        
        
       <Metric NAME="pwd_expiry" TYPE="TABLE" USAGE_TYPE="COLLECT_UPLOAD"  IS_METRIC_LONG_RUNNING="FALSE">
       <TableDescriptor>
	       <ColumnDescriptor NAME="USER_IDS" TYPE="STRING" IS_KEY="FALSE" TRANSIENT="FALSE" IS_LONG_TEXT="TRUE" IS_DATE="FALSE" IS_TIMESTAMP="FALSE" HELP="NO_HELP"/>
       </TableDescriptor>
               <QueryDescriptor FETCHLET_ID="OS">
                       <Property NAME="perlBin" SCOPE="SYSTEMGLOBAL">perlBin</Property>
                       <Property NAME="scriptsDir" SCOPE="SYSTEMGLOBAL">scriptsDir</Property>
                        <Property NAME="emd_email_address" SCOPE="SYSTEMGLOBAL">emd_email_address</Property>
                        <Property NAME="emd_from_email_address" SCOPE="SYSTEMGLOBAL">emd_from_email_address</Property>
                       <Property NAME="emd_email_gateway" SCOPE="SYSTEMGLOBAL">emd_email_gateway</Property>
                       <Property NAME="REPOSITORY_URL" SCOPE="SYSTEMGLOBAL">REPOSITORY_URL</Property>
                       <Property NAME="agentVersion" SCOPE="SYSTEMGLOBAL">agentVersion</Property>
                       <Property NAME="ENVEM_TARGET_NAME" SCOPE="INSTANCE">NAME</Property>
                       <Property NAME="ENVEM_TARGET_TYPE" SCOPE="INSTANCE">TYPE</Property>
                       <Property NAME="STDINEM_TARGET_USERNAME" SCOPE="INSTANCE">UserName</Property>
                       <Property NAME="STDINEM_TARGET_PASSWORD" SCOPE="INSTANCE">password</Property>
                       <Property NAME="ENVEM_TARGET_ROLE" SCOPE="INSTANCE" OPTIONAL="TRUE">Role</Property>
                       <Property NAME="MachineName" SCOPE="INSTANCE">MachineName</Property>
                       <Property NAME="Port" SCOPE="INSTANCE">Port</Property>
                       <Property NAME="SID" SCOPE="INSTANCE">SID</Property>
                       <Property NAME="ENVEM_TARGET_ADDRESS" SCOPE="GLOBAL">(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=%MachineName%)(Port=%Port%))(CONNECT_DATA=(SID=%SID%)))</Property>
                       <Property NAME="command" SCOPE="GLOBAL">%perlBin%/perl %scriptsDir%/pwdexpiry.pl %REPOSITORY_URL% %emd_email_address% %emd_from_email_address% %emd_email_gateway% %agentVersion% </Property>
               </QueryDescriptor>

       </Metric>         

        <!--
        ======================================================================
        == Category:         Incident Meter
        == Collection Level: Minimum
        == Purpose:          To upload the incident meter to the repository
        ======================================================================
        -->

        <Metric NAME="incident_meter" TYPE="TABLE" USAGE_TYPE="COLLECT_UPLOAD"  IS_METRIC_LONG_RUNNING="FALSE">

        <ValidIf>
        <CategoryProp NAME="VersionCategory" CHOICES="11gR1;11gR2" />
        </ValidIf>
        <TableDescriptor>
        <ColumnDescriptor NAME="SEVERITY_INDEX" TYPE="STRING" IS_KEY="FALSE" TRANSIENT="FALSE" IS_LONG_TEXT="FALSE" IS_DATE="FALSE" IS_TIMESTAMP="FALSE" HELP="NO_HELP"/>
        <ColumnDescriptor NAME="CRITICAL_INCIDENTS" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="FALSE" IS_LONG_TEXT="FALSE" IS_DATE="FALSE" IS_TIMESTAMP="FALSE" HELP="NO_HELP"/>
        <ColumnDescriptor NAME="WARNING_INCIDENTS" TYPE="NUMBER" IS_KEY="FALSE" TRANSIENT="FALSE" IS_LONG_TEXT="FALSE" IS_DATE="FALSE" IS_TIMESTAMP="FALSE" HELP="NO_HELP"/>

        </TableDescriptor>

        <QueryDescriptor FETCHLET_ID="SQL">
        <Property NAME="STATEMENT" SCOPE="GLOBAL" OPTIONAL="FALSE">
        <![CDATA[
        SELECT SEVERITY_INDEX, CRITICAL_INICDENTS, WARNING_INCIDENTS from v$incmeter_summary
        ]]>
        </Property>
        <Property NAME="MachineName" SCOPE="INSTANCE" OPTIONAL="FALSE">MachineName</Property>
        <Property NAME="Port" SCOPE="INSTANCE" OPTIONAL="FALSE">Port</Property>
        <Property NAME="SID" SCOPE="INSTANCE" OPTIONAL="FALSE">SID</Property>
        <Property NAME="UserName" SCOPE="INSTANCE" OPTIONAL="FALSE">UserName</Property>
        <Property NAME="password" SCOPE="INSTANCE" OPTIONAL="FALSE">password</Property>
        <Property NAME="Role" SCOPE="INSTANCE" OPTIONAL="TRUE">Role</Property>
        </QueryDescriptor>


        </Metric>



<!-- **********  STREAMS SERVER GENERATED ALERTS BEGIN **********  -->
<!--
  ======================================================================
  == Category:         Streams Server-generated alert 
  == Collection Level: Recommended
  == Purpose:          Alert for Streams pool usage
  ======================================================================
    -->
  <Metric NAME="streams_pool" TYPE="TABLE">
    <ValidIf>
       <CategoryProp NAME="VersionCategory" CHOICES="11gR1;11gR2"/>
    </ValidIf>

    <Display>
      <Label NLSID="streams_pool">Streams Pool Usage</Label>
    </Display>
    
    <TableDescriptor>
      <ColumnDescriptor NAME="streams_pool_full" TYPE="STRING">
        <Display FOR_SUMMARY_UI="TRUE">
          <Label NLSID="streams_pool_full">Streams Pool Full</Label>
        </Display>
      </ColumnDescriptor>
    </TableDescriptor>
    
    <PushDescriptor RECVLET_ID="AQMetrics">
       <Property NAME="QueueName" SCOPE="GLOBAL">ALERT_QUE</Property>
       <Property NAME="MachineName" SCOPE="INSTANCE">MachineName</Property>
       <Property NAME="Port" SCOPE="INSTANCE">Port</Property>
       <Property NAME="SID" SCOPE="INSTANCE">SID</Property>
       <Property NAME="UserName" SCOPE="INSTANCE">UserName</Property>
       <Property NAME="password" SCOPE="INSTANCE">password</Property>
       <Property NAME="Role" SCOPE="INSTANCE" OPTIONAL="TRUE">Role</Property>
       <Property NAME="InstanceName" SCOPE="INSTANCE">InstanceName</Property>
       <Property NAME="KeyField" SCOPE="GLOBAL">OBJECT_NAME</Property>
       <Property NAME="KeyColumn" SCOPE="GLOBAL">streams_pool_full</Property>
     </PushDescriptor>
  </Metric>


<!-- **********  STREAMS SERVER GENERATED ALERTS END **********  -->

