Rem drv:
Rem
Rem $Header: severity_data_fix_4144032.sql 18-jul-2005.11:00:23 chyu Exp $
Rem
Rem severity_data_fix_4144032.sql
Rem
Rem Copyright (c) 2005, Oracle. All rights reserved.
Rem
Rem NAME
Rem severity_data_fix_4144032.sql -
Rem
Rem DESCRIPTION
Rem
Rem
Rem NOTES
Rem
Rem
Rem MODIFIED (MM/DD/YY)
Rem chyu 07/18/05 - adding the upgrade header
Rem rpinnama 01/30/05 - rpinnama_bug-4144032
Rem rpinnama 01/30/05 - Created
Rem
DECLARE
l_avl_stat mgmt_availability.current_status%TYPE;
l_start_time mgmt_availability.start_collection_timestamp%TYPE;
l_curr_avl_stat mgmt_availability.current_status%TYPE;
l_last_avl_stat mgmt_availability.current_status%TYPE;
l_cnt INTEGER := 0;
l_blk_cnt INTEGER := 0;
l_new_status mgmt_availability.current_status%TYPE;
CURSOR avail_cursor(c_target_guid RAW) IS
SELECT a.current_status
FROM mgmt_availability a
WHERE a.target_guid = c_target_guid
AND a.start_collection_timestamp = (select max(start_collection_timestamp)
FROM mgmt_availability
where target_guid = a.target_guid
AND current_status NOT IN (3, 4, 5))
order by decode(a.current_status, 3, 1, 4, 1, 5, 1, 2) desc;
BEGIN
FOR all_tgs IN (select t.target_guid, t.target_name, t.target_type
FROM mgmt_targets t, mgmt_metrics m
WHERE t.target_type = m.target_type
AND t.type_meta_ver = m.type_meta_ver
AND (m.category_prop_1 = t.category_prop_1 OR m.category_prop_1 = ' ')
AND (m.category_prop_2 = t.category_prop_2 OR m.category_prop_2 = ' ')
AND (m.category_prop_3 = t.category_prop_3 OR m.category_prop_3 = ' ')
AND (m.category_prop_4 = t.category_prop_4 OR m.category_prop_4 = ' ')
AND (m.category_prop_5 = t.category_prop_5 OR m.category_prop_5 = ' ')
AND m.metric_name = 'Response'
AND m.metric_column = 'Status'
ORDER BY t.target_guid )
LOOP
-- Get current availability
BEGIN
SELECT current_status INTO l_curr_avl_stat
FROM mgmt_current_availability
WHERE target_guid = all_tgs.target_guid;
EXCEPTION
WHEN NO_DATA_FOUND THEN
-- DBMS_OUTPUT.PUT_LINE('No current avail for target ' ||
-- ' Tgt - ' || all_tgs.target_name ||
-- ' Typ - ' || all_tgs.target_type );
l_curr_avl_stat := 6;
END;
-- Get last availability transition
SELECT current_status INTO l_last_avl_stat
FROM mgmt_availability
WHERE target_guid = all_tgs.target_guid
AND end_collection_timestamp IS NULL;
-- Get blackout status.. Check for atleat one row with blackout_statu = 1
SELECT count(1) INTO l_blk_cnt
FROM mgmt_blackout_flat_targets
WHERE target_guid = all_tgs.target_guid
AND blackout_status = 1;
IF (l_blk_cnt > 0) THEN
IF ( (l_curr_avl_stat <> 5) AND (l_last_avl_stat <> 5) ) THEN
-- DBMS_OUTPUT.PUT_LINE('Case 11 : Blackout not started ' ||
-- ' Tgt - ' || all_tgs.target_name ||
-- ' Typ - ' || all_tgs.target_type ||
-- ' Avail - ' || l_last_avl_stat ||
-- ' Curr avail - ' || l_curr_avl_stat ||
-- ' blk stat - ' || l_blk_cnt);
NULL;
ELSIF ( (l_curr_avl_stat = 5) AND (l_last_avl_stat <> 5) ) THEN
-- DBMS_OUTPUT.PUT_LINE('Case 12 : Fix last avail ' ||
-- ' Tgt - ' || all_tgs.target_name ||
-- ' Typ - ' || all_tgs.target_type ||
-- ' Avail - ' || l_last_avl_stat ||
-- ' Curr avail - ' || l_curr_avl_stat ||
-- ' blk stat - ' || l_blk_cnt);
BEGIN
UPDATE mgmt_availability
SET current_status = 5
WHERE target_guid = all_tgs.target_guid
AND current_status = l_last_avl_stat
AND end_collection_timestamp IS NULL;
EXCEPTION
WHEN DUP_VAL_ON_INDEX THEN
-- Move the new record by 1 sec to fix the PK violation
UPDATE mgmt_availability
SET current_status = 5,
start_collection_timestamp = start_collection_timestamp + (1/(24*60*60))
WHERE target_guid = all_tgs.target_guid
AND current_status = l_last_avl_stat
AND end_collection_timestamp IS NULL;
END;
ELSIF ( (l_curr_avl_stat <> 5) AND (l_last_avl_stat = 5) ) THEN
-- DBMS_OUTPUT.PUT_LINE('Case 13 : Fix curr avail ' ||
-- ' Tgt - ' || all_tgs.target_name ||
-- ' Typ - ' || all_tgs.target_type ||
-- ' Avail - ' || l_last_avl_stat ||
-- ' Curr avail - ' || l_curr_avl_stat ||
-- ' blk stat - ' || l_blk_cnt);
UPDATE mgmt_current_availability
SET current_status = l_last_avl_stat
WHERE target_guid = all_tgs.target_guid;
ELSIF ( (l_curr_avl_stat = 5) AND (l_last_avl_stat = 5) ) THEN
-- Blackout and availability systems are in SYNC.
NULL;
END IF;
ELSE
-- No blackout
IF ( (l_curr_avl_stat = 5) AND (l_last_avl_stat = 5) ) THEN
-- Get the new status
OPEN avail_cursor(all_tgs.target_guid);
FETCH avail_cursor INTO l_new_status;
IF (avail_cursor%NOTFOUND) THEN
l_new_status := 6;
END IF;
CLOSE avail_cursor;
-- DBMS_OUTPUT.PUT_LINE('Case 21 : Fix last, curr avail. ' ||
-- ' Tgt - ' || all_tgs.target_name ||
-- ' Typ - ' || all_tgs.target_type ||
-- ' Avail - ' || l_last_avl_stat ||
-- ' Curr avail - ' || l_curr_avl_stat ||
-- ' New stat ' || l_new_status ||
-- ' blk stat - ' || l_blk_cnt);
UPDATE mgmt_current_availability
SET current_status = l_new_status
WHERE target_guid = all_tgs.target_guid;
BEGIN
UPDATE mgmt_availability
SET current_status = l_new_status
WHERE target_guid = all_tgs.target_guid
AND current_status = 5
AND end_collection_timestamp IS NULL;
EXCEPTION
WHEN DUP_VAL_ON_INDEX THEN
-- Move the new record by 1 sec to fix the PK violation
UPDATE mgmt_availability
SET current_status = l_curr_avl_stat,
start_collection_timestamp = start_collection_timestamp + (1/(24*60*60))
WHERE target_guid = all_tgs.target_guid
AND current_status = 5
AND end_collection_timestamp IS NULL;
END;
ELSIF ( (l_curr_avl_stat = 5) AND (l_last_avl_stat <> 5) ) THEN
-- DBMS_OUTPUT.PUT_LINE('Case 22 : Fix curr avail ' ||
-- ' Tgt - ' || all_tgs.target_guid ||
-- ' Typ - ' || all_tgs.target_type ||
-- ' Avail - ' || l_last_avl_stat ||
-- ' Curr avail - ' || l_curr_avl_stat ||
-- ' blk stat - ' || l_blk_cnt);
UPDATE mgmt_current_availability
SET current_status = l_last_avl_stat
WHERE target_guid = all_tgs.target_guid;
ELSIF ( (l_curr_avl_stat <> 5) AND (l_last_avl_stat = 5) ) THEN
-- DBMS_OUTPUT.PUT_LINE('Case 23 : Fix last avail ' ||
-- ' Tgt - ' || all_tgs.target_name ||
-- ' Typ - ' || all_tgs.target_type ||
-- ' Avail - ' || l_last_avl_stat ||
-- ' Curr avail - ' || l_curr_avl_stat ||
-- ' blk stat - ' || l_blk_cnt);
BEGIN
UPDATE mgmt_availability
SET current_status = l_curr_avl_stat
WHERE target_guid = all_tgs.target_guid
AND current_status = 5
AND end_collection_timestamp IS NULL;
EXCEPTION
WHEN DUP_VAL_ON_INDEX THEN
UPDATE mgmt_availability
SET current_status = l_curr_avl_stat,
start_collection_timestamp = start_collection_timestamp + (1/(24*60*60))
WHERE target_guid = all_tgs.target_guid
AND current_status = 5
AND end_collection_timestamp IS NULL;
END;
ELSE
-- Blackout and availability systems are in SYNC.
NULL;
END IF;
END IF;
END LOOP;
END;
/