REM drv:
Rem
Rem $Header: pa_pkgbody.sql 14-dec-2006.08:05:46 qsong Exp $
Rem
Rem pa_pkgbody.sql
Rem
Rem Copyright (c) 2005, 2006, Oracle. All rights reserved.
Rem
Rem NAME
Rem pa_pkgbody.sql -
Rem
Rem DESCRIPTION
Rem
Rem
Rem NOTES
Rem
Rem
Rem MODIFIED (MM/DD/YY)
Rem milshah 02/21/06 - Get DB Sids being serviced by ASM
Rem mningomb 11/03/05 - Accept interview_type as a parameter
Rem spahuja 08/24/05 - spahuja_creds
Rem spahuja 08/17/05 - Created
Rem
SET ECHO ON
SET FEEDBACK 1
SET NUMWIDTH 10
SET LINESIZE 80
SET TRIMSPOOL ON
SET TAB OFF
SET PAGESIZE 100
CREATE OR REPLACE PACKAGE BODY PA_PKG
IS
--
-- Function: get_home_dir
-- The function gets the home location for the selected targets from the mgmt_target_propperties table.
-- It takes an array of target names and returns a REF_CURSOR which
-- contains the correspoinding homes
-- --------- ------ ------------------------------------------
FUNCTION GET_HOME_DIR(
p_target_names in VARCHAR2_TABLE,
p_interview_type in VARCHAR2)
RETURN OUTPUT_REF_CURSOR
IS
p_row_index number := 0;
p_row_count number := 0;
p_home_dir mgmt_target_properties.property_value%TYPE;
p_prop_name mgmt_target_properties.property_name%TYPE := 'OracleHome';
-- this is varchar2 (1024) type
p_home_dir_cur OUTPUT_REF_CURSOR;
p_all_home_dirs VARCHAR2_TABLE := VARCHAR2_TABLE();
cursor home_dir_cur(p_target_name in varchar2, p_home_prop_name in varchar2) is
select tp.property_value
from mgmt_target_properties tp, mgmt_targets tgt
where
tp.property_name = p_home_prop_name
and tgt.target_name = p_target_name
and tgt.target_guid = tp.target_guid;
BEGIN
if p_interview_type is not null AND p_interview_type = 'cluster' then
p_prop_name := 'CRSHome';
end if;
p_row_count := p_target_names.count;
FOR p_row_index in 1..p_row_count LOOP
p_home_dir := NULL;
OPEN home_dir_cur(p_target_names(p_row_index),p_prop_name);
LOOP
FETCH home_dir_cur INTO p_home_dir;
EXIT when home_dir_cur%NOTFOUND;
END LOOP;
CLOSE home_dir_cur;
p_all_home_dirs.EXTEND;
p_all_home_dirs(p_row_index) := p_home_dir;
END LOOP;
OPEN p_home_dir_cur FOR
SELECT *
FROM
TABLE (CAST(p_all_home_dirs AS VARCHAR2_TABLE));
RETURN p_home_dir_cur;
END;
-- Function: get_db_sids_for_asm
-- This function takes an ASM instance name and returns an ampersand
-- seperated list of db guids which are being serviced by the ASM instance.
FUNCTION GET_DB_GUIDS_FOR_ASM(
p_osm_instance MGMT_TARGETS.TARGET_NAME%TYPE)
RETURN VARCHAR2
IS
struct_obj SMP_EMD_OSMSITEMAP_OBJ;
target_guid varchar2(32);
meta_ver varchar2(8);
cat_prop_1 varchar2(64);
cat_prop_2 varchar2(64);
cat_prop_3 varchar2(64);
cat_prop_4 varchar2(64);
cat_prop_5 varchar2(64);
c1 mgmt_target.cursor_type;
c2 mgmt_target.cursor_type;
c3 mgmt_target.cursor_type;
db_target_name varchar2(200);
db_target_type varchar2(200);
db_display_name varchar2(200);
db_type_display_name varchar2(200);
targetSev number;
targetAvail number;
targetStatus number;
warningAlert number;
criticalAlert number;
db_target_guid varchar2(200);
db_Name varchar2(200);
/* Return Parameter */
l_db_sid MGMT_TARGET_PROPERTIES.PROPERTY_VALUE%TYPE;
l_asm_db_guids varchar2(4096);
l_index int;
BEGIN
/* Initialize */
l_db_sid := '';
l_asm_db_guids := '';
l_index := 1;
emd_osm.getOsmSiteMapInfo(p_osm_instance,'osm_instance',struct_obj);
target_guid := struct_obj.target_guid;
meta_ver := struct_obj.meta_ver;
cat_prop_1 := struct_obj.CAT_PROP_1;
cat_prop_2 := struct_obj.CAT_PROP_2;
cat_prop_3 := struct_obj.CAT_PROP_3;
cat_prop_4 := struct_obj.CAT_PROP_4;
cat_prop_5 := struct_obj.CAT_PROP_5;
emd_osm.getDatabasesInfo(target_guid, meta_ver, cat_prop_1,cat_prop_2,cat_prop_3,cat_prop_4,cat_prop_5,c1,c2,c3);
loop
FETCH c1 INTO db_target_name, db_target_type, db_display_name, db_type_display_name, targetSev, targetAvail, targetStatus, warningAlert, criticalAlert, db_target_guid, db_Name;
EXIT WHEN c1%NOTFOUND;
/* Get the db sid */
/* SELECT property_value
INTO l_db_sid
FROM mgmt_target_properties
WHERE target_guid=db_target_guid and property_name='SID';*/
/* Add the db sid to the db sid list */
/* IF l_index = 1
THEN
l_asm_db_guids := l_db_sid;
ELSE
l_asm_db_sids := l_asm_db_sids || '&' || l_db_sid;
END IF;*/
IF l_index = 1
THEN
l_asm_db_guids := db_target_guid;
ELSE
l_asm_db_guids := l_asm_db_guids || '&' || db_target_guid;
END IF;
/* Increment the index */
l_index := l_index + 1;
end loop;
close c1;
/* return ampersand seperated sids */
/* return l_asm_db_sids; */
return l_asm_db_guids;
END;
END;
/
show errors