Rem Rem $Header: rdbms/admin/xdbes111.sql /st_rdbms_11.2.0/1 2011/07/31 10:32:40 juding Exp $ Rem Rem xdbes111.sql Rem Rem Copyright (c) 2007, 2011, Oracle and/or its affiliates. Rem All rights reserved. Rem Rem NAME Rem xdbes111.sql - XDB Schema Downgrade Rem Rem DESCRIPTION Rem This script downgrades XDB schemas to 11.1 Rem Rem NOTES Rem It is invoked from the top-level XDB downgrade script (xdbe111.sql) Rem and from the 10.2 schema downgrade script (xdbes102.sql) Rem Rem MODIFIED (MM/DD/YY) Rem vhosur 03/04/10 - Downgrade changes for Conatiner mutable Rem spetride 07/30/09 - downgrade config for localApplicationGroupStore Rem samane 05/28/09 - drop xdb.XDB_PITRIG_PKG_01 (security fixes) Rem spetride 05/08/09 - downgrade XMLIndexMethods Rem spetride 02/16/09 - downgrade for Expire headers in xdbconfig Rem badeoti 03/02/09 - downgrade respond-with-server-info in httpcfg Rem atabar 02/03/09 - xdbconfig downgrade: default-type-mappings Rem spetride 02/02/09 - downgrade for realm under httpconfig Rem spetride 06/11/08 - downgrade XDBCONFIG schema 11.2 to 11.1 Rem spetride 06/11/08 - downgrade ACL schema 11.2 to 11.1 Rem badeoti 05/07/08 - manual downgrade of xdbrescfg schema, Rem rescfg SGA cache unable to build with copyEvolve Rem attran 04/15/08 - De-support partitioning of XMLIndex Rem bhammers 03/19/08 - add downgrade for XML Index Rem yifeng 01/29/08 - lrg 3272185: delete the old resconfig schema from Rem xdb$schema after copyevolve Rem yifeng 12/10/07 - downgrade xdbrescfg schema Rem rburns 11/06/07 - add XDB schema 11.1 downgrade Rem rburns 11/06/07 - Created Rem Rem ================================================================ Rem BEGIN XDB Schema downgrade to 11.2.0 Rem ================================================================ -- uncomment for next release --@@xdbes121.sql @@xdbes112.sql Rem ================================================================ Rem END XDB Schema downgrade to 11.2.0 Rem ================================================================ Rem ================================================================ Rem BEGIN XDB Schema downgrade to 11.1.0 Rem ================================================================ Rem Load upgrade utilities functions @@xdbuuc4.sql Rem Drop xlink-config/pre-condition property from XDB resource config schema declare seq_ref REF XMLTYPE; elem_arr XDB.XDB$XMLTYPE_REF_LIST_T; attr_arr XDB.XDB$XMLTYPE_REF_LIST_T; config_schema_url VARCHAR2(100); config_schema_ref REF XMLTYPE; numb number(38) := 0; elem_propno number(38); last_elem_name varchar2(100); anypart varchar2(4000); appinf XDB.XDB$APPINFO_LIST_T; currAppinf XDB.XDB$APPINFO_T; begin config_schema_url := 'http://xmlns.oracle.com/xdb/XDBResConfig.xsd'; select ref(s) into config_schema_ref from xdb.xdb$schema s where s.xmldata.schema_url = config_schema_url; select c.xmldata.sequence_kid into seq_ref from xdb.xdb$complex_type c where c.xmldata.name = 'xlink-config' and c.xmldata.parent_schema = config_schema_ref; -- Get a list of all elements in this sequence select m.xmldata.elements into elem_arr from xdb.xdb$sequence_model m where ref(m) = seq_ref; -- determine position of pre-condition element numb := elem_arr.last; while numb <> 0 loop select e.xmldata.property.name into last_elem_name from xdb.xdb$element e where ref(e) = elem_arr(numb); if last_elem_name = 'pre-condition' then dbms_output.put_line('downgrading rescfg:xlink-config'); -- save prop number select e.xmldata.property.prop_number into elem_propno from xdb.xdb$element e where ref(e) = elem_arr(numb); delete_elem_by_ref(elem_arr(numb)); EXIT; end if; numb := numb - 1; end loop; -- only update if pre-condition element was found if numb > 0 then -- splice off pre-condition element while numb < elem_arr.last loop elem_arr(numb) := elem_arr(numb + 1); numb := numb + 1; end loop; elem_arr.trim(1); -- update child element sequence for the xlink-config complex type update xdb.xdb$sequence_model m set m.xmldata.elements = elem_arr, m.xmldata.sys_xdbpd$ = XDB.XDB$RAW_LIST_T('230200000081800307') where ref(m) = seq_ref; -- edit annotation kidlist, we assume only 1 kidlist in 11.1.0.6, might change in 11.1.0.7+ -- construct kidlist from element and attribute lists anypart := ''; for i in 1..elem_arr.last loop select e.xmldata.property.prop_number into elem_propno from xdb.xdb$element e where ref(e) = elem_arr(i); anypart := anypart || chr(10) || ' '; end loop; select c.xmldata.attributes into attr_arr from xdb.xdb$complex_type c where c.xmldata.name = 'xlink-config' and c.xmldata.parent_schema = config_schema_ref; for i in 1..attr_arr.last loop select e.xmldata.prop_number into elem_propno from xdb.xdb$attribute e where ref(e) = attr_arr(i); anypart := anypart || chr(10) || ' '; end loop; anypart := anypart || chr(10) || ''; update xdb.xdb$complex_type c set c.xmldata.annotation.appinfo = XDB.XDB$APPINFO_LIST_T(XDB.XDB$APPINFO_T(XDB.XDB$RAW_LIST_T('1301000000'), anypart, NULL)) where c.xmldata.parent_schema = config_schema_ref and c.xmldata.name = 'xlink-config'; -- no need to alter type since this is not an object type end if; commit; end; / -- downgrade to 11.1 ACL schema: remove 'ApplicationName' principal format declare schema_url VARCHAR2(700) := 'http://xmlns.oracle.com/xdb/acl.xsd'; refs REF SYS.XMLTYPE; aceattrs XDB.XDB$XMLTYPE_REF_LIST_T; i NUMBER; nm VARCHAR2(256); aceattr REF SYS.XMLTYPE; begin select ref(s) into refs from xdb.xdb$schema s where s.xmldata.schema_url = schema_url; -- find the list of attributes for the ace's complex type select c.xmldata.attributes into aceattrs from xdb.xdb$complex_type c, xdb.xdb$element e, xdb.xdb$schema s where ref(s) = refs and e.xmldata.property.parent_schema = refs and e.xmldata.property.name ='ace' and e.xmldata.cplx_type_decl = ref(c); for i in 1..aceattrs.last loop select a.xmldata.name into nm from xdb.xdb$attribute a where ref(a)=aceattrs(i); if (nm = 'principalFormat') then -- update the simple type for principalFormat update xdb.xdb$simple_type s set s.xmldata.sys_xdbpd$ = XDB.XDB$RAW_LIST_T('23020000000106'), s.xmldata.restriction = XDB.XDB$SIMPLE_DERIVATION_T(XDB.XDB$RAW_LIST_T('330008020000118B8004'), NULL, XDB.XDB$QNAME('00', 'string'), NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, XDB.XDB$FACET_LIST_T(XDB.XDB$FACET_T(XDB.XDB$RAW_LIST_T('130200000102'), NULL, 'ShortName', '00', NULL), XDB.XDB$FACET_T(XDB.XDB$RAW_LIST_T('130200000102'), NULL, 'DistinguishedName', '00', NULL), XDB.XDB$FACET_T(XDB.XDB$RAW_LIST_T('130200000102'), NULL, 'GUID', '00', NULL), XDB.XDB$FACET_T(XDB.XDB$RAW_LIST_T('130200000102'), NULL, 'XSName', '00', NULL)), NULL, NULL) where ref(s) = (select a.xmldata.smpl_type_decl from xdb.xdb$attribute a where ref(a)=aceattrs(i)); exit; end if; end loop; commit; end; / ------------------------------------------------------------- -- start downgrading xdbconfig for localApplicationGroupStore ------------------------------------------------------------- create or replace procedure downgradeConfigGroupStore as isfound BOOLEAN; confsch_ref REF SYS.XMLTYPE; simpletype_ref REF SYS.XMLTYPE; elem_ref REF SYS.XMLTYPE; cplx_ref REF SYS.XMLTYPE; seq_ref REF SYS.XMLTYPE; seq_elems XDB.XDB$XMLTYPE_REF_LIST_T; elem_propnum NUMBER(38); propnum NUMBER(38); NUM_PROPS CONSTANT INTEGER := 203; --prop_num after downgrade confsch_url VARCHAR2(700) := 'http://xmlns.oracle.com/xdb/xdbconfig.xsd'; anypart VARCHAR2(4000); i NUMBER(38); numprops NUMBER(38); begin -- ref for xdbconfig schema select ref(s) into confsch_ref from xdb.xdb$schema s where s.xmldata.schema_url = confsch_url; -- num_props select s.xmldata.num_props into numprops from xdb.xdb$schema s where s.xmldata.schema_url = confsch_url; -- already downgraded? if (numprops <= NUM_PROPS) then dbms_output.put_line('xdbconfig schema already downgraded'); return; end if; -- ref and prop num for the default-type-mappings element select ref(e), e.xmldata.property.prop_number into elem_ref, elem_propnum from xdb.xdb$element e where e.xmldata.property.name='localApplicationGroupStore' and e.xmldata.property.parent_schema = confsch_ref; -- ref to the sysconfig element and its type select e.xmldata.cplx_type_decl into cplx_ref from xdb.xdb$element e where e.xmldata.property.name='sysconfig' and e.xmldata.property.parent_schema = confsch_ref; -- ref to the sequence kid in the complex type for sysconfig select c.xmldata.sequence_kid into seq_ref from xdb.xdb$complex_type c where ref(c) = cplx_ref; -- elements in the sequence select m.xmldata.elements into seq_elems from xdb.xdb$sequence_model m where ref(m)= seq_ref; -- update annotation for the complex type declaration for sysconfig -- (remove reference to default-type-mappings) isfound := FALSE; anypart := ''; for i in 1..seq_elems.last loop select e.xmldata.property.prop_number into propnum from xdb.xdb$element e where ref(e) = seq_elems(i); if (not (isfound)) then if (propnum != elem_propnum) then anypart := anypart || chr(10) || ' '; else isfound := TRUE; end if; else -- shift left anypart := anypart || chr(10) || ' '; seq_elems(i-1) := seq_elems(i); end if; end loop; anypart := anypart || chr(10) || ''; seq_elems.trim(1); update xdb.xdb$complex_type c set c.xmldata.annotation.appinfo = XDB.XDB$APPINFO_LIST_T(XDB.XDB$APPINFO_T(XDB.XDB$RAW_LIST_T('1301000000'), anypart, NULL)) where c.xmldata.parent_schema = confsch_ref and ref(c) = cplx_ref; -- update elements and PD for seq kid of sysconfig update xdb.xdb$sequence_model m set m.xmldata.elements = seq_elems, m.xmldata.sys_xdbpd$ = XDB.XDB$RAW_LIST_T('23020002000200182067656E65726963205844422070726F7065727469657320020E1E2070726F746F636F6C2073706563696669632070726F706572746965732081801B0') where ref(m)= seq_ref; -- update num_props for schema update xdb.xdb$schema s set s.xmldata.num_props = NUM_PROPS where s.xmldata.schema_url = confsch_url; -- remove the default-type-mappings element delete from xdb.xdb$element e where ref(e) = elem_ref; commit; end; / show errors; exec downgradeConfigGroupStore; -- clean up drop procedure downgradeConfigGroupStore; -------------------------------------------------- -- end downgrading xdbconfig localApplicationGroupStore -------------------------------------------------- ---------------------------------------------------- -- start downgrading xdbconfig for Expire Headers ---------------------------------------------------- create or replace procedure downgradeConfigForExpire as schema_url VARCHAR2(700) := 'http://xmlns.oracle.com/xdb/xdbconfig.xsd'; refs REF SYS.XMLTYPE; idem NUMBER := 0; numprops NUMBER(38); CONFIG_PRPONUMS_NOEXP CONSTANT INTEGER := 199; exppatnum NUMBER(38); exppatelem REF SYS.XMLTYPE; expdeftype REF SYS.XMLTYPE; expdefnum NUMBER(38); expdefelem REF SYS.XMLTYPE; skidexpmap XDB.XDB$XMLTYPE_REF_LIST_T; refskidmap REF SYS.XMLTYPE; anypart VARCHAR2(4000); i NUMBER; expmaptype REF SYS.XMLTYPE; expmapnum NUMBER(38); expmapelem REF SYS.XMLTYPE; skidexp XDB.XDB$XMLTYPE_REF_LIST_T; refskidexp REF SYS.XMLTYPE; exptype REF SYS.XMLTYPE; expnum NUMBER(38); expelem REF SYS.XMLTYPE; refhttptype REF SYS.XMLTYPE; refskidhttp REF SYS.XMLTYPE; skidhttpelems XDB.XDB$XMLTYPE_REF_LIST_T; elem_propno NUMBER(38); clistinsch XDB.XDB$XMLTYPE_REF_LIST_T; isfound BOOLEAN := FALSE; typenm VARCHAR2(256); begin select ref(s) into refs from xdb.xdb$schema s where s.xmldata.schema_url = schema_url; select s.xmldata.num_props into numprops from xdb.xdb$schema s where s.xmldata.schema_url = schema_url; -- if at least one of the expire elements or types do not exist, -- then this is a rerun, so return select count(*) into idem from xdb.xdb$complex_type c where c.xmldata.name='expire-type' and c.xmldata.parent_schema=refs; if (idem < 1) then dbms_output.put_line('xdbconfig schema already downgraded for expire headers'); return; end if; -- get a ref to the expire-pattern element select ref(e) into exppatelem from xdb.xdb$element e where e.xmldata.property.name='expire-pattern' and e.xmldata.property.parent_schema=refs; dbms_output.put_line('1. got ref to expire-pattern'); -- get refs to the expire-default element and its simple type select ref(e), e.xmldata.property.smpl_type_decl into expdefelem, expdeftype from xdb.xdb$element e where e.xmldata.property.name='expire-default' and e.xmldata.property.parent_schema=refs; dbms_output.put_line('2. got refs for expire-default and its type'); -- get refs to expire-mapping element, its type and the sequence kid select ref(e), e.xmldata.cplx_type_decl, c.xmldata.sequence_kid into expmapelem, expmaptype, refskidmap from xdb.xdb$element e, xdb.xdb$complex_type c where e.xmldata.property.name='expire-mapping' and e.xmldata.property.parent_schema=refs and e.xmldata.cplx_type_decl = ref(c); dbms_output.put_line('3. got refs to expire-mapping, its type and sequence kid'); -- get refs to expire element, expire-type and its sequence kid, and propnum for expire select ref(e), e.xmldata.property.prop_number into expelem, expnum from xdb.xdb$element e where e.xmldata.property.name='expire' and e.xmldata.property.parent_schema=refs; select ref(c), c.xmldata.sequence_kid into exptype, refskidexp from xdb.xdb$complex_type c where c.xmldata.name='expire-type' and c.xmldata.parent_schema = refs; dbms_output.put_line('4. gor refs to expire element, its type and sequence-kid'); -- update elements and PD for seq kid of httpconfig, update annotation select e.xmldata.cplx_type_decl into refhttptype from xdb.xdb$element e where e.xmldata.property.name ='httpconfig' and e.xmldata.property.parent_schema = refs; select c.xmldata.sequence_kid into refskidhttp from xdb.xdb$complex_type c where ref(c) = refhttptype; select m.xmldata.elements into skidhttpelems from xdb.xdb$sequence_model m where ref(m)= refskidhttp; anypart := ''; for i in 1..skidhttpelems.last loop select e.xmldata.property.prop_number into elem_propno from xdb.xdb$element e where ref(e) = skidhttpelems(i); if (not (isfound)) then if (elem_propno != expnum) then anypart := anypart || chr(10) || ' '; else isfound := TRUE; end if; else -- shift left anypart := anypart || chr(10) || ' '; skidhttpelems(i-1) := skidhttpelems(i); end if; end loop; anypart := anypart || chr(10) || ''; skidhttpelems.trim(1); update xdb.xdb$complex_type c set c.xmldata.annotation = XDB.XDB$ANNOTATION_T(XDB.XDB$RAW_LIST_T('1301000000'), XDB.XDB$APPINFO_LIST_T(XDB.XDB$APPINFO_T(XDB.XDB$RAW_LIST_T('1301000000'), anypart, NULL) ), NULL) where c.xmldata.parent_schema = refs and ref(c)=refhttptype; dbms_output.put_line('5. updated annotation for httpconfig type'); update xdb.xdb$sequence_model m set m.xmldata.elements = skidhttpelems, m.xmldata.sys_xdbpd$ = XDB.XDB$RAW_LIST_T('230200000081801607') where ref(m)= refskidhttp; dbms_output.put_line('6. updated sequence kid and pd for httpconfig'); commit; -- remove expire-type from complex_types list in schema select s.xmldata.complex_types into clistinsch from xdb.xdb$schema s where s.xmldata.schema_url = schema_url; isfound := FALSE; for i in 1..clistinsch.last loop select c.xmldata.name into typenm from xdb.xdb$complex_type c where ref(c) = clistinsch(i); if (not (isfound)) then if (typenm = 'expire-type') then isfound := TRUE; end if; else -- shift left clistinsch(i-1) := clistinsch(i); end if; end loop; clistinsch.trim(1); dbms_output.put_line('7. removed expire-type from schema type list'); -- update PD and num props for schema update xdb.xdb$schema s set s.xmldata.complex_types = clistinsch, s.xmldata.sys_xdbpd$ = XDB.XDB$RAW_LIST_T('43163C8600050084010084020184030202081820637573746F6D697A6564206572726F7220706167657320020A3E20706172616D6574657220666F72206120736572766C65743A206E616D652C2076616C7565207061697220616E642061206465736372697074696F6E20200B0C110482800B818002828003131416120A170D'), s.xmldata.num_props = CONFIG_PRPONUMS_NOEXP where s.xmldata.schema_url = schema_url; dbms_output.put_line('8. updated pd$ and num props fro schema'); commit; -- now to the cleanup delete from xdb.xdb$element e where ref(e)=expelem; delete from xdb.xdb$complex_type c where ref(c)=exptype; delete from xdb.xdb$sequence_model m where ref(m)=refskidexp; dbms_output.put_line('9. cleanup for expire element'); delete from xdb.xdb$element e where ref(e)=expmapelem; delete from xdb.xdb$complex_type c where ref(c)=expmaptype; delete from xdb.xdb$sequence_model m where ref(m)=refskidmap; dbms_output.put_line('10. cleanup for expire-mapping element'); delete from xdb.xdb$element e where ref(e)=expdefelem; delete from xdb.xdb$simple_type st where ref(st)=expdeftype; dbms_output.put_line('11. cleanup for expire-default element'); delete from xdb.xdb$element e where ref(e)=exppatelem; dbms_output.put_line('12. cleanup for expire-pattern element'); commit; end; / show errors; exec downgradeConfigForExpire; -- clean-up drop procedure downgradeConfigForExpire; ---------------------------------------------------- -- start downgrading xdbconfig default-type-mappings ---------------------------------------------------- -- removing element /sysconfig/default-type-mappings -- Note: Downgrading more sysconfig elements should come after this -- procedure. -- Please be careful about num_props and PD changes after -- this procedure execution. create or replace procedure downgradeConfigDTM as isfound BOOLEAN; confsch_ref REF SYS.XMLTYPE; simpletype_ref REF SYS.XMLTYPE; elem_ref REF SYS.XMLTYPE; cplx_ref REF SYS.XMLTYPE; seq_ref REF SYS.XMLTYPE; seq_elems XDB.XDB$XMLTYPE_REF_LIST_T; elem_propnum NUMBER(38); propnum NUMBER(38); NUM_PROPS CONSTANT INTEGER := 198; --prop_num after downgrade confsch_url VARCHAR2(700) := 'http://xmlns.oracle.com/xdb/xdbconfig.xsd'; anypart VARCHAR2(4000); i NUMBER(38); numprops NUMBER(38); begin -- ref for xdbconfig schema select ref(s) into confsch_ref from xdb.xdb$schema s where s.xmldata.schema_url = confsch_url; -- num_props select s.xmldata.num_props into numprops from xdb.xdb$schema s where s.xmldata.schema_url = confsch_url; -- already downgraded? if (numprops <= NUM_PROPS) then dbms_output.put_line('xdbconfig schema already downgraded'); return; end if; -- ref and prop num for the default-type-mappings element select ref(e), e.xmldata.property.prop_number, e.xmldata.property.smpl_type_decl into elem_ref, elem_propnum, simpletype_ref from xdb.xdb$element e where e.xmldata.property.name='default-type-mappings' and e.xmldata.property.parent_schema = confsch_ref; -- ref to the sysconfig element and its type select e.xmldata.cplx_type_decl into cplx_ref from xdb.xdb$element e where e.xmldata.property.name='sysconfig' and e.xmldata.property.parent_schema = confsch_ref; -- ref to the sequence kid in the complex type for sysconfig select c.xmldata.sequence_kid into seq_ref from xdb.xdb$complex_type c where ref(c) = cplx_ref; -- elements in the sequence select m.xmldata.elements into seq_elems from xdb.xdb$sequence_model m where ref(m)= seq_ref; -- update annotation for the complex type declaration for sysconfig -- (remove reference to default-type-mappings) isfound := FALSE; anypart := ''; for i in 1..seq_elems.last loop select e.xmldata.property.prop_number into propnum from xdb.xdb$element e where ref(e) = seq_elems(i); if (not (isfound)) then if (propnum != elem_propnum) then anypart := anypart || chr(10) || ' '; else isfound := TRUE; end if; else -- shift left anypart := anypart || chr(10) || ' '; seq_elems(i-1) := seq_elems(i); end if; end loop; anypart := anypart || chr(10) || ''; seq_elems.trim(1); update xdb.xdb$complex_type c set c.xmldata.annotation.appinfo = XDB.XDB$APPINFO_LIST_T(XDB.XDB$APPINFO_T(XDB.XDB$RAW_LIST_T('1301000000'), anypart, NULL)) where c.xmldata.parent_schema = confsch_ref and ref(c) = cplx_ref; -- update elements and PD for seq kid of sysconfig update xdb.xdb$sequence_model m set m.xmldata.elements = seq_elems, m.xmldata.sys_xdbpd$ = XDB.XDB$RAW_LIST_T('23020002000200182067656E65726963205844422070726F7065727469657320020E1E2070726F746F636F6C2073706563696669632070726F706572746965732081801A07') where ref(m)= seq_ref; -- update num_props for schema update xdb.xdb$schema s set s.xmldata.num_props = NUM_PROPS where s.xmldata.schema_url = confsch_url; -- remove the default-type-mappings element delete from xdb.xdb$element e where ref(e) = elem_ref; -- remove annonymous simple type delete from xdb.xdb$simple_type st where ref(st) = simpletype_ref; commit; end; / show errors; exec downgradeConfigDTM; -- clean up drop procedure downgradeConfigDTM; -------------------------------------------------- -- end downgrading xdbconfig default-type-mappings -------------------------------------------------- -- downgrade to 11.1 CONFIG schema -- this is the downgrade for custom authentication and trust, -- as well as the 'realm' element under httpconfig create or replace procedure downgradeConfig as schema_url VARCHAR2(700) := 'http://xmlns.oracle.com/xdb/xdbconfig.xsd'; refs REF SYS.XMLTYPE; idem NUMBER := 0; CONFIG_PRPONUMS_DOWN CONSTANT INTEGER := 171; numprops NUMBER(38); refauthpat REF SYS.XMLTYPE; authpatnum NUMBER(38); refauthname1 REF SYS.XMLTYPE; authnamenum1 NUMBER(38); refskidmap REF SYS.XMLTYPE; anypart VARCHAR2(4000); i NUMBER(38); refmaptype REF SYS.XMLTYPE; refmap REF SYS.XMLTYPE; mapnum NUMBER(38); refskidmaps REF SYS.XMLTYPE; refmapstype REF SYS.XMLTYPE; refmaps REF SYS.XMLTYPE; mapsnum NUMBER(38); authnamenum2 NUMBER(38); refauthname2 REF SYS.XMLTYPE; descrnum NUMBER(38); refdescr REF SYS.XMLTYPE; implnum NUMBER(38); refimpl REF SYS.XMLTYPE; methodnum NUMBER(38); refmethod REF SYS.XMLTYPE; langnum NUMBER(38); reflang REF SYS.XMLTYPE; reflangtype REF SYS.XMLTYPE; refskidauth REF SYS.XMLTYPE; refauthtype REF SYS.XMLTYPE; authnum NUMBER(38); refauth REF SYS.XMLTYPE; refskidauthlist REF SYS.XMLTYPE; refauthlisttype REF SYS.XMLTYPE; authlistnum NUMBER(38); refauthlist REF SYS.XMLTYPE; refskidcauthtype REF SYS.XMLTYPE; refcauthtype REF SYS.XMLTYPE; cauthnum NUMBER(38); refcauth REF SYS.XMLTYPE; refskidcauth REF SYS.XMLTYPE; refhttp REF SYS.XMLTYPE; refhttptype REF SYS.XMLTYPE; refskidhttp REF SYS.XMLTYPE; elem_propno NUMBER(38); isfound BOOLEAN := FALSE; typenm VARCHAR2(256); refctrusttype REF SYS.XMLTYPE; refallowtrust REF SYS.XMLTYPE; allowtrustnum NUMBER(38); refsys REF SYS.XMLTYPE; refsystype REF SYS.XMLTYPE; refskidsys REF SYS.XMLTYPE; propname VARCHAR2(256); refrealm REF SYS.XMLTYPE; realmnum NUMBER(38); refsrvinfo REF SYS.XMLTYPE; srvinfonum NUMBER(38); skidhttpelems XDB.XDB$XMLTYPE_REF_LIST_T; skidsyselems XDB.XDB$XMLTYPE_REF_LIST_T; clistinsch XDB.XDB$XMLTYPE_REF_LIST_T; reftrustschtyp REF SYS.XMLTYPE; refskidtrustelems REF SYS.XMLTYPE; refcauthtrusttyp REF SYS.XMLTYPE; refskidtrustschs REF SYS.XMLTYPE; refskidclistelems XDB.XDB$XMLTYPE_REF_LIST_T; ref_ondeny_typ REF SYS.XMLTYPE; ref_ondeny REF SYS.XMLTYPE; begin select ref(s) into refs from xdb.xdb$schema s where s.xmldata.schema_url = schema_url; select s.xmldata.num_props into numprops from xdb.xdb$schema s where s.xmldata.schema_url = schema_url; -- if at least one of the custom-auth elements or types do not exist, -- then this is a rerun, so return select count(*) into idem from xdb.xdb$complex_type c where c.xmldata.name='custom-authentication-trust-type' and c.xmldata.parent_schema=refs; if (idem < 1) then dbms_output.put_line('xdbconfig schema already downgrated'); return; end if; -- save type and seq kid for custom-authentication-mapping select e.xmldata.cplx_type_decl, c.xmldata.sequence_kid into refmaptype, refskidmap from xdb.xdb$element e, xdb.xdb$complex_type c where e.xmldata.property.name='custom-authentication-mapping' and e.xmldata.property.parent_schema=refs and e.xmldata.cplx_type_decl = ref(c); -- save type and seq kid for custom-authentication-mappings select e.xmldata.cplx_type_decl, c.xmldata.sequence_kid into refmapstype, refskidmaps from xdb.xdb$element e, xdb.xdb$complex_type c where e.xmldata.property.name='custom-authentication-mappings' and e.xmldata.property.parent_schema=refs and e.xmldata.cplx_type_decl = ref(c) ; -- save type for authentication-implement-language select e.xmldata.property.type_ref into reflangtype from xdb.xdb$element e where e.xmldata.property.name='authentication-implement-language' and e.xmldata.property.parent_schema=refs; -- save complex type declaration and seq kid for custom-authentication-list select e.xmldata.cplx_type_decl, c.xmldata.sequence_kid, m.xmldata.elements into refauthlisttype, refskidauthlist, refskidclistelems from xdb.xdb$element e, xdb.xdb$complex_type c, xdb.xdb$sequence_model m where e.xmldata.property.name='custom-authentication-list' and e.xmldata.property.parent_schema=refs and e.xmldata.cplx_type_decl = ref(c) and c.xmldata.sequence_kid = ref(m); refcauth := refskidclistelems(1); select e.xmldata.cplx_type_decl, c.xmldata.sequence_kid into refauthtype, refskidauth from xdb.xdb$element e, xdb.xdb$complex_type c where ref(e)=refcauth and e.xmldata.cplx_type_decl = ref(c); -- save ref, prop num, complex type declaration and seq kid for custom-authentication select ref(e), e.xmldata.property.prop_number into refcauth, cauthnum from xdb.xdb$element e where e.xmldata.property.name='custom-authentication' and e.xmldata.property.parent_schema=refs; select ref(c), c.xmldata.sequence_kid into refcauthtype, refskidcauthtype from xdb.xdb$complex_type c where c.xmldata.name='custom-authentication-type' and c.xmldata.parent_schema = refs; -- save complex_type declaration and seq kid for trust-scheme select e.xmldata.cplx_type_decl, c.xmldata.sequence_kid into reftrustschtyp, refskidtrustelems from xdb.xdb$element e, xdb.xdb$complex_type c where e.xmldata.property.name='trust-scheme' and e.xmldata.property.parent_schema=refs and e.xmldata.cplx_type_decl = ref(c); -- save complex_type declaration and seq kid for -- custom-authentication-trust select ref(c), c.xmldata.sequence_kid into refcauthtrusttyp, refskidtrustschs from xdb.xdb$complex_type c where c.xmldata.name='custom-authentication-trust-type' and c.xmldata.parent_schema=refs; -- ref to the httpconfig element and its type select ref(e), e.xmldata.cplx_type_decl into refhttp, refhttptype from xdb.xdb$element e where e.xmldata.property.name='httpconfig' and e.xmldata.property.parent_schema = refs; -- ref to the sequence kid in the complex type for httpconfig select c.xmldata.sequence_kid into refskidhttp from xdb.xdb$complex_type c where ref(c) = refhttptype; -- elements in the sequence select m.xmldata.elements into skidhttpelems from xdb.xdb$sequence_model m where ref(m)= refskidhttp; -- ref and prop num for the allow-authentication-trust element select ref(e), e.xmldata.property.prop_number into refallowtrust, allowtrustnum from xdb.xdb$element e where e.xmldata.property.name='allow-authentication-trust' and e.xmldata.property.parent_schema = refs; -- ref to the sysconfig element and its type select ref(e), e.xmldata.cplx_type_decl into refsys, refsystype from xdb.xdb$element e where e.xmldata.property.name='sysconfig' and e.xmldata.property.parent_schema = refs; -- ref to the sequence kid in the complex type for sysconfig select c.xmldata.sequence_kid into refskidsys from xdb.xdb$complex_type c where ref(c) = refsystype; -- elements in the sequence select m.xmldata.elements into skidsyselems from xdb.xdb$sequence_model m where ref(m)= refskidsys; -- ref and prop num for the realm element select ref(e), e.xmldata.property.prop_number into refrealm, realmnum from xdb.xdb$element e where e.xmldata.property.name='realm' and e.xmldata.property.parent_schema = refs; -- ref and prop num for the respond-with-server-info element select ref(e), e.xmldata.property.prop_number into refsrvinfo, srvinfonum from xdb.xdb$element e where e.xmldata.property.name='respond-with-server-info' and e.xmldata.property.parent_schema = refs; -- ref to the on-deny element and its simple type select ref(e), e.xmldata.property.smpl_type_decl into ref_ondeny, ref_ondeny_typ from xdb.xdb$element e where e.xmldata.property.name='on-deny' and e.xmldata.property.parent_schema = refs; -- remove 'custom' for 'allow-mechanism' -- Note: if more than one 'allow-mechanism' subelemnts will ever be added to the CONFIG schema, -- change this code to go through the kids of httpconfig, find 'authentication', and pick -- the 'allow-mechanism' in the authentication kids update xdb.xdb$simple_type t set t.xmldata.sys_xdbpd$ = XDB.XDB$RAW_LIST_T('23020000000106'), t.xmldata.restriction = XDB.XDB$SIMPLE_DERIVATION_T(XDB.XDB$RAW_LIST_T('330008020000118B8002'), NULL, XDB.XDB$QNAME('00', 'string'), NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, XDB.XDB$FACET_LIST_T(XDB.XDB$FACET_T(XDB.XDB$RAW_LIST_T('130200000102'), NULL, 'digest', '00', NULL), XDB.XDB$FACET_T(XDB.XDB$RAW_LIST_T('130200000102'), NULL, 'basic', '00', NULL)), NULL, NULL) where ref(t) = (select e.xmldata.property.smpl_type_decl from xdb.xdb$element e where e.xmldata.property.name ='allow-mechanism' and e.xmldata.property.parent_schema = refs); -- update annotation for the complex type declaration for httpconfig -- This step and the two below can be much simplified -- if we are guaranteed custom-auth, realm and srvinfo are -- the last 3 kids in the sequence, until then we follow a very safe approach -- remove reference to srvinfo isfound := FALSE; anypart := ''; for i in 1..skidhttpelems.last loop select e.xmldata.property.prop_number into elem_propno from xdb.xdb$element e where ref(e) = skidhttpelems(i); if (not (isfound)) then if (elem_propno != srvinfonum) then anypart := anypart || chr(10) || ' '; else isfound := TRUE; end if; else -- shift left anypart := anypart || chr(10) || ' '; skidhttpelems(i-1) := skidhttpelems(i); end if; end loop; anypart := anypart || chr(10) || ''; skidhttpelems.trim(1); -- remove reference to realm isfound := FALSE; anypart := ''; for i in 1..skidhttpelems.last loop select e.xmldata.property.prop_number into elem_propno from xdb.xdb$element e where ref(e) = skidhttpelems(i); if (not (isfound)) then if (elem_propno != realmnum) then anypart := anypart || chr(10) || ' '; else isfound := TRUE; end if; else -- shift left anypart := anypart || chr(10) || ' '; skidhttpelems(i-1) := skidhttpelems(i); end if; end loop; anypart := anypart || chr(10) || ''; skidhttpelems.trim(1); -- remove reference to custom-authentication isfound := FALSE; anypart := ''; for i in 1..skidhttpelems.last loop select e.xmldata.property.prop_number into elem_propno from xdb.xdb$element e where ref(e) = skidhttpelems(i); if (not (isfound)) then if (elem_propno != cauthnum) then anypart := anypart || chr(10) || ' '; else isfound := TRUE; end if; else -- shift left anypart := anypart || chr(10) || ' '; skidhttpelems(i-1) := skidhttpelems(i); end if; end loop; anypart := anypart || chr(10) || ''; skidhttpelems.trim(1); update xdb.xdb$complex_type c set c.xmldata.annotation.appinfo = XDB.XDB$APPINFO_LIST_T(XDB.XDB$APPINFO_T(XDB.XDB$RAW_LIST_T('1301000000'), anypart, NULL)) where c.xmldata.parent_schema = refs and ref(c)=refhttptype; -- update elements and PD for seq kid of httpconfig (remove custom-authentication) update xdb.xdb$sequence_model m set m.xmldata.elements = skidhttpelems, m.xmldata.sys_xdbpd$ = XDB.XDB$RAW_LIST_T('230200000081801407') where ref(m)= refskidhttp; -- update annotation for the complex type declaration for sysconfig -- (remove reference to allow-authentication-trust and custom-authentication-trust) isfound := FALSE; anypart := ''; for i in 1..skidsyselems.last loop select e.xmldata.property.prop_number into elem_propno from xdb.xdb$element e where ref(e) = skidsyselems(i); if (not (isfound)) then if (elem_propno != allowtrustnum) then anypart := anypart || chr(10) || ' '; else isfound := TRUE; end if; else -- shift left anypart := anypart || chr(10) || ' '; skidsyselems(i-1) := skidsyselems(i); end if; end loop; anypart := anypart || chr(10) || ''; skidsyselems.trim(1); -- Note: there are 2 custom-authentication-trust elements in xdbconfig, so need a different approach than -- with allow-authentication-trust isfound := FALSE; anypart := ''; for i in 1..skidsyselems.last loop select distinct e.xmldata.property.name into propname from xdb.xdb$element e where ref(e) = skidsyselems(i); if (not (isfound)) then if (propname != 'custom-authentication-trust') then anypart := anypart || chr(10) || ' '; else isfound := TRUE; end if; else -- shift left anypart := anypart || chr(10) || ' '; skidsyselems(i-1) := skidsyselems(i); end if; end loop; anypart := anypart || chr(10) || ''; skidsyselems.trim(1); update xdb.xdb$complex_type c set c.xmldata.annotation.appinfo = XDB.XDB$APPINFO_LIST_T(XDB.XDB$APPINFO_T(XDB.XDB$RAW_LIST_T('1301000000'), anypart, NULL)) where c.xmldata.parent_schema = refs and ref(c)=refsystype; -- update elements and PD for seq kid of sysconfig update xdb.xdb$sequence_model m set m.xmldata.elements = skidsyselems, m.xmldata.sys_xdbpd$ = XDB.XDB$RAW_LIST_T('23020002000200182067656E65726963205844422070726F7065727469657320020E1E2070726F746F636F6C2073706563696669632070726F706572746965732081801807') where ref(m)= refskidsys; -- remove custom-authentication-type and custom-authentication-trust-type from complex_types list in schema select s.xmldata.complex_types into clistinsch from xdb.xdb$schema s where s.xmldata.schema_url = schema_url; isfound := FALSE; for i in 1..clistinsch.last loop select c.xmldata.name into typenm from xdb.xdb$complex_type c where ref(c) = clistinsch(i); dbms_output.put_line(typenm); if (not (isfound)) then if (typenm = 'custom-authentication-type') then isfound := TRUE; end if; else -- shift left clistinsch(i-1) := clistinsch(i); end if; end loop; clistinsch.trim(1); isfound := FALSE; for i in 1..clistinsch.last loop select c.xmldata.name into typenm from xdb.xdb$complex_type c where ref(c) = clistinsch(i); if (not (isfound)) then if (typenm = 'custom-authentication-trust-type') then isfound := TRUE; end if; else -- shift left clistinsch(i-1) := clistinsch(i); end if; end loop; clistinsch.trim(1); -- update PD and num props for schema update xdb.xdb$schema s set s.xmldata.complex_types = clistinsch, s.xmldata.sys_xdbpd$ = XDB.XDB$RAW_LIST_T('43163C8600050084010084020184030202081820637573746F6D697A6564206572726F7220706167657320020A3E20706172616D6574657220666F72206120736572766C65743A206E616D652C2076616C7565207061697220616E642061206465736372697074696F6E20200B0C110482800B81800202131416120A170D'), s.xmldata.num_props = CONFIG_PRPONUMS_DOWN where s.xmldata.schema_url = schema_url; ------- now do the cleanup delete from xdb.xdb$element e where e.xmldata.property.name='realm' and e.xmldata.property.parent_schema=refs; delete from xdb.xdb$element e where e.xmldata.property.name='respond-with-server-info' and e.xmldata.property.parent_schema=refs; delete from xdb.xdb$element e where e.xmldata.property.name='custom-authentication' and e.xmldata.property.parent_schema=refs; delete from xdb.xdb$complex_type c where ref(c)=refcauthtype; delete from xdb.xdb$sequence_model m where ref(m)= refskidcauthtype; delete from xdb.xdb$element e where e.xmldata.property.name='custom-authentication-trust' and e.xmldata.property.parent_schema=refs; delete from xdb.xdb$complex_type c where ref(c)= refcauthtrusttyp; delete from xdb.xdb$sequence_model m where ref(m)=refskidtrustschs; delete from xdb.xdb$element e where e.xmldata.property.name='trust-scheme' and e.xmldata.property.parent_schema=refs; delete from xdb.xdb$complex_type c where ref(c)=reftrustschtyp; delete from xdb.xdb$sequence_model m where ref(m)=refskidtrustelems; delete from xdb.xdb$element e where e.xmldata.property.name='trusted-parsing-schema' and e.xmldata.property.parent_schema=refs; delete from xdb.xdb$element e where e.xmldata.property.name='trusted-session-user' and e.xmldata.property.parent_schema=refs; delete from xdb.xdb$element e where e.xmldata.property.name='trust-scheme-description' and e.xmldata.property.parent_schema=refs; delete from xdb.xdb$element e where e.xmldata.property.name='allowRegistration' and e.xmldata.property.parent_schema=refs; delete from xdb.xdb$element e where e.xmldata.property.name='requireParsingSchema' and e.xmldata.property.parent_schema=refs; delete from xdb.xdb$element e where e.xmldata.property.name='trust-scheme-name' and e.xmldata.property.parent_schema=refs; delete from xdb.xdb$element e where e.xmldata.property.name='allow-authentication-trust' and e.xmldata.property.parent_schema=refs; delete from xdb.xdb$element e where e.xmldata.property.name='custom-authentication-list' and e.xmldata.property.parent_schema=refs; delete from xdb.xdb$complex_type c where ref(c)= refauthlisttype; delete from xdb.xdb$sequence_model m where ref(m)=refskidauthlist; delete from xdb.xdb$element e where e.xmldata.property.name='authentication-implement-language' and e.xmldata.property.parent_schema=refs; delete from xdb.xdb$simple_type c where ref(c)=reflangtype; delete from xdb.xdb$element e where e.xmldata.property.name='authentication-implement-method' and e.xmldata.property.parent_schema=refs; delete from xdb.xdb$element e where e.xmldata.property.name='authentication-implement-schema' and e.xmldata.property.parent_schema=refs; delete from xdb.xdb$element e where e.xmldata.property.name='authentication-description' and e.xmldata.property.parent_schema=refs; delete from xdb.xdb$element e where e.xmldata.property.name='authentication-name' and e.xmldata.property.parent_schema=refs; delete from xdb.xdb$element e where e.xmldata.property.name='custom-authentication-mappings' and e.xmldata.property.parent_schema=refs; delete from xdb.xdb$complex_type c where ref(c) = refmapstype; delete from xdb.xdb$sequence_model m where ref(m) = refskidmaps; delete from xdb.xdb$element e where e.xmldata.property.name='custom-authentication-mapping' and e.xmldata.property.parent_schema=refs; delete from xdb.xdb$complex_type c where ref(c) = refmaptype; delete from xdb.xdb$sequence_model m where ref(m) = refskidmap; delete from xdb.xdb$element e where e.xmldata.property.name='user-prefix' and e.xmldata.property.parent_schema=refs; delete from xdb.xdb$element e where e.xmldata.property.name='authentication-trust-name' and e.xmldata.property.parent_schema=refs; delete from xdb.xdb$element e where ref(e)=ref_ondeny; delete from xdb.xdb$simple_type t where ref(t)=ref_ondeny_typ; delete from xdb.xdb$element e where e.xmldata.property.name='authentication-name' and e.xmldata.property.parent_schema=refs; delete from xdb.xdb$element e where e.xmldata.property.name='authentication-pattern' and e.xmldata.property.parent_schema=refs; delete from xdb.xdb$element e where ref(e)=refcauth; delete from xdb.xdb$complex_type c where ref(c)=refauthtype; delete from xdb.xdb$sequence_model m where ref(m)=refskidauth; commit; end; / show errors; exec downgradeConfig; -- clean-up drop procedure downgradeConfig; Rem Drop upgrade utility functions @@xdbuud.sql -- BEGIN: downgrade for XML Index drop table XDB.XDB$XIDX_IMP_T; create global temporary table XDB.XDB$XIDX_IMP_T (index_name VARCHAR2(40), schema_name VARCHAR2(40), id VARCHAR2(40), sqlstr CLOB); drop package XDB.ximetadata_pkg; ALTER TYPE xdb.XMLIndexMethods DROP static function ODCIIndexGetMetadata(idxinfo IN sys.ODCIIndexInfo, expver IN VARCHAR2, newblock OUT number, idxenv IN sys.ODCIEnv) return VARCHAR2; ALTER TYPE xdb.XMLIndexMethods ADD static function ODCIIndexGetMetadata(idxinfo IN sys.ODCIIndexInfo, expver IN VARCHAR2, len_newblock OUT number, idxenv IN sys.ODCIEnv) return VARCHAR2 is language C name "QMIX_XMETADATA" library XDB.XMLINDEX_LIB with context parameters (context, idxinfo, idxinfo INDICATOR struct, idxenv, idxenv INDICATOR struct, expver, expver INDICATOR, len_newblock, len_newblock INDICATOR sb4, RETURN LENGTH, RETURN); ALTER TYPE xdb.XMLIndexMethods DROP static function ODCIIndexUtilGetTableNames(ia IN sys.ODCIIndexInfo, read_only IN PLS_INTEGER, version IN varchar2, context OUT PLS_INTEGER) return BOOLEAN; ALTER TYPE xdb.XMLIndexMethods DROP static procedure ODCIIndexUtilCleanup (context IN PLS_INTEGER); create or replace type body xdb.XMLIndexMethods is static function ODCIGetInterfaces(ilist OUT sys.ODCIObjectList) return number is begin ilist := sys.ODCIObjectList(sys.ODCIObject('SYS','ODCIINDEX2')); return ODCICONST.SUCCESS; end ODCIGetInterfaces; static function ODCIIndexUpdPartMetadata(ixdxinfo sys.ODCIIndexInfo, palist sys.ODCIPartInfoList, idxenv sys.ODCIEnv) return NUMBER is BEGIN RETURN ODCICONST.SUCCESS; END; end; / ---------------------------------------------------------------------------- -- De-support partitioning of XMLIndex alter indextype XDB.xmlindex using XDB.XMLIndexMethods without local partition with system managed storage tables; -- END: downgrade for XML Index -- container - mark mutable declare res_schema_ref REF XMLTYPE; res_schema_url VARCHAR2(100); begin res_schema_url := 'http://xmlns.oracle.com/xdb/XDBResource.xsd'; select ref(s) into res_schema_ref from xdb.xdb$schema s where s.xmldata.schema_url = res_schema_url; update xdb.xdb$attribute a set a.xmldata.MUTABLE = '00' where a.xmldata.parent_schema = res_schema_ref and a.xmldata.name = 'Container'; commit; end; / drop package xdb.XDB_PITRIG_PKG_01; -- Clean up session/shared state exec xdb.dbms_xdbutil_int.flushsession; alter system flush shared_pool; alter system flush shared_pool; alter system flush shared_pool; Rem ================================================================ Rem END XDB Schema downgrade to 11.1.0 Rem ================================================================