MINI MINI MANI MO

Path : /opt/oracle/product/18c/dbhomeXE/rdbms/admin/
File Upload :
Current File : //opt/oracle/product/18c/dbhomeXE/rdbms/admin/xdbeo112.sql

Rem $Header: rdbms/admin/xdbeo112.sql /main/24 2017/04/07 17:26:54 qyu Exp $
Rem
Rem xdbeo112.sql
Rem
Rem Copyright (c) 2011, 2017, Oracle and/or its affiliates. 
Rem All rights reserved.
Rem
Rem    NAME
Rem      xdbeo112.sql - Downgrade XDB objects to 11.2
Rem
Rem    DESCRIPTION
Rem      XDB objects unrelated to the repository should be downgraded here
Rem
Rem    NOTES
Rem      <other useful comments, qualifications, etc.>
Rem
Rem    BEGIN SQL_FILE_METADATA 
Rem    SQL_SOURCE_FILE: rdbms/admin/xdbeo112.sql 
Rem    SQL_SHIPPED_FILE: rdbms/admin/xdbeo112.sql 
Rem    SQL_PHASE: DOWNGRADE
Rem    SQL_STARTUP_MODE: DOWNGRADE
Rem    SQL_IGNORABLE_ERRORS: NONE 
Rem    SQL_CALLING_FILE: rdbms/admin/xdbdwgrd.sql 
Rem    END SQL_FILE_METADATA
Rem
Rem    MODIFIED   (MM/DD/YY)
Rem    raeburns    03/25/17 - Bug 25752691: Use SQL_PHASE DOWNGRADE
Rem    qyu         01/06/17 - #25070346: drop synonym
Rem    qyu         07/25/16 - add file metadata
Rem    joalvizo    04/12/16 - RTI 19388120: Remove plsql block from drop table 
Rem                           xdb.xdb$dbfs_virtual_folder; 
Rem    raeburns    07/28/14 - drop DBMS_XDB_CONTENT
Rem    dmelinge    12/11/13 - Remove rootinfo view, bug 17761566
Rem    raeburns    11/04/13 - add 12.1 downgrade
Rem    prthiaga    07/09/13 - remove package xdb.dbms_clobutil
Rem    stirmizi    10/23/12 - remove xdbimport_tt_info
Rem    qyu         09/14/12 - #14629199: refer sys.session_roles
Rem    yinlu       08/27/12 - lrg 7215262
Rem    srirkris    07/15/12 - Drop types and synonyms
Rem    yinlu       06/29/12 - revoke priviledge of dbms_xdb_config
Rem    dmelinge    06/18/12 - drop dbms_xdb_config package, lrg 7026593
Rem    qyu         03/08/12 - bug 13474450
Rem    sipatel     10/05/11 - move xidx downgrade below acl idx creation script
Rem    sipatel     09/15/11 - drop dxptab(nbpendtabobj#, nberrtabobj#)
Rem    sipatel     09/05/11 - #(11883969) - drop xidx_part_tab and 
Rem                           dxptab(tablespace, table_attrs)
Rem    thbaby      09/08/11 - create indexes on xdb.xdb$acl
Rem    yinlu       08/05/11 - drop dbms_xlsb package
Rem    vhosur      08/18/11 - Remove dbfs virtual folder
Rem    juding      07/29/11 - bug 12622803: Created from split of xdbe112.sql
Rem


Rem ================================================================
Rem BEGIN XDB Object downgrade to 12.1.0
Rem ================================================================

@@xdbeo121.sql

Rem ================================================================
Rem END XDB Object downgrade to 12.1.0
Rem ================================================================

Rem ================================================================
Rem BEGIN XDB Object downgrade to 11.2.0
Rem ================================================================

-----------------------------------------------------------------------------
-- downgrade SXI to 11.2.0.1
-- set OID column to null for SXI table created for partitioned xmltype table
-----------------------------------------------------------------------------

alter session set events '19119 trace name context forever, level 0x20000000';

declare
  -- local SXI table created for partitioned xmltype table
  cursor XTAB_CUR_1 is
    select t.IDXOBJ# idx_id
         , t.XMLTABOBJ# idxtab_id
         , bu.NAME btab_user
         , bo.NAME btab_name
         , u.NAME xtab_user
         , o.NAME xtab_name
    from XDB.XDB$XTAB t
       , IND$ i, OBJ$ bo, USER$ bu
       , OBJ$ o, USER$ u
    where bitand(t.FLAGS, 16640) = 16640
    and t.IDXOBJ# = i.OBJ#
    and i.BO# = bo.OBJ#
    and bo.OWNER# = bu.USER#
    and t.XMLTABOBJ# = o.OBJ#
    and o.OWNER# = u.USER#;

  previous_version varchar2(30);
  stmt varchar2(2000);
begin
  select prv_version into previous_version
  from registry$
  where cid = 'XDB';

  /* If XDB was installed during a upgrade, previous_version will be NULL.
   * When that happens, get previous_version from CATPROC.
   */
  if previous_version is NULL
  then
    select prv_version into previous_version
    from registry$
    where cid = 'CATPROC';
  end if;

  if previous_version like '11.2.0.1%' then
    for XTAB_REC in XTAB_CUR_1
    loop
        -- set OID column nullable
        stmt :=
        'alter table '
        || dbms_assert.enquote_name(XTAB_REC.xtab_user, FALSE) || '.' 
        || dbms_assert.enquote_name(XTAB_REC.xtab_name, FALSE)
        || ' modify (OID null)';
        -- dbms_output.put_line(stmt);
        execute immediate stmt;

        -- set OID column to null
        stmt :=
        'update '
        || dbms_assert.enquote_name(XTAB_REC.xtab_user, FALSE) || '.' 
        || dbms_assert.enquote_name(XTAB_REC.xtab_name, FALSE) || ' xt'
        || ' set OID = null';
        -- dbms_output.put_line(stmt);
        execute immediate stmt;
    end loop;
    commit;
  end if;
end;
/

alter session set events '19119 trace name context off';

-----------------------------------------------------------------------------
-- downgrade SXI to 11.2.0.2
-- set KEY column to null for SXI leaf table
-----------------------------------------------------------------------------

alter session set events '19119 trace name context forever, level 0x20000000';

declare
  -- SXI leaf table
  cursor XTAB_CUR_1 is
    select u.NAME xtab_user
         , o.NAME xtab_name
         , t.IDXOBJ# idx_id
         , t.XMLTABOBJ# idxtab_id
         , iu.NAME xidx_user
         , io.NAME xidx_name
         , decode(bitand(t.FLAGS, 16384), 16384, 'local', '') ptlcl
    from XDB.XDB$XTAB t, OBJ$ o, USER$ u
       , XDB.XDB$XTAB k, OBJ$ io, USER$ iu
    where 1=1
    and t.XMLTABOBJ# = o.OBJ#
    and o.OWNER# = u.USER#
    and t.XMLTABOBJ# = k.PTABOBJ# (+)
    and t.IDXOBJ# = io.OBJ#
    and io.OWNER# = iu.USER#
    group by u.NAME 
           , o.NAME
           , t.PTABOBJ#
           , t.IDXOBJ#
           , t.XMLTABOBJ#
           , iu.NAME
           , io.NAME
           , t.FLAGS
    having count(k.XMLTABOBJ#) = 0;

  previous_version varchar2(30);
  stmt varchar2(2000);

  idxnm varchar2(200);
  cstcnt integer;
begin
  select prv_version into previous_version
  from registry$
  where cid = 'XDB';

  /* If XDB was installed during a upgrade, previous_version will be NULL.
   * When that happens, get previous_version from CATPROC.
   */
  if previous_version is NULL
  then
    select prv_version into previous_version
    from registry$
    where cid = 'CATPROC';
  end if;

  if previous_version like '11.2.0.2%' then
    for XTAB_REC in XTAB_CUR_1
    loop
      idxnm := 'SYS' || XTAB_REC.idx_id || '_'
               || XTAB_REC.idxtab_id || '_KEY_IDX';

      -- KEY column is primary key?
      select count(*) into cstcnt
      from all_constraints
      where OWNER = XTAB_REC.xtab_user
      and CONSTRAINT_NAME = idxnm
      and CONSTRAINT_TYPE = 'P'
      and TABLE_NAME = XTAB_REC.xtab_name;

      if cstcnt > 0
      then
        -- drop primary key constraint on KEY column
        stmt :=
        'alter table '
        || dbms_assert.enquote_name(XTAB_REC.xtab_user, FALSE) || '.' 
        || dbms_assert.enquote_name(XTAB_REC.xtab_name, FALSE)
        || ' drop primary key drop index';
        -- dbms_output.put_line(stmt);
        execute immediate stmt;
      end if;

      -- set KEY column to null
      stmt :=
      'update '
      || dbms_assert.enquote_name(XTAB_REC.xtab_user, FALSE) || '.' 
      || dbms_assert.enquote_name(XTAB_REC.xtab_name, FALSE)
      || ' set KEY = null';
      -- dbms_output.put_line(stmt);
      execute immediate stmt;
    end loop;
    commit;
  end if;
end;
/

alter session set events '19119 trace name context off';

/* drop dbms_clobutil package */
drop public synonym dbms_clobutil;
drop package xdb.dbms_clobutil;

/* drop dbms_xlsb package */ 
revoke execute on xdb.dbms_xlsb from public;
drop public synonym dbms_xlsb;
drop package xdb.dbms_xlsb;

/* drop dbms_xlsb package */ 
revoke execute on xdb.dbms_xmlschema_lsb from public;
drop public synonym dbms_xmlschema_lsb;
drop package xdb.dbms_xmlschema_lsb;

drop public synonym DBMS_XMLSCHEMA_TABMDARR;

drop public synonym DBMS_XMLSCHEMA_TABMD;

drop type xdb.DBMS_XMLSCHEMA_TABMDARR force;

drop type xdb.DBMS_XMLSCHEMA_TABMD force;

drop public synonym DBMS_XMLSCHEMA_RESMDARR;

drop public synonym DBMS_XMLSCHEMA_RESMD;

drop type xdb.DBMS_XMLSCHEMA_RESMDARR force;

drop type xdb.DBMS_XMLSCHEMA_RESMD force;

/* drop dbms_xdb_config package, lrg 7026593 */ 
revoke execute on xdb.dbms_xdb_config from public;
drop public synonym dbms_xdb_config;  
drop package XDB.DBMS_XDB_CONFIG;

------------------------------
-- ACL TABLE OPERATIONS BEGIN
------------------------------
-- create indexes on xdb.xdb$acl

create or replace package xdb.xdb$acl_pkg_int
authid current_user is 
TYPE strlist IS TABLE OF VARCHAR2(4000);
function current_principals return strlist pipelined;
function special_acl(acl xmltype) return number deterministic;
end;
/

create or replace package body xdb.xdb$acl_pkg_int
is 
  function current_principals return strlist pipelined is 
    rolename VARCHAR2(4000);
  begin 
    pipe ROW('PUBLIC');
    pipe ROW(USER());
    for item IN (SELECT role from sys.session_roles) loop
      PIPE ROW(item.role);
    end loop;

    return;
  end;

  function special_acl(acl xmltype) return number deterministic is
    ret NUMBER := null;
  begin
    select 1 into ret 
    from dual 
    where existsNode(acl, '/acl/extends-from', 
        'xmlns="http://xmlns.oracle.com/xdb/acl.xsd"') = 1 or 
    existsNode(acl, '/acl/ace/invert', 
        'xmlns="http://xmlns.oracle.com/xdb/acl.xsd"') = 1;

    return ret;
  end;
end;
/

grant execute on xdb.xdb$acl_pkg_int to public;

-- create XML index on xdb$acl table and also the value index
declare
  cur integer;
  rc  integer;
begin
  cur := dbms_sql.open_cursor;
  dbms_sql.parse(cur,
     'create index xdb.xdb$acl_xidx on xdb.xdb$acl(object_value) '||
     'indextype is xdb.xmlindex '||
     'parameters(''PATH TABLE XDBACL_PATH_TAB VALUE INDEX XDBACL_PATH_TAB_VALUE_IDX'') ',
    dbms_sql.native);
  rc := dbms_sql.execute(cur);
  dbms_sql.close_cursor(cur);
end;
/

-- create functional index on special_acl()
declare
  cur integer;
  rc  integer;
begin
  cur := dbms_sql.open_cursor;
  dbms_sql.parse(cur,
     'create index xdb.xdb$acl_spidx on xdb.xdb$acl(xdb.xdb$acl_pkg_int.special_acl(object_value), object_id)',
    dbms_sql.native);
  rc := dbms_sql.execute(cur);
  dbms_sql.close_cursor(cur);
end;
/

------------------------------
-- ACL TABLE OPERATIONS END
------------------------------

-------------------------------------------------
-- TOKEN MANAGEMENT RELATED OPERATIONS BEGIN
-------------------------------------------------
DECLARE
  noexist_ex EXCEPTION;
  PRAGMA EXCEPTION_INIT(noexist_ex, -942);
BEGIN
  EXECUTE IMMEDIATE 'drop table xdb.xdb$import_tt_info';
  EXCEPTION WHEN noexist_ex THEN NULL;
END;
/
-------------------------------------------------
-- TOKEN MANAGEMENT RELATED OPERATIONS END
-------------------------------------------------

-----------------------------------------------------------------------------
-- downgrade XMLIndex to 11.2
-- #(11883969) drop xidx_part_tab and  dxptab(tablespace, table_attrs)
-- drop dxptab(nbpendtabobj#, nberrtabobj#)
-----------------------------------------------------------------------------
DECLARE
  noexist_ex EXCEPTION;
  PRAGMA EXCEPTION_INIT(noexist_ex, -942);
  invalididn_ex EXCEPTION;
  PRAGMA EXCEPTION_INIT(invalididn_ex, -904);
BEGIN
  BEGIN
    EXECUTE IMMEDIATE 'drop table xdb.xdb$xidx_part_tab';
    EXCEPTION WHEN noexist_ex THEN NULL;
  END;
  BEGIN
    EXECUTE IMMEDIATE 'alter table xdb.xdb$dxptab drop column tablespace';
    EXCEPTION WHEN invalididn_ex THEN NULL;
  END;
  BEGIN
    EXECUTE IMMEDIATE 'alter table xdb.xdb$dxptab drop column table_attrs';
    EXCEPTION WHEN invalididn_ex THEN NULL;
  END;
  BEGIN
    EXECUTE IMMEDIATE 'alter table xdb.xdb$dxptab drop column nbpendtabobj#';
    EXCEPTION WHEN invalididn_ex THEN NULL;
  END;
  BEGIN
    EXECUTE IMMEDIATE 'alter table xdb.xdb$dxptab drop column nberrtabobj#';
    EXCEPTION WHEN invalididn_ex THEN NULL;
  END;
END;
/
----------------------------------
-- XMLIndex downgrade to 11.2 end
----------------------------------

-- dbms_xdb.deleteresource is now in xdbed112.sql to avoid upgrade issues
drop table xdb.xdb$dbfs_virtual_folder;  
commit;

-------------------------------------------------
-- REMOVE ROOT_INFO VIEW BEGIN
-------------------------------------------------
DECLARE
  noexist_ex EXCEPTION;
  PRAGMA EXCEPTION_INIT(noexist_ex, -942);
BEGIN
  -- Note: package dbms_xdb in prvtxdb has a dependency on this view;
  -- package becomes invalid after this.
  EXECUTE IMMEDIATE 'drop view xdb.xdb$root_info_v';
  EXCEPTION WHEN noexist_ex THEN NULL;
END;
/
-------------------------------------------------
-- REMOVE ROOT_INFO VIEW END
-------------------------------------------------

-- Drop package loaded by prvtxsfsclient.plb
-- A new package in 12.1, it is invalid after a downgrade to 11.1
drop package XDB.DBMS_XDB_CONTENT;
drop public synonym DBMS_XDB_CONTENT;

Rem ================================================================
Rem END XDB Object downgrade to 11.2.0
Rem ================================================================


OHA YOOOO