Rem drv:
Rem
Rem $Header: severity_data_upgrade.sql 26-aug-2005.05:24:56 neearora Exp $
Rem
Rem severity_data_upgrade.sql
Rem
Rem Copyright (c) 2005, Oracle. All rights reserved.
Rem
Rem NAME
Rem severity_data_upgrade.sql -
Rem
Rem DESCRIPTION
Rem
Rem
Rem NOTES
Rem
Rem
Rem MODIFIED (MM/DD/YY)
Rem neearora 08/26/05 - Bug 4531777. Change the value of
Rem violation_duration from 0 to null
Rem jsadras 08/17/05 - Bug:4548286, fix null violation type
Rem gan 08/05/05 - add paramter for repo sev
Rem chyu 07/18/05 - adding the upgrade header
Rem jsadras 07/16/05 - jsadras_bug-4339821
Rem jsadras 07/14/05 - Add cfg columns data upgrade
Rem
DECLARE
TYPE rowidtab IS TABLE OF ROWID INDEX BY BINARY_INTEGER ;
TYPE varchartab IS TABLE OF VARCHAR2(256) INDEX BY BINARY_INTEGER ;
l_rowids rowidtab ;
l_coll_names varchartab ;
-- get violations which had matching key configuration
-- note in 10.1 only direct equals was allowed, no wild card specs
CURSOR matched_keys_cur IS
SELECT curr_viol.rowid,
cfg.coll_name
FROM mgmt_current_violation curr_viol,
mgmt_policy_assoc_cfg_params cfg
WHERE curr_viol.target_guid = cfg.object_guid
AND curr_viol.policy_guid = cfg.policy_guid
AND curr_viol.key_value = cfg.key_value
AND curr_viol.cfg_key_value IS NULL ;
-- get all other violations which did not have matching configuration
-- cfg_key_value is not null ensures we skip all rows updated by matched keys
CURSOR blank_matched_cur IS
SELECT curr_viol.rowid,
cfg.coll_name
FROM mgmt_current_violation curr_viol,
mgmt_policy_assoc_cfg_params cfg
WHERE curr_viol.target_guid = cfg.object_guid
AND curr_viol.policy_guid = cfg.policy_guid
AND cfg.key_value = ' '
AND cfg.key_operator = 0
AND curr_viol.cfg_key_value IS NOT NULL ;
l_commit_frequency NUMBER ;
BEGIN
BEGIN
SELECT parameter_value
INTO l_commit_frequency
FROM mgmt_parameters
WHERE parameter_name = 'upgrade.upgrade_severities_batch_size' ;
EXCEPTION
WHEN NO_DATA_FOUND THEN
l_commit_frequency := 10000 ;
END ;
-- Update all keys which had matching key configuration
OPEN matched_keys_cur ;
LOOP
FETCH matched_keys_cur
BULK COLLECT INTO l_rowids,l_coll_names
LIMIT l_commit_frequency ;
EXIT WHEN matched_keys_cur%NOTFOUND ;
FORALL i IN l_rowids.FIRST..l_rowids.LAST
UPDATE mgmt_current_violation
SET cfg_coll_name = l_coll_names(i),
cfg_key_value = key_value,
cfg_key_operator = 0
WHERE rowid = l_rowids(i) ;
COMMIT ;
EXIT WHEN l_rowids.COUNT < l_commit_frequency ;
END LOOP ;
CLOSE matched_keys_cur ;
-- update all keys for all else case
OPEN blank_matched_cur ;
LOOP
FETCH blank_matched_cur
BULK COLLECT INTO l_rowids,l_coll_names
LIMIT l_commit_frequency ;
EXIT WHEN blank_matched_cur%NOTFOUND ;
FORALL i IN l_rowids.FIRST..l_rowids.LAST
UPDATE mgmt_current_violation
SET cfg_coll_name = l_coll_names(i),
cfg_key_value = ' ',
cfg_key_operator = 0
WHERE rowid = l_rowids(i) ;
COMMIT ;
EXIT WHEN l_rowids.COUNT < l_commit_frequency ;
END LOOP ;
CLOSE blank_matched_cur ;
END ;
/
--
-- if there are any violations in which do not have violation type
-- set them to 0. They are annotation records
--
BEGIN
UPDATE mgmt_violations
SET violation_guid = NVL(violation_guid,SYS_GUID()),
violation_type = 0
WHERE violation_type IS NULL ;
COMMIT ;
END ;
/
show errors;
-- insert REPO_SEV_ENABLE_OPT into mgmt_parameters table
BEGIN
INSERT into mgmt_parameters (parameter_name, parameter_value, parameter_comment,
internal_flag)
VALUES('REPO_SEV_ENABLE_OPT', '1', 'Enable (1) repository target severity calculation optimization', 1);
COMMIT;
EXCEPTION
WHEN DUP_VAL_ON_INDEX THEN
NULL;
END;
/
show errors;
DECLARE
type rawtab IS TABLE OF RAW(16) index by binary_integer ;
l_viol_guids rawtab ;
l_commit_frequency NUMBER := 50000 ;
l_viol_counter NUMBER := 0;
l_prev_target_guid mgmt_violations.target_guid%TYPE := '0000000000000000';
l_prev_policy_guid mgmt_violations.policy_guid%TYPE := '0000000000000000';
l_prev_key_value mgmt_violations.key_value%TYPE := '0000000000000000';
CURSOR avail_violations_cur IS
SELECT target_guid,policy_guid, key_value, collection_timestamp,violation_guid
FROM mgmt_violations
WHERE violation_duration=0
ORDER BY target_guid,policy_guid, key_value, collection_timestamp DESC;
BEGIN
BEGIN
SELECT parameter_value
INTO l_commit_frequency
FROM mgmt_parameters
WHERE parameter_name = 'viol_duration_upgrade_batchsize' ;
EXCEPTION
WHEN NO_DATA_FOUND THEN
l_commit_frequency := 50000 ;
END ;
FOR cur_viol in avail_violations_cur LOOP
IF(NOT (cur_viol.target_guid = l_prev_target_guid AND
cur_viol.policy_guid = l_prev_policy_guid AND
cur_viol.key_value = l_prev_key_value))
THEN
l_viol_counter := l_viol_counter + 1;
l_viol_guids(l_viol_counter) := cur_viol.violation_guid;
END IF;
l_prev_target_guid := cur_viol.target_guid;
l_prev_policy_guid := cur_viol.policy_guid;
l_prev_key_value := cur_viol.key_value;
IF(l_viol_counter = l_commit_frequency) THEN
FORALL i IN l_viol_guids.FIRST..l_viol_guids.LAST
UPDATE mgmt_violations
SET violation_duration = null
WHERE violation_guid = l_viol_guids(i);
COMMIT;
l_viol_guids.DELETE; -- Clear the temporary row guid list.
l_viol_counter := 0;
END IF;
END LOOP;
IF(l_viol_counter > 0) THEN
FORALL i IN l_viol_guids.FIRST..l_viol_guids.LAST
UPDATE mgmt_violations
SET violation_duration = null
WHERE violation_guid = l_viol_guids(i);
COMMIT;
END IF;
END;
/
show errors;