Rem drv: Rem Rem $Header: emdb/source/oracle/sysman/emdrep/sql/db/latest/reports/overview/overview_pkgbodys.sql /st_emdbsa_11.2/3 2008/12/12 12:05:22 mvajapey Exp $ Rem Rem overview_pkgbodys.sql Rem Rem Copyright (c) 2004, 2008, Oracle and/or its affiliates. Rem All rights reserved. Rem Rem NAME Rem overview_pkgbodys.sql - Rem Rem DESCRIPTION Rem Rem Rem NOTES Rem Rem Rem MODIFIED (MM/DD/YY) Rem mvajapey 12/03/08 - bug 7612821: replace dbms_assert with EM_CHECK Rem mvajapey 11/25/08 - bug 7341591 Rem nachen 05/29/08 - XbranchMerge nachen_bug-7010907 from Rem st_emdbsa_11.1 Rem nachen 05/15/08 - XbranchMerge nachen_bug-6315707 from main Rem nachen 03/04/08 - fix bug 5968994 Rem rtakeish 01/21/08 - bug6731462, ORA-06502 occurs in Rem get_database_and_instance_info() Rem nachen 12/19/05 - fix instance name and version bug 4891592 Rem nachen 12/19/05 - this pkg is for grid control only Rem nachen 09/06/05 - fix bug 4592888 -- layout problem Rem nachen 08/31/05 - bug 4585653 Rem nachen 07/29/05 - fix bug 4524571 Rem chyu 06/28/05 - New repmgr header impl Rem lgloyd 05/10/05 - fix param type Rem nachen 04/11/05 - add instruction text Rem nachen 04/01/05 - meet checklist Rem rreilly 02/24/05 - make total size sum of tbsp sizes Rem nachen 01/25/05 - use views not tables Rem nachen 12/13/04 - fix error Rem nachen 11/24/04 - Rem nachen 10/27/04 - nls Unavailable string Rem nachen 10/18/04 - remove comment out Rem nachen 10/14/04 - nachen_db_overview_report_1 Rem nachen 10/13/04 - Created Rem Rem SET ECHO ON Rem SET FEEDBACK 1 Rem SET NUMWIDTH 10 Rem SET LINESIZE 80 Rem SET TRIMSPOOL ON Rem SET TAB OFF Rem SET PAGESIZE 100 create or replace package body mgmt_database_overview as procedure add_instruction_text(l_report_guid IN RAW, l_element_row IN NUMBER) is l_param_values MGMT_IP_PARAM_VALUE_LIST; l_element_guid RAW(16); BEGIN l_param_values := MGMT_IP_PARAM_VALUE_LIST(); l_param_values.extend(3); l_param_values(1) := MGMT_IP_PARAM_VALUE_RECORD( 'oracle.sysman.eml.ip.render.elem.TextParamBean.textResourceBundleName', 'oracle.sysman.db.rsc.inst.DBMsg'); l_param_values(2) := MGMT_IP_PARAM_VALUE_RECORD( 'oracle.sysman.eml.ip.render.elem.TextParamBean.textMessage', 'DB_REPORT_INSTRUCTION'); l_param_values(3) := MGMT_IP_PARAM_VALUE_RECORD( 'oracle.sysman.eml.ip.render.elem.TextParamBean.textStyle', 'OraInstructionText'); l_element_guid := mgmt_ip.add_element_to_report_def ( p_report_guid => l_report_guid, p_element_name_nlsid => 'IPMSG_STYLED_TEXT', p_element_type_nlsid => 'IPMSG_ANY_TARGET_TYPE', p_header_nlsid => '', p_element_order => l_element_row, p_element_row => l_element_row, p_parameters => l_param_values, p_targets => NULL); end add_instruction_text; function escape_and_enquote_literal(input IN varchar2) return varchar2 is singleQuote constant varchar2(1) := ''''; doubleQuote constant varchar2(2) := ''''''; inputEscaped constant varchar2(4000) := replace(input, singleQuote, doubleQuote); inputSafe constant varchar2(4000) := em_check.enquote_literal(inputEscaped); BEGIN if input is NULL then return 'NULL'; else return inputSafe; end if; EXCEPTION WHEN OTHERS THEN return 'NULL'; END escape_and_enquote_literal; function escape_and_enquote_number(input IN number) return varchar2 is singleQuote constant varchar2(1) := ''''; doubleQuote constant varchar2(2) := ''''''; defaultNlsFormat constant varchar2(20) := '999999D999'; defaultNlsChars constant varchar2(50) := 'NLS_Numeric_Characters = ''.,'''; defaultNlsFormatLiteral constant varchar2(40) := em_check.enquote_literal(defaultNlsFormat); defaultNlsCharsLiteral constant varchar2(50) := em_check.enquote_literal(replace(defaultNlsChars, singleQuote, doubleQuote)); inputSafe constant varchar2(20) := To_Char(input, defaultNlsFormat, defaultNlsChars); inputSafeLiteral constant varchar2(20) := em_check.enquote_literal(inputSafe); BEGIN if input is NULL then return 'NULL'; else return 'to_number(' || inputSafeLiteral || ', ' || defaultNlsFormatLiteral || ', ' || defaultNlsCharsLiteral || ') '; end if; EXCEPTION WHEN OTHERS THEN return 'NULL'; END escape_and_enquote_number; function escape_and_enquote_timestamp(timestamp IN Date, timezone IN varchar2) return varchar2 is dateFormat constant varchar2(30) := 'MM/DD/YYYY HH24:MI:SS'; timestampStr constant varchar2(50) := to_char(timestamp, dateFormat); timestampTzLiteralSafe constant varchar2(50) := em_check.enquote_literal(timestampStr || ' ' || timezone); dateFormatTz constant varchar2(30) := dateFormat || ' TZD'; dateFormatTzLiteral constant varchar2(30) := em_check.enquote_literal(dateFormatTz); BEGIN if timestamp IS NULL or timezone IS NULL then return NULL; else return 'to_timestamp_tz(' || timestampTzLiteralSafe || ', ' || dateFormatTzLiteral || ') '; end if; EXCEPTION WHEN OTHERS THEN return NULL; END escape_and_enquote_timestamp; procedure get_database_and_instance_info ( result_cursor_out OUT CURSOR_TYPE, tgt_guid_in IN MGMT_IP_TGT_GUID_ARRAY, start_date_in IN DATE DEFAULT NULL, end_date_in IN DATE DEFAULT NULL ) is targetName VARCHAR2(256); targetType VARCHAR2(64); sitemapInfo SMP_EMD_DBSITEMAP_OBJ; dbSize VARCHAR2(20); databaseName VARCHAR2(15); globalName VARCHAR2(4000); dbVersion VARCHAR2(64); openMode VARCHAR2(18); listenerName VARCHAR2(256); oracleHome VARCHAR2(1024); logMode VARCHAR2(18); restrictedMode VARCHAR2(18); flashbackOn VARCHAR2(18); query_string VARCHAR2(32767); BEGIN BEGIN select target_name into targetName from mgmt$target where target_guid = hextoraw(tgt_guid_in(1)) and rownum=1; EXCEPTION WHEN NO_DATA_FOUND THEN targetName := NULL; END; targetType := 'oracle_database'; BEGIN select i.database_name, i.global_name, i.banner, decode(i.open_mode, 'NO', 'DB_REPORT_DISABLED', 'DB_REPORT_ENABLED'), decode(i.logins, 'NO', 'DB_REPORT_DISABLED', 'DB_REPORT_ENABLED') into databaseName, globalName, dbVersion, openMode, restrictedMode from mgmt$db_dbninstanceinfo_all i, mgmt$ecm_visible_snapshots s where i.snapshot_guid = s.ecm_snapshot_id and s.target_guid=hextoraw(tgt_guid_in(1)) and rownum = 1; EXCEPTION WHEN NO_DATA_FOUND THEN databaseName := NULL; globalName := NULL; dbVersion := NULL; openMode := NULL; restrictedMode := NULL; END; emd_database.getDBSiteMapInfo(targetName, targetType, sitemapInfo); BEGIN select to_char(nvl(sum(tablespace_size)/1024/1024/1024,0),'9999999.0000000') into dbSize from MGMT$DB_TABLESPACES where target_guid = HEXTORAW(tgt_guid_in(1)); EXCEPTION WHEN NO_DATA_FOUND THEN dbSize := NULL; END; BEGIN select target_name into listenerName from mgmt$target where target_type = 'oracle_listener' and host_name = (select host_name from mgmt$target where target_guid = hextoraw(tgt_guid_in(1))) and target_guid in (select target_guid from mgmt$target_properties where property_name='Machine' and property_value= (select property_value from mgmt$target_properties where target_guid=hextoraw(tgt_guid_in(1)) and property_name='MachineName')) and target_guid in (select target_guid from mgmt$target_properties where property_name='Port' and property_value= (select property_value from mgmt$target_properties where target_guid=hextoraw(tgt_guid_in(1)) and property_name='Port')) and rownum=1; EXCEPTION WHEN NO_DATA_FOUND THEN listenerName := NULL; END; BEGIN select p.property_value into oracleHome from mgmt$target_properties p where p.target_guid = hextoraw(tgt_guid_in(1)) and p.property_name='OracleHome' and rownum=1; EXCEPTION WHEN NO_DATA_FOUND THEN oracleHome := NULL; END; BEGIN select decode(log_mode, 'NOARCHIVELOG', 'DB_REPORT_DISABLED', 'DB_REPORT_ENABLED') , decode(flashback_on, 'NO', 'DB_REPORT_DISABLED', 'DB_REPORT_ENABLED') into logMode, flashbackOn from MGMT$HA_INFO where target_guid = hextoraw(tgt_guid_in(1)) and rownum=1; EXCEPTION WHEN NO_DATA_FOUND THEN logMode := NULL; flashbackOn := NULL; END; query_string := 'select '; query_string := query_string || escape_and_enquote_literal(databaseName) || ' DB_REPORT_DB_NAME, '; query_string := query_string || escape_and_enquote_literal(globalName) || ' DB_REPORT_GLOBAL_NAME, '; query_string := query_string || escape_and_enquote_literal(dbVersion) || ' DB_REPORT_DB_VERSION, '; query_string := query_string || escape_and_enquote_literal(sitemapInfo.host_name) || ' DB_REPORT_HOST_NAME, '; if sitemapInfo.avail_pct < 0 then query_string := query_string || 'NULL DB_REPORT_AVAIL_PCT, '; else query_string := query_string || escape_and_enquote_number(sitemapInfo.avail_pct) || ' DB_REPORT_AVAIL_PCT, '; end if; query_string := query_string || escape_and_enquote_literal(oracleHome) || ' DB_REPORT_ORACLE_HOME, '; query_string := query_string || escape_and_enquote_literal(listenerName) || ' DB_REPORT_LISTENER, '; if sitemapInfo.start_timestamp IS NOT NULL then query_string := query_string || escape_and_enquote_timestamp(sitemapInfo.start_timestamp, sitemapInfo.timezone) || ' DB_REPORT_DB_START_TIME, '; else query_string := query_string || ' NULL DB_REPORT_DB_START_TIME, '; end if; if (sitemapInfo.instance_name IS NULL or sitemapInfo.instance_name = ' ') then query_string := query_string || ' NULL DB_REPORT_INSTANCE_NAME, '; else query_string := query_string || escape_and_enquote_literal(sitemapInfo.instance_name) || ' DB_REPORT_INSTANCE_NAME, '; end if ; if sitemapInfo.instance_starttime IS NOT NULL then query_string := query_string || escape_and_enquote_timestamp(sitemapInfo.instance_starttime, sitemapInfo.timezone) || ' DB_REPORT_INSTANCE_START_TIME, '; else query_string := query_string || ' NULL DB_REPORT_INSTANCE_START_TIME, '; end if; query_string := query_string || escape_and_enquote_literal(sitemapInfo.timezone) || ' DB_REPORT_TIME_ZONE, '; if (sitemapInfo.instance_version IS NULL or sitemapInfo.instance_version = ' ') then query_string := query_string || 'NULL DB_REPORT_INSTANCE_VERSION, '; else query_string := query_string || escape_and_enquote_literal(sitemapInfo.instance_version) || ' DB_REPORT_INSTANCE_VERSION, '; end if; query_string := query_string || escape_and_enquote_literal(openMode) || ' DB_REPORT_READ_ONLY_MODE, '; query_string := query_string || escape_and_enquote_literal(restrictedMode) || ' DB_REPORT_RESTRICTED_MODE, '; query_string := query_string || escape_and_enquote_literal(logMode) || ' DB_REPORT_ARCHIVE_LOG_MODE, '; query_string := query_string || escape_and_enquote_literal(flashbackOn) || ' DB_REPORT_FLASHBACK_LOGGING, '; if dbSize IS NOT NULL and dbSize != 0 then query_string := query_string || escape_and_enquote_number(dbSize) || ' DB_REPORT_DATABASE_SIZE '; else query_string := query_string || 'NULL DB_REPORT_DATABASE_SIZE '; end if; query_string := query_string || 'from dual'; OPEN result_cursor_out for query_string; end get_database_and_instance_info; procedure add_database_and_instance_info(l_report_guid IN RAW, l_element_row IN NUMBER, l_owner IN VARCHAR2) IS l_param_values MGMT_IP_PARAM_VALUE_LIST; l_element_guid RAW(16); BEGIN l_param_values := MGMT_IP_PARAM_VALUE_LIST(); l_param_values.extend(7); BEGIN mgmt_ip.deregister_sql_statement( p_name => 'oracle.sysman.db.overview.report.DB_INSTANCE_INFO_SQL'); EXCEPTION WHEN NO_DATA_FOUND THEN l_element_guid := NULL; END; mgmt_ip.register_sql_statement( p_name => 'oracle.sysman.db.overview.report.DB_INSTANCE_INFO_SQL', p_sql_statement => 'begin ' || l_owner || '.mgmt_database_overview.get_database_and_instance_info( result_cursor_out => ??EMIP_BIND_RESULTS_CURSOR??, tgt_guid_in => ??EMIP_BIND_TARGET_GUID_ARRAY??); end;'); l_param_values := MGMT_IP_PARAM_VALUE_LIST(); l_param_values.extend(7); l_param_values(1) := MGMT_IP_PARAM_VALUE_RECORD( 'oracle.sysman.eml.ip.render.elem.NamedSqlStatement', 'oracle.sysman.db.overview.report.DB_INSTANCE_INFO_SQL'); l_param_values(2) := MGMT_IP_PARAM_VALUE_RECORD( 'oracle.sysman.eml.ip.render.elem.TableRender.translateColumnValueColumns', 'DB_REPORT_READ_ONLY_MODE,DB_REPORT_RESTRICTED_MODE,DB_REPORT_ARCHIVE_LOG_MODE,DB_REPORT_FLASHBACK_LOGGING'); l_param_values(3) := MGMT_IP_PARAM_VALUE_RECORD( 'oracle.sysman.eml.ip.render.elem.TableRender.resourceBundle', 'oracle.sysman.db.rsc.inst.DBMsg'); l_param_values(4) := MGMT_IP_PARAM_VALUE_RECORD( 'oracle.sysman.eml.ip.render.elem.sqlStatementIsPlSql', 'true'); l_param_values(5) := MGMT_IP_PARAM_VALUE_RECORD( 'oracle.sysman.eml.ip.render.elem.TableRender.nameValueDisplay', '2'); l_param_values(6) := MGMT_IP_PARAM_VALUE_RECORD( 'oracle.sysman.eml.ip.render.elem.TableRender.nullDataStringSubstitue', 'UNAVAILABLE'); l_param_values(7) := MGMT_IP_PARAM_VALUE_RECORD( 'oracle.sysman.eml.ip.render.elem.adjustTimes', 'true'); mgmt_ip.add_table_from_sql_elem_def( p_element_name_nlsid => 'DBMSG_DATABASE_TABLE_FROM_SQL', p_element_type_nlsid => 'IPMSG_DATABASE_TARGET_TYPE', p_description_nlsid => 'DBMSG_DATABASE_TABLE_FROM_SQL', p_internal_use_only => 1, p_query_views => 0 ); l_element_guid := mgmt_ip.add_element_to_report_def ( p_report_guid => l_report_guid, p_element_name_nlsid => 'DBMSG_DATABASE_TABLE_FROM_SQL', p_element_type_nlsid => 'IPMSG_DATABASE_TARGET_TYPE', p_header_nlsid => 'DB_DATABASE_AND_INSTANCE_INFO', p_element_order => l_element_row, p_element_row => l_element_row, p_parameters => l_param_values, p_targets => NULL); END add_database_and_instance_info; procedure add_sga_info(l_report_guid IN RAW, l_element_row IN NUMBER) IS l_param_values MGMT_IP_PARAM_VALUE_LIST; l_element_guid RAW(16); BEGIN BEGIN mgmt_ip.deregister_sql_statement( p_name => 'oracle.sysman.db.overview.report.SGA_INFO_SQL'); EXCEPTION WHEN NO_DATA_FOUND THEN l_element_guid := NULL; END; mgmt_ip.register_sql_statement( p_name => 'oracle.sysman.db.overview.report.SGA_INFO_SQL', p_sql_statement => 'select e.sganame DB_REPORT_NAME, e.sgasize DB_REPORT_SIZE from mgmt$db_sga_all e, mgmt$ecm_visible_snapshots s where e.snapshot_guid = s.ecm_snapshot_id and s.target_guid = ??EMIP_BIND_TARGET_GUID??'); l_param_values := MGMT_IP_PARAM_VALUE_LIST(); l_param_values.extend(3); l_param_values(1) := MGMT_IP_PARAM_VALUE_RECORD( 'oracle.sysman.eml.ip.render.elem.NamedSqlStatement', 'oracle.sysman.db.overview.report.SGA_INFO_SQL'); l_param_values(2) := MGMT_IP_PARAM_VALUE_RECORD( 'oracle.sysman.eml.ip.render.elem.TableRender.resourceBundle', 'oracle.sysman.db.rsc.inst.DBMsg'); l_param_values(3) := MGMT_IP_PARAM_VALUE_RECORD( 'oracle.sysman.eml.ip.render.elem.adjustTimes', 'true'); mgmt_ip.add_table_from_sql_elem_def( p_element_name_nlsid => 'DBMSG_DATABASE_USER_TABLE_FROM_SQL', p_element_type_nlsid => 'IPMSG_DATABASE_TARGET_TYPE', p_description_nlsid => 'DBMSG_DATABASE_USER_TABLE_FROM_SQL', p_internal_use_only => 1, p_query_views => 1 ); l_element_guid := mgmt_ip.add_element_to_report_def ( p_report_guid => l_report_guid, p_element_name_nlsid => 'DBMSG_DATABASE_USER_TABLE_FROM_SQL', p_element_type_nlsid => 'IPMSG_DATABASE_TARGET_TYPE', p_header_nlsid => 'DB_SGA_INFO', p_element_order => l_element_row, p_element_row => l_element_row, p_parameters => l_param_values, p_targets => NULL); END add_sga_info; procedure add_non_default_init_params(l_report_guid IN RAW, l_element_row IN NUMBER) IS l_param_values MGMT_IP_PARAM_VALUE_LIST; l_element_guid RAW(16); BEGIN BEGIN mgmt_ip.deregister_sql_statement ( p_name => 'oracle.sysman.db.overview.report.NON_DEFAULT_INIT_PARAMS_SQL'); EXCEPTION WHEN NO_DATA_FOUND THEN l_element_guid := NULL; END; mgmt_ip.register_sql_statement ( p_name => 'oracle.sysman.db.overview.report.NON_DEFAULT_INIT_PARAMS_SQL', p_sql_statement => 'select i.name DB_REPORT_PARAMETER_NAME, i.value DB_REPORT_VALUE from mgmt$db_init_params_all i, mgmt$ecm_visible_snapshots s where i.isdefault = ''FALSE'' and i.snapshot_guid = s.ecm_snapshot_id and s.target_guid = ??EMIP_BIND_TARGET_GUID??'); l_param_values := MGMT_IP_PARAM_VALUE_LIST(); l_param_values.extend(3); l_param_values(1) := MGMT_IP_PARAM_VALUE_RECORD( 'oracle.sysman.eml.ip.render.elem.NamedSqlStatement', 'oracle.sysman.db.overview.report.NON_DEFAULT_INIT_PARAMS_SQL'); l_param_values(2) := MGMT_IP_PARAM_VALUE_RECORD( 'oracle.sysman.eml.ip.render.elem.TableRender.resourceBundle', 'oracle.sysman.db.rsc.inst.DBMsg'); l_param_values(3) := MGMT_IP_PARAM_VALUE_RECORD( 'oracle.sysman.eml.ip.render.elem.adjustTimes', 'true'); mgmt_ip.add_table_from_sql_elem_def( p_element_name_nlsid => 'DBMSG_DATABASE_USER_TABLE_FROM_SQL', p_element_type_nlsid => 'IPMSG_DATABASE_TARGET_TYPE', p_description_nlsid => 'DBMSG_DATABASE_USER_TABLE_FROM_SQL', p_internal_use_only => 1, p_query_views => 1 ); l_element_guid := mgmt_ip.add_element_to_report_def ( p_report_guid => l_report_guid, p_element_name_nlsid => 'DBMSG_DATABASE_USER_TABLE_FROM_SQL', p_element_type_nlsid => 'IPMSG_DATABASE_TARGET_TYPE', p_header_nlsid => 'DB_NONE_DEFAULT_INIT_PARAMS', p_element_order => l_element_row, p_element_row => l_element_row, p_parameters => l_param_values, p_targets => NULL); END add_non_default_init_params; procedure create_report_definition(l_title_nlsid IN VARCHAR2, l_description_nlsid IN VARCHAR2, l_owner IN VARCHAR2, l_category_nlsid IN VARCHAR2, l_sub_category_nlsid IN VARCHAR2) is l_report_guid RAW(16); l_target_types MGMT_IP_TARGET_TYPES; BEGIN BEGIN mgmt_ip.delete_report_by_title(report_owner_in => l_owner, report_title_in => l_title_nlsid, check_security => 0); EXCEPTION WHEN NO_DATA_FOUND THEN l_report_guid := NULL; END; -- targets types l_target_types := MGMT_IP_TARGET_TYPES(); l_target_types.extend(1); l_target_types(1) := 'oracle_database'; l_report_guid := mgmt_ip.create_report_definition ( p_title_nlsid => l_title_nlsid, p_description_nlsid => l_description_nlsid, p_owner => l_owner, p_category_nlsid => l_category_nlsid, p_sub_category_nlsid => l_sub_category_nlsid, p_late_binding_target_types => l_target_types, p_system_report => 1); add_instruction_text(l_report_guid, 1); add_database_and_instance_info(l_report_guid, 2, l_owner); add_sga_info(l_report_guid, 3); add_non_default_init_params(l_report_guid, 4); END create_report_definition; END mgmt_database_overview; / show errors;