Rem drv:
Rem
Rem $Header: webapp_data_upgrade.sql 02-oct-2005.11:09:24 mfidanbo Exp $
Rem
Rem webapp_data_upgrade.sql
Rem
Rem Copyright (c) 2004, 2005, Oracle. All rights reserved.
Rem
Rem NAME
Rem webapp_data_upgrade.sql -
Rem
Rem DESCRIPTION
Rem
Rem
Rem NOTES
Rem
Rem
Rem MODIFIED (MM/DD/YY)
Rem mfidanbo 09/27/05 - pass agent name instead of host name
Rem rmarripa 08/24/05 - Remove the parameter emd_url from the job
Rem submission
Rem chyu 07/26/05 - modifying the migrate header position
Rem chyu 07/25/05 - adding the set echo on to start printing in
Rem verbose mode
Rem chyu 07/18/05 - updating the new rep manager header
Rem rmarripa 07/06/05 - do not create system for services with host or
Rem emd targets
Rem rmarripa 06/21/05 - create only one beacon per agent
Rem rmarripa 06/15/05 - add update beacon job required for sync
Rem rmarripa 06/06/05 - Remove composite target type property
Rem jsardas 05/04/05 - add logging
Rem andyao 04/29/05 - Enable test availability upgrade
Rem rmarripa 04/18/05 - delete associations with host and agent
Rem rmarripa 04/15/05 - fix bcn_tgt_cur to look only for beacon target
Rem types
Rem mfidanbo 02/18/05 - load the upgrade job pkg
Rem ktlaw 01/13/05 - add repmgr header
Rem rmarripa 12/24/04 - rmarripa_webapp_upgrade_changes
Rem rmarripa 12/22/04 - add member targets upgrade
Rem rmarripa 12/16/04 - Created
Rem
--------------------------------------------------------------------------------
-- This package upgrades 10gR1 Web Application data to 10gR2.
--------------------------------------------------------------------------------
declare
BEGIN
mgmt_log.register_logging_module ( 'Webapp10gR2Upgrade',
'Web Application 10gR2 Upgrade');
END;
/
show errors;
@&EM_SQL_ROOT/core/latest/jobTypes_sql/WebappUpgrade.sql
SET ECHO ON;
@&EM_SQL_ROOT/core/latest/jobTypes_sql/UpdateBeaconCollections.sql
SET ECHO ON;
@&EM_SQL_ROOT/core/v102010/webapp/webapp_upgrade_pkgdef.sql
SET ECHO ON;
@&EM_SQL_ROOT/core/v102010/webapp/webapp_upgrade_pkgbody.sql
SET ECHO ON;
CREATE OR REPLACE PACKAGE WEBAPP_UPGRADE AS
WEBAPP_UPGRADE_BEACON CONSTANT VARCHAR2(32) := 'Webapp10gR2UpgradeBeacon';
DONOT_REPLACE_WITH_BEACON CONSTANT VARCHAR2(32) := 'DoNotReplaceWithBeacon';
MODULE_NAME VARCHAR2(32) := 'Webapp10gR2Upgrade';
NOOP CONSTANT NUMBER := 0;
CREATE_BEACON CONSTANT NUMBER := 1;
USE_EXISTING_BEACON CONSTANT NUMBER := 2;
JOB_NAME_PREFIX CONSTANT VARCHAR2(32) := 'WBAPP_UPGR_';
JOB_TYPE CONSTANT VARCHAR2(32) := 'Upgrade10gR2Webapp';
JOB_DESCRIPTION CONSTANT VARCHAR2(64) := 'This job upgrades Web Application data from 10gR to 10gR2.';
PROCEDURE SUBMIT_UPGRADE_JOB(p_tgt_name IN VARCHAR2,
p_tgt_type IN VARCHAR2,
p_bcn_op IN NUMBER,
p_bcn_tgt_name IN VARCHAR2,
p_bcn_tgt_type IN VARCHAR2,
p_host_name IN VARCHAR2,
p_agent_name IN VARCHAR2) ;
PROCEDURE UPGRADE_WEBAPP;
END WEBAPP_UPGRADE;
/
SHOW ERRORS;
CREATE OR REPLACE PACKAGE BODY WEBAPP_UPGRADE AS
g_upgrade_beacon_prop VARCHAR2(256) := NULL;
FUNCTION GET_TARGET_PROPS (p_tgt_name IN VARCHAR2, p_tgt_type IN VARCHAR2) RETURN VARCHAR2
IS
l_props VARCHAR2(1024) := NULL;
l_target_props SMP_EMD_NVPAIR_ARRAY := NULL;
BEGIN
IF ( p_tgt_name IS NULL ) OR ( p_tgt_type IS NULL ) OR
( p_tgt_type != MGMT_GLOBAL.G_WEBSITE_TARGET_TYPE ) THEN
return l_props;
END IF;
BEGIN
SELECT SMP_EMD_NVPAIR(props.property_name , props.property_value)
BULK COLLECT INTO l_target_props
FROM mgmt_target_properties props, mgmt_targets tgt
WHERE tgt.target_name = p_tgt_name
AND tgt.target_type = p_tgt_type
AND tgt.target_guid = props.target_guid
AND props.property_type = 'INSTANCE'
AND props.property_name in ('proxyHost', 'proxyPort', 'dontProxyFor');
EXCEPTION
WHEN NO_DATA_FOUND THEN
NULL;
END;
IF ( l_target_props IS NULL ) OR ( l_target_props.COUNT = 0 ) THEN
return l_props;
END IF;
l_props := '';
FOR l_counter IN l_target_props.FIRST..l_target_props.LAST LOOP
IF ( l_counter = l_target_props.LAST ) THEN
l_props := l_props||l_target_props(l_counter).name ||'='||
l_target_props(l_counter).value;
ELSE
l_props := l_props||l_target_props(l_counter).name ||'='||
l_target_props(l_counter).value||'|';
END IF;
END LOOP;
return l_props;
END GET_TARGET_PROPS;
FUNCTION GET_NEW_BEACON_NAME (p_tgt_name IN VARCHAR2,
p_tgt_type IN VARCHAR2,
p_emd_url IN VARCHAR2,
p_host_name IN VARCHAR2) RETURN VARCHAR2
IS
beacon_name VARCHAR2(256) := NULL;
l_agent_cnt NUMBER := 0;
l_agent_name mgmt_targets.target_name%TYPE := null;
bcn_tgt_name mgmt_targets.target_name%TYPE := null;
BEGIN
IF ( p_tgt_name IS NULL ) OR ( p_tgt_type IS NULL ) OR
( p_tgt_type != MGMT_GLOBAL.G_WEBSITE_TARGET_TYPE ) THEN
return beacon_name;
END IF;
IF ( p_emd_url IS NULL ) OR ( p_host_name IS NULL ) THEN
return beacon_name;
END IF;
-- Check if the host has more than one agent
SELECT count(*)
INTO l_agent_cnt
FROM mgmt_targets
WHERE target_type = MGMT_GLOBAL.G_AGENT_TARGET_TYPE
AND host_name = p_host_name;
--If the host has more than one agent, use the agent
-- target name as beacon target name prefix. Otherwise,
-- use host name as prefix.
IF ( l_agent_cnt > 1 ) THEN
BEGIN
SELECT target_name
INTO l_agent_name
FROM mgmt_targets
WHERE target_type = MGMT_GLOBAL.G_AGENT_TARGET_TYPE
AND emd_url = p_emd_url;
EXCEPTION
WHEN NO_DATA_FOUND THEN
-- if for some reason there is no agent target
-- append _2 to the host name
l_agent_name := p_host_name ||'_2';
END;
beacon_name := l_agent_name || '_beacon';
ELSE
beacon_name := p_host_name || '_beacon';
END IF;
-- During the upgrade, OMS is down. All the jobs submitted
-- for creating beacon will be in the job queue.
-- Here we check if there is any beacon target with same
-- name, prior to upgrade. If yes, then create one beacon
-- per target, that means create beacon name with web app
-- target name as prefix.
BEGIN
SELECT target_name
INTO bcn_tgt_name
FROM mgmt_targets
WHERE target_name=beacon_name
AND target_type = mgmt_global.g_beacon_target_type;
EXCEPTION
WHEN NO_DATA_FOUND THEN
NULL;
END;
IF ( bcn_tgt_name IS NOT NULL ) THEN
beacon_name := p_tgt_name ||'_2_beacon';
END IF;
return beacon_name;
END GET_NEW_BEACON_NAME;
PROCEDURE ADD_BEACON_ASSOCS
IS
CURSOR tgt_bcn_cur IS
SELECT tgt.target_name as target_name,
tgt.target_type as target_type,
bcn.target_name as bcn_target_name,
bcn.target_type as bcn_target_type
FROM mgmt_bcn_target tgt_bcn, mgmt_targets bcn, mgmt_targets tgt
WHERE tgt.target_guid = tgt_bcn.target_guid
AND tgt.target_type=MGMT_GLOBAL.G_WEBSITE_TARGET_TYPE
AND tgt_bcn.beacon_target_guid = bcn.target_guid
AND bcn.target_type = MGMT_GLOBAL.G_BEACON_TARGET_TYPE;
BEGIN
FOR sub_rec in tgt_bcn_cur LOOP
mgmt_assoc.create_target_assoc(MGMT_ASSOC.ASSOC_DEF_REMOTELY_MNTRD_BY,
sub_rec.target_name, sub_rec.target_type, sub_rec.bcn_target_name,
sub_rec.bcn_target_type);
END LOOP;
END ADD_BEACON_ASSOCS;
PROCEDURE SUBMIT_UPGRADE_JOB(p_tgt_name IN VARCHAR2,
p_tgt_type IN VARCHAR2,
p_bcn_op IN NUMBER,
p_bcn_tgt_name IN VARCHAR2,
p_bcn_tgt_type IN VARCHAR2,
p_host_name IN VARCHAR2,
p_agent_name IN VARCHAR2)
IS
l_job_targets MGMT_JOB_TARGET_LIST;
l_job_target_list MGMT_JOB_TARGET_LIST_ARRAY;
l_job_params MGMT_JOB_PARAM_LIST;
l_job_name MGMT_JOB.job_name%TYPE;
l_job_id MGMT_JOB.job_id%TYPE;
l_execution_ids MGMT_JOB_GUID_ARRAY;
l_queue_names SMP_EMD_STRING_ARRAY := SMP_EMD_STRING_ARRAY();
l_schedule MGMT_JOB_SCHEDULE_RECORD;
l_op_type VARCHAR2(64) := NULL;
l_props VARCHAR2(1024) := NULL;
l_count NUMBER;
l_tgt_id MGMT_TARGETS.target_guid%TYPE;
l_index NUMBER;
BEGIN
IF ( p_tgt_name IS NULL ) OR ( p_tgt_type IS NULL ) OR
( p_tgt_type != MGMT_GLOBAL.G_WEBSITE_TARGET_TYPE ) THEN
return ;
END IF;
IF ( p_bcn_op != NOOP ) AND ( p_bcn_op != CREATE_BEACON ) AND ( p_bcn_op != USE_EXISTING_BEACON ) THEN
return ;
END IF;
IF ( p_bcn_op = CREATE_BEACON ) THEN
l_op_type := 'CreateBeacon';
ELSE
l_op_type := 'UseExistingBeacon';
END IF;
SELECT RAWTOHEX(target_guid)
INTO l_tgt_id
FROM mgmt_targets
WHERE target_name = p_tgt_name
AND target_type = p_tgt_type;
l_job_name := JOB_NAME_PREFIX||l_tgt_id;
-- Job target list
l_job_targets := MGMT_JOB_TARGET_LIST();
l_job_targets.EXTEND(1);
l_job_targets(1) := MGMT_JOB_TARGET_RECORD(p_tgt_name, p_tgt_type );
l_job_target_list := MGMT_JOB_TARGET_LIST_ARRAY();
l_job_target_list.EXTEND(1);
l_job_target_list(1) := l_job_targets;
-- job params list
l_job_params := MGMT_JOB_PARAM_LIST();
l_job_params.extend(4);
l_index := 1;
l_job_params(l_index) := MGMT_JOB_PARAM_RECORD('upgradeType', 1,
l_op_type, null);
l_index := l_index+1;
l_job_params(l_index) := MGMT_JOB_PARAM_RECORD('webapp_target_name', 1,
p_tgt_name, null);
l_index := l_index+1;
l_job_params(l_index) := MGMT_JOB_PARAM_RECORD('webapp_target_type', 1,
p_tgt_type, null);
l_index := l_index+1;
l_job_params(l_index) := MGMT_JOB_PARAM_RECORD('agent_name', 1,
p_agent_name, null);
l_index := l_index+1;
IF ( p_bcn_tgt_name IS NOT NULL ) AND ( p_bcn_tgt_type IS NOT NULL ) THEN
l_job_params.extend(2);
l_job_params(l_index) := MGMT_JOB_PARAM_RECORD('beacon_target_name', 1,
p_bcn_tgt_name, null);
l_index := l_index+1;
l_job_params(l_index) := MGMT_JOB_PARAM_RECORD('beacon_target_type', 1,
p_bcn_tgt_type, null);
l_index := l_index+1;
END IF;
IF ( p_bcn_op = CREATE_BEACON ) THEN
l_job_params.EXTEND(1);
l_job_params(l_index) := MGMT_JOB_PARAM_RECORD('host_name', 1,
p_host_name, null);
l_index := l_index+1;
l_props := get_target_props(p_tgt_name, p_tgt_type);
IF ( l_props IS NOT NULL ) THEN
l_job_params.EXTEND(1);
l_job_params(l_index) := MGMT_JOB_PARAM_RECORD('properties', 1,
l_props, null);
l_index := l_index+1;
END IF;
END IF;
l_schedule := null;
--Create the queue if not already created
l_queue_names.extend(1);
l_queue_names(1) := JOB_NAME_PREFIX || l_tgt_id;
SELECT count(1) INTO l_count
FROM MGMT_JOB_QUEUES
WHERE queue_name = l_queue_names(1);
IF l_count=0 THEN
MGMT_JOB_ENGINE.create_job_queue(l_queue_names(1));
END IF;
-- Submit the job
MGMT_JOBS.submit_job( l_job_name,
JOB_DESCRIPTION,
0,
JOB_TYPE,
l_job_target_list,
l_job_params,
l_schedule,
-1,
l_job_id,
l_execution_ids,
null,
MGMT_JOB_ENGINE.SYSTEM_JOB_RETRY,
null,
null,
l_queue_names);
dbms_output.put_line('JOB_ID '||l_job_id);
END SUBMIT_UPGRADE_JOB;
PROCEDURE UPGRADE_TARGET_MEMBERS(p_target_name IN VARCHAR2,
p_target_type IN VARCHAR2)
IS
-- cursor to get the Web Application targets members
CURSOR webapp_mem_tgt_cur (tgt_name IN VARCHAR2, tgt_type IN VARCHAR2) IS
SELECT member_target_name, member_target_type, member_target_guid
FROM mgmt_target_memberships
WHERE composite_target_name = tgt_name
AND composite_target_type = tgt_type;
l_members SMP_EMD_NVPAIR_ARRAY := null;
i NUMBER := 1;
l_sys_tgt_name mgmt_targets.target_name%TYPE;
l_temp_tgt_name mgmt_targets.target_name%TYPE := null;
l_tz_reg mgmt_targets.timezone_region%TYPE := null;
l_non_host_emd_tgts NUMBER := 0;
BEGIN
IF ( p_target_name IS NULL ) OR ( p_target_type IS NULL ) OR
( p_target_type != MGMT_GLOBAL.G_WEBSITE_TARGET_TYPE ) THEN
return ;
END IF;
FOR sub_rec in webapp_mem_tgt_cur (p_target_name, p_target_type) LOOP
IF ( l_members IS null ) THEN
l_members := SMP_EMD_NVPAIR_ARRAY();
END IF;
l_members.extend(1);
l_members(i) := SMP_EMD_NVPAIR(sub_rec.member_target_name, sub_rec.member_target_type);
i := i+1;
END LOOP;
IF ( l_members IS NULL ) OR ( l_members.COUNT = 0 ) THEN
return;
END IF;
-- Do not create a system if the Web Application has
-- host and/or agent as member targets. This is to reduce
-- number of system targets created.
IF ( l_members.COUNT <= 2 ) THEN
SELECT count(*)
INTO l_non_host_emd_tgts
FROM mgmt_target_memberships
WHERE composite_target_name = p_target_name
AND composite_target_type = p_target_type
AND member_target_type != MGMT_GLOBAL.G_HOST_TARGET_TYPE
AND member_target_type != MGMT_GLOBAL.G_AGENT_TARGET_TYPE;
END IF;
IF ( l_members.COUNT <= 2 ) AND ( l_non_host_emd_tgts = 0 ) THEN
-- delete the "Contains" association between the Web Application
-- and all member targets.
DELETE
FROM mgmt_target_assocs assoc
WHERE assoc.source_target_guid
IN (SELECT target_guid
FROM mgmt_targets
WHERE target_name = p_target_name
AND target_type = p_target_type)
AND assoc.assoc_guid = mgmt_assoc.g_contains_guid;
-- Retun without creating a system
return;
END IF;
l_sys_tgt_name := p_target_name||'_'||'System';
BEGIN
SELECT target_name
INTO l_temp_tgt_name
FROM mgmt_targets
WHERE target_name=l_sys_tgt_name
AND target_type = MGMT_GLOBAL.G_GENERIC_SYSTEM_TYPE;
EXCEPTION
WHEN NO_DATA_FOUND THEN
NULL;
END;
IF ( l_temp_tgt_name IS NOT NULL ) THEN
l_sys_tgt_name := p_target_name ||'_'||'System_5';
END IF;
--create a generic_system
SELECT timezone_region
INTO l_tz_reg
FROM mgmt_targets
WHERE target_name = l_members(1).name
AND target_type = l_members(1).value;
-- Create system
mgmt_system.create_system(l_sys_tgt_name,
MGMT_GLOBAL.G_GENERIC_SYSTEM_TYPE,
l_members, l_tz_reg );
-- After creating the system with all the member targets
-- delete the "Contains" association between the Web Application
-- and all key components.
DELETE
FROM mgmt_target_assocs assoc
WHERE assoc.source_target_guid
IN (SELECT target_guid
FROM mgmt_targets
WHERE target_name = p_target_name
AND target_type = p_target_type)
AND assoc.assoc_guid = mgmt_assoc.g_contains_guid;
-- Associate system
-- This will create association between service, system and all
-- key components.
mgmt_service.set_system( p_target_name, p_target_type,
l_sys_tgt_name, MGMT_GLOBAL.G_GENERIC_SYSTEM_TYPE,
l_members);
END UPGRADE_TARGET_MEMBERS;
PROCEDURE UPGRADE_GENSVC_AVAIL( p_target_name IN VARCHAR2,
p_target_type IN VARCHAR2 )
AS
l_target_guid MGMT_TARGETS.target_guid%TYPE;
l_beacon_name MGMT_TARGETS.target_name%TYPE;
l_beacon_list MGMT_GENSVC_TGT_NAME_ARRAY;
l_test_list MGMT_GENSVC_AV_TEST_ARRAY;
l_test MGMT_GENSVC_AV_TEST;
l_metric_name MGMT_METRICS.metric_name%TYPE;
l_metric_column MGMT_METRICS.metric_column%TYPE;
l_process_test BOOLEAN;
l_count INTEGER;
l_more BOOLEAN;
CURSOR l_beacon_cursor IS
SELECT mt.target_name
FROM MGMT_TARGETS mt, MGMT_BCN_TARGET mbt
WHERE mbt.target_guid = l_target_guid
AND mbt.participates_avail = 'Y'
AND mbt.is_removing = 'N'
AND mbt.is_local = 'N'
AND mbt.target_guid <> mbt.beacon_target_guid
AND mbt.beacon_target_guid = mt.target_guid
AND mt.target_type = EMD_BCNTXN.p_beacon_type;
CURSOR l_test_cursor IS
SELECT tx.name, tx.txn_type,
DECODE(tx.is_representative, 'Y', 1, 0) as avail_test,
DECODE(tx.state, 'NM', 0, 1) as monit_state
FROM MGMT_BCN_TXN_DEFN tx
WHERE tx.target_guid = l_target_guid;
l_cur_test l_test_cursor%ROWTYPE;
BEGIN
-- get target details
SELECT target_guid
INTO l_target_guid
FROM MGMT_TARGETS
WHERE target_name = p_target_name
AND target_type = p_target_type;
-- migrate beacons
l_count := 0;
l_more := TRUE;
OPEN l_beacon_cursor;
WHILE l_more LOOP
FETCH l_beacon_cursor INTO l_beacon_name;
l_more := l_beacon_cursor%FOUND;
IF l_more THEN
IF l_count = 0 THEN
l_beacon_list := MGMT_GENSVC_TGT_NAME_ARRAY();
END IF;
l_count := l_count + 1;
l_beacon_list.EXTEND(1);
l_beacon_list(l_count) := l_beacon_name;
END IF;
END LOOP;
CLOSE l_beacon_cursor;
IF l_count > 0 THEN
MGMT_GENSVC_AVAIL.SET_BEACONS(p_target_name, p_target_type, l_beacon_list);
END IF;
-- migrate tests
l_count := 0;
l_more := TRUE;
OPEN l_test_cursor;
WHILE l_more LOOP
FETCH l_test_cursor INTO l_cur_test;
l_more := l_test_cursor%FOUND;
IF l_more THEN
IF l_cur_test.txn_type = 'HTTP' THEN
l_metric_name := 'http_response';
l_metric_column := 'status';
l_process_test := TRUE;
ELSIF l_cur_test.txn_type = 'PING' THEN
l_metric_name := 'ping';
l_metric_column := 'host_status';
l_process_test := TRUE;
ELSE
l_process_test := FALSE;
END IF;
IF l_process_test THEN
l_test := MGMT_GENSVC_AV_TEST( l_cur_test.name,
l_cur_test.txn_type,
l_metric_name,
l_metric_column,
l_cur_test.avail_test,
l_cur_test.monit_state );
IF l_count = 0 THEN
l_test_list := MGMT_GENSVC_AV_TEST_ARRAY();
END IF;
l_count := l_count + 1;
l_test_list.EXTEND(1);
l_test_list(l_count) := l_test;
END IF;
END IF;
END LOOP;
CLOSE l_test_cursor;
IF l_count > 0 THEN
MGMT_GENSVC_AVAIL.SET_TESTS(p_target_name, p_target_type, l_test_list);
END IF;
-- set the eval logic to OR
MGMT_GENSVC_AVAIL.SET_SVC_EVAL_LOGIC(p_target_name, p_target_type,
MGMT_GENSVC_AVAIL.k_or_eval);
-- enable avail for the target
MGMT_GENSVC_AVAIL.ENABLE_AVAIL(p_target_name, p_target_type);
UPDATE MGMT_TARGET_PROPERTIES
SET property_value = MGMT_SERVICE.G_TEST_BASED_AVAIL_COMP
WHERE target_guid = l_target_guid
AND property_name = MGMT_SERVICE.G_AVAIL_COMPUTATION_MECH
AND property_type = MGMT_GLOBAL.G_INSTANCE_PROP_TYPE;
IF SQL%NOTFOUND THEN
INSERT INTO MGMT_TARGET_PROPERTIES(target_guid, property_name,
property_type, property_value)
VALUES ( l_target_guid,
MGMT_SERVICE.G_AVAIL_COMPUTATION_MECH,
MGMT_GLOBAL.G_INSTANCE_PROP_TYPE, MGMT_SERVICE.G_TEST_BASED_AVAIL_COMP);
END IF;
EXCEPTION
WHEN OTHERS THEN
IF l_beacon_cursor%ISOPEN THEN
CLOSE l_beacon_cursor;
END IF;
IF l_test_cursor%ISOPEN THEN
CLOSE l_test_cursor;
END IF;
RAISE;
END UPGRADE_GENSVC_AVAIL;
PROCEDURE REMOVE_LOCAL_INST(p_tgt_name IN VARCHAR2,
p_tgt_type IN VARCHAR2,
p_agent_name IN VARCHAR2,
p_emd_url IN VARCHAR2,
p_host_name IN VARCHAR2)
IS
tgt_upgrade_bcn_prop mgmt_target_properties.property_value%TYPE;
beacon_name VARCHAR2(256) := null;
beacon_op number := CREATE_BEACON;
bcn_tgt_name VARCHAR2(256) := null;
bcn_tgt_type VARCHAR2(256) := null;
BEGIN
IF ( p_tgt_name IS NULL ) OR ( p_tgt_type IS NULL ) OR
(p_emd_url IS NULL ) OR
( p_tgt_type != MGMT_GLOBAL.G_WEBSITE_TARGET_TYPE ) THEN
return;
END IF;
BEGIN
SELECT property_value
INTO tgt_upgrade_bcn_prop
FROM mgmt_target_properties prop, mgmt_targets tgt
WHERE prop.target_guid = tgt.target_guid
AND tgt.target_name=p_tgt_name
AND target_type=p_tgt_type
AND prop.property_name = WEBAPP_UPGRADE_BEACON;
EXCEPTION
WHEN NO_DATA_FOUND THEN
tgt_upgrade_bcn_prop := NULL;
END;
dbms_output.put_line('tgt_upgrade_bcn_prop '||tgt_upgrade_bcn_prop);
--check for target specific property
IF ( tgt_upgrade_bcn_prop IS NULL ) THEN
--check for ttarget specific property specific property
IF ( g_upgrade_beacon_prop = DONOT_REPLACE_WITH_BEACON ) THEN
beacon_op := NOOP;
ELSIF ( g_upgrade_beacon_prop IS NULL ) THEN
beacon_op := CREATE_BEACON;
ELSE
beacon_op := USE_EXISTING_BEACON;
beacon_name := g_upgrade_beacon_prop;
END IF;
ELSIF ( tgt_upgrade_bcn_prop = DONOT_REPLACE_WITH_BEACON ) THEN
beacon_op := NOOP;
ELSE
beacon_op := USE_EXISTING_BEACON;
beacon_name := tgt_upgrade_bcn_prop;
END IF;
dbms_output.put_line('beacon_op '||beacon_op);
IF ( beacon_op = NOOP ) THEN
dbms_output.put_line('NOOP');
-- submit a job with beacon_target_name, beacon_Target_type as null
submit_upgrade_job( p_tgt_name, p_tgt_type, beacon_op, null, null, p_host_name, p_agent_name );
ELSIF ( beacon_op = USE_EXISTING_BEACON )THEN
dbms_output.put_line('USE_EXISTING_BEACON');
-- get the beacon name and type from mgmt_targets to make sure they are valid
-- and submit job
BEGIN
SELECT target_name, target_type
INTO bcn_tgt_name, bcn_tgt_type
FROM mgmt_targets
WHERE target_name=beacon_name
AND target_type = mgmt_global.g_beacon_target_type;
EXCEPTION
WHEN NO_DATA_FOUND THEN
bcn_tgt_name := NULL;
bcn_tgt_type := NULL;
END;
IF ( bcn_tgt_name IS NOT NULL ) AND (bcn_tgt_type IS NOT NULL ) THEN
submit_upgrade_job( p_tgt_name, p_tgt_type, beacon_op, bcn_tgt_name, MGMT_GLOBAL.G_BEACON_TARGET_TYPE, p_host_name, p_agent_name);
ELSE
dbms_output.put_line('CREATE_BEACON');
beacon_op := CREATE_BEACON;
bcn_tgt_name := get_new_beacon_name(p_tgt_name, p_tgt_type, p_emd_url, p_host_name);
submit_upgrade_job( p_tgt_name, p_tgt_type, beacon_op, bcn_tgt_name, MGMT_GLOBAL.G_BEACON_TARGET_TYPE, p_host_name, p_agent_name);
END IF;
ELSIF ( beacon_op = CREATE_BEACON ) THEN
dbms_output.put_line('CREATE_BEACON');
-- submit a job to create a new beacon
bcn_tgt_name := get_new_beacon_name(p_tgt_name, p_tgt_type, p_emd_url, p_host_name);
submit_upgrade_job( p_tgt_name, p_tgt_type, beacon_op, bcn_tgt_name, MGMT_GLOBAL.G_BEACON_TARGET_TYPE, p_host_name, p_agent_name);
END IF;
END REMOVE_LOCAL_INST;
PROCEDURE UPGRADE_WEBAPP
IS
-- cursor to get the Web Application targets
CURSOR webapp_tgt_cur IS
SELECT target_name, target_type, emd_url, host_name
FROM mgmt_targets
WHERE target_type = MGMT_GLOBAL.G_WEBSITE_TARGET_TYPE;
agent_name MGMT_TARGETS.TARGET_NAME%TYPE;
BEGIN
BEGIN
SELECT PARAMETER_VALUE
INTO g_upgrade_beacon_prop
FROM mgmt_parameters
WHERE PARAMETER_NAME = WEBAPP_UPGRADE_BEACON;
EXCEPTION
WHEN NO_DATA_FOUND THEN
g_upgrade_beacon_prop := NULL;
END;
dbms_output.put_line('g_upgrade_beacon_prop '||g_upgrade_beacon_prop);
-- For each Web Application target do the following
-- Step 1. Upgrade Transaction Data
-- Delete monitored_by association between webapp and agent
-- Delete hosted_by association between webapp and host
DELETE
FROM mgmt_target_assocs assoc
WHERE assoc.source_target_guid
IN (SELECT target_guid
FROM mgmt_targets
WHERE target_type = MGMT_GLOBAL.G_WEBSITE_TARGET_TYPE)
AND (assoc.assoc_guid = mgmt_assoc.g_hosted_by_guid
OR assoc.assoc_guid = mgmt_assoc.g_monitored_by_guid
OR assoc.assoc_guid = mgmt_assoc.g_remotely_monitored_by_guid );
-- Step 2. Create associations for existing beacons except the local beacon
add_beacon_assocs;
-- From the following step loop through each target
FOR sub_rec IN webapp_tgt_cur LOOP
-- Step 3. Create a generic system and migrate all existing 10gR1
-- member targets to key components of the webapp
upgrade_target_members(sub_rec.target_name, sub_rec.target_type);
-- Step 4. Remove 10gR1 Transaction availability
-- Register transsactions with 10gR2 availability
-- Register Web Application target availability
UPGRADE_GENSVC_AVAIL(sub_rec.target_name, sub_rec.target_type);
-- Step 5. Remove Local Website target instance and replace with
-- Beacon target if required.
BEGIN
SELECT target_name INTO agent_name
FROM MGMT_TARGETS
WHERE target_type = MGMT_GLOBAL.G_AGENT_TARGET_TYPE
AND emd_url = sub_rec.emd_url
AND host_name = sub_rec.host_name;
EXCEPTION WHEN NO_DATA_FOUND THEN
MGMT_LOG.LOG_ERROR(MODULE_NAME, NULL, sub_rec.target_name || ' : ' || sub_rec.target_type || ' does not have an agent. Will not upgrade.');
agent_name := NULL;
WHEN OTHERS THEN
MGMT_LOG.LOG_ERROR(MODULE_NAME, NULL, sub_rec.target_name || ' : ' || sub_rec.target_type || SQLERRM);
END;
IF ( agent_name IS NOT NULL) THEN
remove_local_inst(sub_rec.target_name, sub_rec.target_type, agent_name,
sub_rec.emd_url, sub_rec.host_name);
END IF;
-- Step 6. Upgrade key values part 1
END LOOP;
END UPGRADE_WEBAPP;
END WEBAPP_UPGRADE;
/
SHOW ERRORS;
---------------------------------------------------------
--Run the main methos to invoke the upgrade
---------------------------------------------------------
DECLARE
l_wl_item_count NUMBER := 0;
BEGIN
webapp_upgrade.upgrade_webapp;
-- submit sync jobs for all beacon targets to repush beacon watch list items
FOR sub_rec in (SELECT target_name, target_type, target_guid
FROM mgmt_targets
WHERE target_type = MGMT_GLOBAL.G_BEACON_TARGET_TYPE)
LOOP
SELECT count(*)
INTO l_wl_item_count
FROM mgmt_bcn_txn_defn
where target_guid = sub_rec.target_guid;
-- submit jobs only if there is at least one test exists
IF ( l_wl_item_count > 0 ) THEN
webapp_upgrade_job.SYNC_ASSOC_BEACONS( sub_rec.target_name, sub_rec.target_type );
END IF;
END LOOP;
-- Delete the composite target type property
DELETE
FROM mgmt_type_properties
WHERE target_type = MGMT_GLOBAL.G_WEBSITE_TARGET_TYPE
AND (property_name = MGMT_GLOBAL.G_IS_COMPOSITE_PROP OR property_name = MGMT_GLOBAL.G_IS_AGGREGATE_PROP);
END;
/
SHOW ERRORS;