125 lines
5.5 KiB
MySQL
125 lines
5.5 KiB
MySQL
|
|
---------------------------------------------------------------------------------------
|
||
|
|
--
|
||
|
|
-- disable baselines on this sql if metadata is corrupt (ORA-13831)
|
||
|
|
--
|
||
|
|
DECLARE
|
||
|
|
l_plans INTEGER;
|
||
|
|
l_plans_t INTEGER := 0;
|
||
|
|
l_description VARCHAR2(500);
|
||
|
|
BEGIN
|
||
|
|
FOR i IN (SELECT t.sql_handle,
|
||
|
|
o.name plan_name,
|
||
|
|
a.description
|
||
|
|
FROM sqlobj$plan p,
|
||
|
|
sqlobj$ o,
|
||
|
|
sqlobj$auxdata a,
|
||
|
|
sql$text t
|
||
|
|
WHERE p.signature = :cs_signature
|
||
|
|
AND p.obj_type = 2 /* 1=profile, 2=baseline, 3=patch */
|
||
|
|
AND p.id = 1
|
||
|
|
AND p.other_xml IS NOT NULL
|
||
|
|
-- plan_hash_value ignoring transient object names (must be same than plan_id for a baseline to be used)
|
||
|
|
AND p.plan_id <> TO_NUMBER(extractvalue(xmltype(p.other_xml),'/*/info[@type = "plan_hash_2"]'))
|
||
|
|
AND o.obj_type = 2 /* 1=profile, 2=baseline, 3=patch */
|
||
|
|
AND o.signature = p.signature
|
||
|
|
AND o.plan_id = p.plan_id
|
||
|
|
AND BITAND(o.flags, 1) = 1 /* enabled */
|
||
|
|
AND a.obj_type = 2 /* 1=profile, 2=baseline, 3=patch */
|
||
|
|
AND a.signature = p.signature
|
||
|
|
AND a.plan_id = p.plan_id
|
||
|
|
AND a.created > TO_DATE('&&creation_time.', '&&cs_datetime_full_format.') - 1/1440
|
||
|
|
AND t.signature = p.signature
|
||
|
|
ORDER BY
|
||
|
|
t.sql_handle,
|
||
|
|
o.name)
|
||
|
|
LOOP
|
||
|
|
l_plans := DBMS_SPM.alter_sql_plan_baseline(sql_handle => i.sql_handle, plan_name => i.plan_name, attribute_name => 'ENABLED', attribute_value => 'NO');
|
||
|
|
l_description := TRIM(i.description||' cs_spbl_create.sql ORA-13831 DISABLED='||TO_CHAR(SYSDATE, '&&cs_datetime_full_format.'));
|
||
|
|
DBMS_OUTPUT.put_line('disable baseline since metadata is corrupt (ORA-13831): '||i.sql_handle||' '||i.plan_name||' '||l_description);
|
||
|
|
l_plans := DBMS_SPM.alter_sql_plan_baseline(sql_handle => i.sql_handle, plan_name => i.plan_name, attribute_name => 'DESCRIPTION', attribute_value => l_description);
|
||
|
|
l_plans_t := l_plans_t + l_plans;
|
||
|
|
END LOOP;
|
||
|
|
END;
|
||
|
|
/
|
||
|
|
--
|
||
|
|
---------------------------------------------------------------------------------------
|
||
|
|
--
|
||
|
|
-- disable baselines on this sql if metadata is corrupt (ORA-06512)
|
||
|
|
--
|
||
|
|
DECLARE
|
||
|
|
l_plans INTEGER;
|
||
|
|
l_plans_t INTEGER := 0;
|
||
|
|
l_description VARCHAR2(500);
|
||
|
|
BEGIN
|
||
|
|
FOR i IN (SELECT t.sql_handle,
|
||
|
|
o.name plan_name,
|
||
|
|
a.description
|
||
|
|
FROM sys.sqlobj$ o,
|
||
|
|
sys.sql$text t,
|
||
|
|
sys.sqlobj$auxdata a
|
||
|
|
WHERE o.signature = :cs_signature
|
||
|
|
AND o.obj_type = 2 /* 1=profile, 2=baseline, 3=patch */
|
||
|
|
AND BITAND(o.flags, 1) = 1 /* enabled */
|
||
|
|
AND t.signature = o.signature
|
||
|
|
AND a.obj_type = o.obj_type
|
||
|
|
AND a.signature = o.signature
|
||
|
|
AND a.plan_id = o.plan_id
|
||
|
|
AND a.created > TO_DATE('&&creation_time.', '&&cs_datetime_full_format.') - 1/1440
|
||
|
|
AND NOT EXISTS
|
||
|
|
( SELECT NULL
|
||
|
|
FROM sys.sqlobj$plan p
|
||
|
|
WHERE p.signature = o.signature
|
||
|
|
AND p.obj_type = o.obj_type
|
||
|
|
AND p.plan_id = o.plan_id
|
||
|
|
)
|
||
|
|
ORDER BY
|
||
|
|
o.plan_id)
|
||
|
|
LOOP
|
||
|
|
l_plans := DBMS_SPM.alter_sql_plan_baseline(sql_handle => i.sql_handle, plan_name => i.plan_name, attribute_name => 'ENABLED', attribute_value => 'NO');
|
||
|
|
l_description := i.description||' cs_spbl_create.sql ORA-06512 DISABLED='||TO_CHAR(SYSDATE, '&&cs_datetime_full_format.');
|
||
|
|
DBMS_OUTPUT.put_line('disable baseline since metadata is corrupt (ORA-06512): '||i.sql_handle||' '||i.plan_name||' '||l_description);
|
||
|
|
l_plans := DBMS_SPM.alter_sql_plan_baseline(sql_handle => i.sql_handle, plan_name => i.plan_name, attribute_name => 'DESCRIPTION', attribute_value => l_description);
|
||
|
|
l_plans_t := l_plans_t + l_plans;
|
||
|
|
END LOOP;
|
||
|
|
END;
|
||
|
|
/
|
||
|
|
--
|
||
|
|
---------------------------------------------------------------------------------------
|
||
|
|
--
|
||
|
|
-- fix Corrupt Baseline (DBPERF-6822)
|
||
|
|
--
|
||
|
|
MERGE INTO sys.sqlobj$plan t
|
||
|
|
USING (SELECT o.signature,
|
||
|
|
o.category,
|
||
|
|
o.obj_type,
|
||
|
|
o.plan_id,
|
||
|
|
1 AS id
|
||
|
|
FROM sys.sqlobj$ o
|
||
|
|
WHERE o.category = 'DEFAULT'
|
||
|
|
AND o.obj_type = 2
|
||
|
|
AND o.signature = :cs_signature
|
||
|
|
AND NOT EXISTS (
|
||
|
|
SELECT NULL
|
||
|
|
FROM sys.sqlobj$plan p
|
||
|
|
WHERE p.signature = o.signature
|
||
|
|
AND p.category = o.category
|
||
|
|
AND p.obj_type = o.obj_type
|
||
|
|
AND p.plan_id = o.plan_id
|
||
|
|
AND p.id = 1
|
||
|
|
)
|
||
|
|
AND NOT EXISTS (
|
||
|
|
SELECT NULL
|
||
|
|
FROM sys.sqlobj$data d
|
||
|
|
WHERE d.signature = o.signature
|
||
|
|
AND d.category = o.category
|
||
|
|
AND d.obj_type = o.obj_type
|
||
|
|
AND d.plan_id = o.plan_id
|
||
|
|
AND d.comp_data IS NOT NULL
|
||
|
|
)) s
|
||
|
|
ON (t.signature = s.signature AND t.category = s.category AND t.obj_type = s.obj_type AND t.plan_id = s.plan_id AND t.id = s.id)
|
||
|
|
WHEN NOT MATCHED THEN
|
||
|
|
INSERT (signature, category, obj_type, plan_id, id)
|
||
|
|
VALUES (s.signature, s.category, s.obj_type, s.plan_id, s.id)
|
||
|
|
/
|
||
|
|
COMMIT
|
||
|
|
/
|