MINI MINI MANI MO

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

Rem
Rem $Header: rdbms/admin/dbmscr.sql /st_rdbms_18.0/2 2018/05/16 14:44:38 surman Exp $
Rem
Rem dbmscr.sql
Rem
Rem Copyright (c) 2006, 2018, Oracle and/or its affiliates. 
Rem All rights reserved.
Rem
Rem    NAME
Rem      dbmscr.sql - DBMS_Registry package specs and views
Rem
Rem    DESCRIPTION
Rem      
Rem
Rem    NOTES
Rem
Rem
Rem BEGIN SQL_FILE_METADATA
Rem SQL_SOURCE_FILE: rdbms/admin/dbmscr.sql
Rem SQL_SHIPPED_FILE: rdbms/admin/dbmscr.sql
Rem SQL_PHASE: DBMSCR
Rem SQL_STARTUP_MODE: NORMAL
Rem SQL_IGNORABLE_ERRORS: NONE
Rem SQL_CALLING_FILE: rdbms/admin/catptabs.sql
Rem END SQL_FILE_METADATA
Rem
Rem    MODIFIED   (MM/DD/YY)
Rem    apfwkr      04/16/18 - Backport raeburns_bug-27591842 from main
Rem    raeburns    02/25/18 - Bug 27591842: add build description, date to ru
Rem                           app/roll
Rem    pyam        10/30/17 - Bug 26799709: add is_server_component
Rem    raeburns    08/14/17 - Bug 26255427: add dbms_registry_extended package
Rem                           to catproc.sql
Rem    pjulsaks    06/26/17 - Bug 25688154: Uppercase create_cdbview's input
Rem    rtattuku    06/22/17 - version change from cdilling
Rem    raeburns    06/04/17 - Bug 26170491: Add interfaces for datapatch
Rem                           function
Rem    fvallin     05/05/17 - Bug 25890128: Added capitalize_single_quote
Rem                           function
Rem    surman      04/27/17 - 25507396: Execute to execute_catalog_role
Rem    surman      04/17/17 - 25269268: Add bundle_series to
Rem                           dba_registry_history
Rem    raeburns    04/08/17 - For 18.0.0 remove old populate and cpu routines
Rem    surman      03/15/17 - 25479222: Remove dir_exists_and_is_writable
Rem    raeburns    03/05/17 - Bug 25491041: Separate upgrade error checking 
Rem                           from validation routines for CATALOG/CATPROC
Rem    welin       10/17/16 - Remove patch_script as <cid>patch.sql will 
Rem                           no longer be called
Rem    raeburns    04/08/16 - restore dbmscr.sql as versioned object
Rem                           add dbms_registry_basic.sql to define sqlplus 
Rem                           variables
Rem    welin       01/04/16 - Bug 22339986: automatically set database version
Rem                           and release status
Rem    jerrede     12/10/15 - Bug 22116552 Additional routines needed for stats
Rem                           upgrade
Rem    cdilling    11/02/15 - Change RDBMS version to 12.2.0.0.2
Rem    raeburns    04/04/15 - add function for catcon query
Rem    raeburns    12/20/14 - Bug 20088724: add view for component schemas
Rem    skayoor     11/30/14 - Proj 58196: Change Select priv to Read Priv
Rem    jerrede     11/20/14 - Support Oracle Read-only Homes
Rem    wesmith     05/05/14 - Project 47511: data-bound collation
Rem    surman      04/21/14 - 17277459: Seperate script for SQL registry
Rem    surman      03/19/14 - 17665117: Patch UID
Rem    cdilling    03/13/14 - update version to 12.2.0.0.0
Rem    traney      01/14/14 - 18074131: fix script_name
Rem    surman      01/13/14 - 13922626: Update SQL metadata
Rem    cdilling    12/26/13 - add DEFAULT NULL to .downgraded (17995763)
Rem    cmlim       12/15/13 - cmlim_bug-17545700: extra: create cdb and dba
Rem                           views on top of registry$error table
Rem    surman      10/31/13 - 17277459: Add bundle columns to registry$sqlpatch
Rem    jerrede     10/24/13 - 17646439 Do not recompile java objects when not
Rem                           installed. Also add registry$error checker
Rem                           for components to call.
Rem    surman      10/24/13 - 14563594: Add version to registry$sqlpatch
Rem    jerrede     09/09/13 - Compile Invalid Java Objects in Root
Rem    surman      08/27/13 - 17343514: Add dir_exists_and_is_writable
Rem    sylin       08/07/13 - longer identifiers
Rem    talliu      06/28/13 - Add CDB view for DBA view
Rem    cdilling    05/12/13 - version to 12.2
Rem    cdilling    01/29/13 - version to 12.1.0.2
Rem    jerrede     11/29/12 - Support for CDB
Rem    jerrede     11/05/12 - Add Exadata Bundle support
Rem    bmccarth    10/24/12 - dir create changes
Rem    surman      09/27/12 - 14685965: Public synonym for
Rem                           dba_registry_sqlpatch
Rem    bmccarth    09/13/12 - bug 14617253 (new dir functions)
Rem    surman      09/13/12 - 14624172: Add status column
Rem    cdilling    08/29/12 - change version to 12.1 production
Rem    jerrede     06/19/12 - Set event to optionally update required stats
Rem                           during upgrade.
Rem    jerrede     05/29/12 - Add Comp Display Routine
Rem    awesley     04/30/12 - add option_off
Rem    surman      03/27/12 - 13615447: Add SQL patching tags
Rem    jerrede     02/14/12 - Change function names
Rem    surman      02/08/12 - 13615515: SQL registry table
Rem    jciminsk    01/23/12 - Version to 12.1.0.0.2
Rem    jerrede     12/08/11 - Parallel Upgrade Change Status from Valid to
Rem                           Upgraded
Rem    jerrede     11/01/11 - Fix bug 13252372
Rem    cdilling    09/27/11 - version to 12.1.0.0.1
Rem    jerrede     09/01/11 - Parallel Upgrade Project #23496
Rem    cdilling    10/17/10 - add set_edition
Rem    bmccarth    07/26/10 - move to 12.1
Rem    cdilling    07/15/09 - version to 11.2.0.2.0
Rem    cdilling    04/27/09 - version to 11.2.0.1.0
Rem    cdilling    12/16/08 - version to 11.2.0.2
Rem    rlong       08/07/08 - 
Rem    cdilling    07/17/08 - version to 11.2.0.0.1
Rem    jciminsk    10/22/07 - Upgrade support for 11.2
Rem    jciminsk    10/08/07 - version to 11.2.0.0.0
Rem    jciminsk    08/03/07 - version to 11.1.0.7.0
Rem    emendez     12/14/06 - solve merge conflict
Rem    rburns      06/06/07 - update version to production
Rem    cdilling    04/18/07 - version for beta5
Rem    rburns      02/14/07 - version for BETA5
Rem    rburns      12/07/06 - move gather_stats
Rem    cdilling    12/07/06 - add populate_102
Rem    cdilling    11/13/06 - add support for registry$database
Rem    cdilling    10/06/06 - beta4 version
Rem    cdilling    10/06/06 - beta3 version
Rem    pbagal      08/03/06 - make this work for TB
Rem    rburns      09/14/06 - beta2 version
Rem    cdilling    07/31/06 - overload component dependency procedures
Rem    cdilling    06/06/06 - add comp dependency package specs and views
Rem    cdilling    05/25/06 - add progress package specs and views
Rem    rburns      05/26/06 - update log view 
Rem    cdilling    05/25/06 - add progress package specs and views
Rem    rburns      05/05/06 - registry package specs 
Rem    rburns      05/05/06 - Created
Rem
Rem -------------------------------------------------------------------------
Rem DBMS REGISTRY PACKAGE
Rem -------------------------------------------------------------------------

-- enable _oracle_script; needed for container_data in create_cdbview()
@@?/rdbms/admin/sqlsessstart.sql

-- Get UP/DOWN basic constants and extended package
@@dbms_registry_basic.sql
@@dbms_registry_extended.sql

CREATE OR REPLACE PACKAGE dbms_registry AS

-- RELEASE CONSTANTS 
--    The values are taken from sqlplus constants defined in 
--    dbms_registry_basic.sql. The sqlplus constants are
--    derived from the build variables BANNERVERSION, BANNERVERSIONFULL,
--    and BANNER_STATUS.  The constants reflect the scripts in rdbms/admin, 
--    as opposed to the server code running in an instance.

release_version       CONSTANT registry$.version%type := 
                               '&C_ORACLE_HIGH_VERSION_4_DOTS'; 
release_version_full  CONSTANT registry$.version_full%type := 
                               '&C_ORACLE_HIGH_VERSIONFULL'; 
release_status        CONSTANT VARCHAR2(30) := '&C_ORACLE_HIGH_STATUS'; 

-- Component Hierarchy Type and CONSTANTS
TYPE comp_list_t      IS TABLE OF VARCHAR2(30) INDEX BY BINARY_INTEGER;
IMD_COMPS             CONSTANT NUMBER :=1;  /* immediate subcomponents */
TRM_COMPS             CONSTANT NUMBER :=2;  /* terminal subcomponents */
ALL_COMPS             CONSTANT NUMBER :=3;  /* all subcomponents */

-- Schema List Parameter
TYPE schema_list_t    IS TABLE OF dbms_id;

-- Component dependency Type - table of component IDs
TYPE comp_depend_list_t IS TABLE OF VARCHAR2(30);

-- Component dependency Type - table of component IDs and associated namespaces
TYPE comp_depend_record_t IS RECORD(
    cid VARCHAR2(30), -- component id
    cnamespace VARCHAR2(30) -- component namespace
    );

TYPE comp_depend_rec IS TABLE OF comp_depend_record_t INDEX BY BINARY_INTEGER;

PROCEDURE set_session_namespace (namespace IN VARCHAR2);

PROCEDURE set_comp_namespace (comp_id IN VARCHAR2, 
                              namespace IN VARCHAR2);

PROCEDURE set_rdbms_status(comp_id      IN VARCHAR2,
                           status       IN NUMBER);

PROCEDURE invalid     (comp_id      IN VARCHAR2);

PROCEDURE valid       (comp_id      IN VARCHAR2);

PROCEDURE loading     (comp_id      IN VARCHAR2,
                       comp_name    IN VARCHAR2,
                       comp_proc    IN VARCHAR2 DEFAULT NULL,
                       comp_schema  IN VARCHAR2 DEFAULT NULL,
                       comp_parent  IN VARCHAR2 DEFAULT NULL);

PROCEDURE loading     (comp_id      IN VARCHAR2,
                       comp_name    IN VARCHAR2,
                       comp_proc    IN VARCHAR2,
                       comp_schema  IN VARCHAR2,
                       comp_schemas IN schema_list_t,
                       comp_parent  IN VARCHAR2 DEFAULT NULL);

PROCEDURE loaded      (comp_id      IN VARCHAR2,
                       comp_version IN VARCHAR2 DEFAULT NULL,
                       comp_banner  IN VARCHAR2 DEFAULT NULL);

PROCEDURE upgrading   (comp_id      IN VARCHAR2,
                       new_name     IN VARCHAR2 DEFAULT NULL,
                       new_proc     IN VARCHAR2 DEFAULT NULL,
                       new_schema   IN VARCHAR2 DEFAULT NULL,
                       new_parent   IN VARCHAR2 DEFAULT NULL);

PROCEDURE upgrading   (comp_id      IN VARCHAR2,
                       new_name     IN VARCHAR2,
                       new_proc     IN VARCHAR2,
                       new_schema   IN VARCHAR2,
                       new_schemas  IN schema_list_t,
                       new_parent   IN VARCHAR2 DEFAULT NULL);

PROCEDURE upgraded     (comp_id      IN VARCHAR2,
                       new_version   IN VARCHAR2 DEFAULT NULL,
                       new_banner    IN VARCHAR2 DEFAULT NULL);

PROCEDURE downgrading (comp_id      IN VARCHAR2,
                       old_name     IN VARCHAR2 DEFAULT NULL,
                       old_proc     IN VARCHAR2 DEFAULT NULL,
                       old_schema   IN VARCHAR2 DEFAULT NULL,
                       old_parent   IN VARCHAR2 DEFAULT NULL);

PROCEDURE downgraded  (comp_id      IN VARCHAR2,
                       old_version  IN VARCHAR2 DEFAULT NULL);

PROCEDURE removing    (comp_id      IN VARCHAR2);

PROCEDURE removed     (comp_id      IN VARCHAR2);

PROCEDURE option_off  (comp_id      IN VARCHAR2);

PROCEDURE startup_required (comp_id IN VARCHAR2);

PROCEDURE startup_complete (comp_id IN VARCHAR2);

PROCEDURE reset_version (comp_id      IN VARCHAR2);

PROCEDURE update_schema_list     
                      (comp_id      IN VARCHAR2,
                       comp_schemas IN schema_list_t);

FUNCTION  status_name  (status NUMBER) RETURN VARCHAR2;

FUNCTION  status      (comp_id IN VARCHAR2) RETURN VARCHAR2;

FUNCTION  version     (comp_id IN VARCHAR2) RETURN VARCHAR2;

FUNCTION  prev_version (comp_id IN VARCHAR2) RETURN VARCHAR2;

FUNCTION  version_full (comp_id IN VARCHAR2) RETURN VARCHAR2;

FUNCTION  version_greater (left_version VARCHAR2, right_version VARCHAR2)
  RETURN BOOLEAN;

FUNCTION  edition      (comp_id IN VARCHAR2) RETURN VARCHAR2;

FUNCTION  schema      (comp_id IN VARCHAR2) RETURN VARCHAR2;

FUNCTION  schema_list (comp_id IN VARCHAR2) RETURN schema_list_t;

FUNCTION  schema_list_string  (comp_id IN VARCHAR2) RETURN VARCHAR2;

FUNCTION  subcomponents (comp_id IN VARCHAR2, 
                         comp_option IN NUMBER DEFAULT 1) 
                         RETURN comp_list_t;

FUNCTION  comp_name   (comp_id IN VARCHAR2) RETURN VARCHAR2;

FUNCTION  session_namespace RETURN VARCHAR2;

FUNCTION  script      (comp_id IN VARCHAR2, 
                       script_name IN VARCHAR2) RETURN VARCHAR2;

FUNCTION  script_path  (comp_id IN VARCHAR2) RETURN VARCHAR2;

FUNCTION  script_prefix  (comp_id IN VARCHAR2) RETURN VARCHAR2;

FUNCTION  nothing_script RETURN VARCHAR2;

FUNCTION  is_loaded   (comp_id IN VARCHAR2, 
                       version IN VARCHAR2 DEFAULT NULL) RETURN NUMBER;

FUNCTION  is_valid   (comp_id IN VARCHAR2, 
                       version IN VARCHAR2 DEFAULT NULL) RETURN NUMBER;

FUNCTION  is_startup_required (comp_id IN VARCHAR2) RETURN NUMBER;

FUNCTION  is_component (comp_id VARCHAR2) RETURN BOOLEAN;

FUNCTION  is_server_component (comp_id VARCHAR2) RETURN NUMBER DETERMINISTIC;

FUNCTION  is_in_registry (comp_id IN VARCHAR2) RETURN BOOLEAN;

FUNCTION  count_errors_in_registry (comp_id IN VARCHAR2) RETURN NUMBER;

FUNCTION  is_in_upgrade_mode RETURN BOOLEAN;

FUNCTION  is_trace_event_set(trace_event VARCHAR2) RETURN BOOLEAN;

FUNCTION  is_db_consolidated RETURN BOOLEAN;

FUNCTION  is_db_root         RETURN BOOLEAN;

FUNCTION  is_db_pdb          RETURN BOOLEAN;

FUNCTION  is_db_pdb_seed     RETURN BOOLEAN;

FUNCTION  is_upgrade_running RETURN BOOLEAN;

FUNCTION  is_stats_from_upgrade RETURN BOOLEAN;

FUNCTION  set_session_to_container_name(con_name IN obj$.name%TYPE) RETURN BOOLEAN;

FUNCTION  get_container_name(con_id IN container$.con_id#%TYPE)
          RETURN obj$.name%TYPE;

FUNCTION  set_session_container (con_id IN container$.con_id#%TYPE) RETURN BOOLEAN;

FUNCTION  num_of_exadata_cells RETURN NUMBER;

PROCEDURE check_server_instance;

PROCEDURE set_progress_action (comp_id IN VARCHAR2, 
                               action  IN VARCHAR2, 
                               value   IN VARCHAR2 DEFAULT NULL,
                               step    IN NUMBER DEFAULT NULL);

PROCEDURE delete_progress_action (comp_id IN VARCHAR2,
                                  action  IN VARCHAR2);

PROCEDURE set_progress_value (comp_id IN VARCHAR2, 
                              action  IN VARCHAR2, 
                              value   IN VARCHAR2);

PROCEDURE set_progress_step (comp_id IN VARCHAR2, 
                             action  IN VARCHAR2, 
                             step    IN NUMBER);

FUNCTION get_progress_value (comp_id IN VARCHAR2, 
                             action  IN VARCHAR2) RETURN VARCHAR2;

FUNCTION get_progress_step (comp_id IN VARCHAR2, 
                            action  IN VARCHAR2) RETURN NUMBER;

PROCEDURE set_required_comps (comp_id IN VARCHAR2, 
                              comp_depend_list IN comp_depend_list_t );

PROCEDURE set_required_comps (comp_id IN VARCHAR2, 
                              comp_depend_list IN comp_depend_rec );

FUNCTION get_required_comps (comp_id IN VARCHAR2) RETURN comp_depend_list_t;

FUNCTION get_required_comps_rec (comp_id IN VARCHAR2) RETURN comp_depend_rec;

FUNCTION get_dependent_comps (comp_id IN VARCHAR2) RETURN comp_depend_list_t;

FUNCTION get_dependent_comps_rec (comp_id IN VARCHAR2) RETURN comp_depend_rec;

PROCEDURE set_edition (comp_id      IN VARCHAR2);

PROCEDURE set_edition (comp_id      IN VARCHAR2,
                       edition_var  IN VARCHAR2);

FUNCTION get_con_id RETURN NUMBER;

PROCEDURE RU_apply    (comp_version      IN VARCHAR2  DEFAULT NULL,
                       build_description IN VARCHAR2  DEFAULT NULL,
                       build_timestamp   IN TIMESTAMP DEFAULT NULL);

PROCEDURE RU_rollback (comp_version      IN VARCHAR2  DEFAULT NULL,
                       build_description IN VARCHAR2  DEFAULT NULL,
                       build_timestamp   IN TIMESTAMP DEFAULT NULL);

END dbms_registry;
/

show errors

CREATE OR REPLACE PUBLIC SYNONYM dbms_registry FOR dbms_registry;

GRANT EXECUTE ON dbms_registry TO execute_catalog_role;

--------------------------------------------------------------------
--  Internal functions used by SYS during upgrade/downgrade
--------------------------------------------------------------------

CREATE OR REPLACE PACKAGE dbms_registry_sys
AS

PROCEDURE drop_user  (username IN VARCHAR2);
 
PROCEDURE validate_catalog;

PROCEDURE validate_catproc;

PROCEDURE validate_catjava;

PROCEDURE validate_components;

FUNCTION  time_stamp   (comp_id IN VARCHAR2) RETURN VARCHAR2;

FUNCTION  time_stamp_display (comp_id IN VARCHAR2) RETURN VARCHAR2;

FUNCTION  time_stamp_comp_display (comp_id IN VARCHAR2) RETURN VARCHAR2;

FUNCTION  catcon_query (comp_id IN VARCHAR2) RETURN NUMBER;

FUNCTION  dbupg_script (comp_id IN VARCHAR2) RETURN VARCHAR2;

FUNCTION  dbdwg_script (comp_id IN VARCHAR2) RETURN VARCHAR2;

FUNCTION  relod_script (comp_id IN VARCHAR2) RETURN VARCHAR2;

FUNCTION  removal_script (comp_id IN VARCHAR2) RETURN VARCHAR2;

PROCEDURE check_component_downgrades;

PROCEDURE record_action (action    IN VARCHAR2, 
                         action_id IN NUMBER,
                         comments  IN VARCHAR2);

FUNCTION diagnostics RETURN NUMBER;

PROCEDURE gather_stats (comp_id IN VARCHAR2);

PROCEDURE populate;

FUNCTION select_props_data (pname IN VARCHAR2) RETURN BOOLEAN;

FUNCTION delete_props_data (pname IN VARCHAR2) RETURN BOOLEAN;

FUNCTION insert_props_data (pname    IN VARCHAR2,
                            pvalue   IN VARCHAR2, 
                            pcomment IN VARCHAR2) RETURN BOOLEAN;

FUNCTION update_props_data (pname    IN VARCHAR2,
                            pvalue   IN VARCHAR2) RETURN BOOLEAN;

PROCEDURE set_registry_context (ctx_variable IN VARCHAR2,
                                ctx_value    IN VARCHAR2);

FUNCTION utlmmig_script_name RETURN VARCHAR2;

PROCEDURE resolve_catjava;

FUNCTION capitalize_single_quoted(comp IN VARCHAR2) RETURN VARCHAR2;

END dbms_registry_sys;
/

show errors

Rem -------------------------------------------------------------------------
Rem DBA_REGISTRY view
Rem -------------------------------------------------------------------------

CREATE OR REPLACE VIEW dba_registry (
            comp_id, comp_name, version, version_full, status,
            modified, namespace, control, schema, procedure,
            startup, parent_id, other_schemas)
AS
SELECT r.cid, r.cname, r.version, r.version_full,
       SUBSTR(dbms_registry.status_name(r.status),1,11),
       TO_CHAR(r.modified,'DD-MON-YYYY HH24:MI:SS'), 
       r.namespace, i.name, s.name, r.vproc,
       DECODE(bitand(r.flags,1),1,'REQUIRED',NULL), r.pid,
       dbms_registry.schema_list_string(r.cid)
FROM registry$ r, user$ s, user$ i
WHERE r.schema# = s.user# AND r.invoker#=i.user#;
         
CREATE OR REPLACE PUBLIC SYNONYM dba_registry FOR dba_registry;
GRANT SELECT ON dba_registry TO SELECT_CATALOG_ROLE;


execute CDBView.create_cdbview(false,'SYS','DBA_REGISTRY','CDB_REGISTRY');
grant select on SYS.CDB_registry to select_catalog_role
/
create or replace public synonym CDB_registry for SYS.CDB_registry
/

Rem -------------------------------------------------------------------------
Rem DBA_SERVER_REGISTRY view
Rem -------------------------------------------------------------------------

CREATE OR REPLACE VIEW dba_server_registry (
            comp_id, comp_name, version, version_full, status,
            modified, control, schema, procedure,
            startup, parent_id, other_schemas)
AS 
SELECT comp_id, comp_name, version, version_full, status,
       modified, control, schema, procedure,
       startup, parent_id, other_schemas
FROM dba_registry 
WHERE namespace='SERVER';

CREATE OR REPLACE PUBLIC SYNONYM dba_server_registry FOR dba_server_registry;
GRANT SELECT ON dba_server_registry TO SELECT_CATALOG_ROLE;


execute CDBView.create_cdbview(false,'SYS','DBA_SERVER_REGISTRY','CDB_SERVER_REGISTRY');
grant select on SYS.CDB_server_registry to select_catalog_role
/
create or replace public synonym CDB_server_registry for SYS.CDB_server_registry
/

Rem -------------------------------------------------------------------------
Rem USER_REGISTRY view
Rem -------------------------------------------------------------------------

CREATE OR REPLACE VIEW user_registry (
            comp_id, comp_name, version, version_full, status,
            modified, namespace, control, schema, procedure,
            startup, parent_id, other_schemas)
AS
SELECT r.cid, r.cname, r.version, r.version_full,
       SUBSTR(dbms_registry.status_name(r.status),1,11),
       TO_CHAR(r.modified,'DD-MON-YYYY HH24:MI:SS'), 
       r.namespace, i.name, s.name, r.vproc,
       DECODE(bitand(r.flags,1),1,'REQUIRED',NULL), r.pid,
       dbms_registry.schema_list_string(r.cid)
FROM registry$ r, user$ s, user$ i
WHERE (r.schema# = USERENV('SCHEMAID') OR r.invoker# = USERENV('SCHEMAID'))
      AND r.schema# = s.user# AND r.invoker#=i.user#;

CREATE OR REPLACE PUBLIC SYNONYM user_registry FOR user_registry;
GRANT READ ON user_registry TO PUBLIC;

Rem -------------------------------------------------------------------------
Rem DBA_REGISTRY_HIERARCHY view
Rem -------------------------------------------------------------------------

CREATE OR REPLACE VIEW dba_registry_hierarchy (
            namespace, comp_id, version, version_full, status, modified)
AS
SELECT namespace, LPAD(' ',2*(LEVEL-1)) || LEVEL || ' ' || cid, version,
       version_full, SUBSTR(dbms_registry.status_name(status),1,11),
       TO_CHAR(modified,'DD-MON-YYYY HH24:MI:SS')
FROM registry$ 
START WITH pid IS NULL
CONNECT BY PRIOR cid = pid and PRIOR namespace = namespace;

CREATE OR REPLACE PUBLIC SYNONYM dba_registry_hierarchy 
                  FOR dba_registry_hierarchy;
GRANT SELECT ON dba_registry_hierarchy TO SELECT_CATALOG_ROLE;


execute CDBView.create_cdbview(false,'SYS','DBA_REGISTRY_HIERARCHY','CDB_REGISTRY_HIERARCHY');
grant select on SYS.CDB_registry_hierarchy to select_catalog_role
/
create or replace public synonym CDB_registry_hierarchy for SYS.CDB_registry_hierarchy
/

Rem -------------------------------------------------------------------------
Rem ALL_REGISTRY_BANNERS view
Rem    Public view of valid components in the database
Rem -------------------------------------------------------------------------

CREATE OR REPLACE VIEW all_registry_banners 
AS
SELECT banner, banner_full FROM registry$
WHERE status = 1; 

CREATE OR REPLACE PUBLIC SYNONYM all_registry_banners
                  FOR all_registry_banners;
GRANT READ ON all_registry_banners TO PUBLIC;

Rem -------------------------------------------------------------------------
Rem  CREATE log view 
Rem -------------------------------------------------------------------------

CREATE OR REPLACE VIEW dba_registry_log (
            optime, namespace, comp_id, operation, message)
AS
SELECT optime,
       namespace, cid,
       DECODE(operation,-1, 'START',
                         0, 'INVALID',
                         1, 'VALID',
                         2, 'LOADING',
                         3, 'LOADED',
                         4, 'UPGRADING',
                         5, 'UPGRADED',
                         6, 'DOWNGRADING',
                         7, 'DOWNGRADED',
                         8, 'REMOVING',
                         9, 'OPTION OFF',
                         10, 'NO SCRIPT',
                         99, 'REMOVED',
                         100, 'ERROR',
                         NULL),
       errmsg
FROM registry$log;

CREATE OR REPLACE PUBLIC SYNONYM dba_registry_log
                  FOR dba_registry_log;
GRANT SELECT ON dba_registry_log TO SELECT_CATALOG_ROLE;


execute CDBView.create_cdbview(false,'SYS','DBA_REGISTRY_LOG','CDB_REGISTRY_LOG');
grant select on SYS.CDB_registry_log to select_catalog_role
/
create or replace public synonym CDB_registry_log for SYS.CDB_registry_log
/

Rem -------------------------------------------------------------------------
Rem CREATE history VIEW
Rem -------------------------------------------------------------------------

CREATE OR REPLACE VIEW dba_registry_history (
  action_time, action, namespace, version, id, comments, bundle_series)
AS
SELECT action_time, action, namespace, version, id, comments, bundle_series
  FROM registry$history;

CREATE OR REPLACE PUBLIC SYNONYM dba_registry_history FOR dba_registry_history;
GRANT SELECT ON dba_registry_history TO SELECT_CATALOG_ROLE;



execute CDBView.create_cdbview(false,'SYS','DBA_REGISTRY_HISTORY','CDB_REGISTRY_HISTORY');
grant select on SYS.CDB_registry_history to select_catalog_role
/
create or replace public synonym CDB_registry_history for SYS.CDB_registry_history
/

Rem -------------------------------------------------------------------------
Rem CREATE progress VIEW
Rem -------------------------------------------------------------------------

CREATE OR REPLACE VIEW dba_registry_progress (
            comp_id, namespace, action, value, step, action_time)
AS
SELECT  cid, namespace, action, value, step, action_time
FROM registry$progress;

CREATE OR REPLACE PUBLIC SYNONYM dba_registry_progress 
                  FOR dba_registry_progress;
GRANT SELECT ON dba_registry_progress TO SELECT_CATALOG_ROLE;


execute CDBView.create_cdbview(false,'SYS','DBA_REGISTRY_PROGRESS','CDB_REGISTRY_PROGRESS');
grant select on SYS.CDB_registry_progress to select_catalog_role
/
create or replace public synonym CDB_registry_progress for SYS.CDB_registry_progress
/

Rem -------------------------------------------------------------------------
Rem CREATE dependencies VIEW
Rem -------------------------------------------------------------------------

CREATE OR REPLACE VIEW dba_registry_dependencies (
            comp_id, namespace, req_comp_id, req_namespace)
AS
SELECT  cid, namespace, req_cid, req_namespace
FROM registry$dependencies;

CREATE OR REPLACE PUBLIC SYNONYM dba_registry_dependencies 
                  FOR dba_registry_dependencies;
GRANT SELECT ON dba_registry_dependencies TO SELECT_CATALOG_ROLE;


execute CDBView.create_cdbview(false,'SYS','DBA_REGISTRY_DEPENDENCIES','CDB_REGISTRY_DEPENDENCIES');
grant select on SYS.CDB_registry_dependencies to select_catalog_role
/
create or replace public synonym CDB_registry_dependencies for SYS.CDB_registry_dependencies
/

Rem -------------------------------------------------------------------------
Rem CREATE database VIEW
Rem -------------------------------------------------------------------------
 
CREATE OR REPLACE VIEW dba_registry_database (
            platform_id, platform_name, edition)
AS
SELECT  platform_id, platform_name, edition
FROM registry$database;
 
CREATE OR REPLACE PUBLIC SYNONYM dba_registry_database
                   FOR dba_registry_database;
GRANT SELECT ON dba_registry_database TO SELECT_CATALOG_ROLE;


execute CDBView.create_cdbview(false,'SYS','DBA_REGISTRY_DATABASE','CDB_REGISTRY_DATABASE');
grant select on SYS.CDB_registry_database to select_catalog_role
/
create or replace public synonym CDB_registry_database for SYS.CDB_registry_database
/

Rem -------------------------------------------------------------------------
Rem CREATE error VIEWs from registry$error table
Rem -------------------------------------------------------------------------

-- dba_registry_error
create or replace view DBA_REGISTRY_ERROR
as
select * from sys.registry$error;

create or replace public synonym DBA_REGISTRY_ERROR for SYS.DBA_REGISTRY_ERROR;
grant select on DBA_REGISTRY_ERROR to select_catalog_role;

-- cdb_registry_error
execute CDBView.create_cdbview(false,'SYS','DBA_REGISTRY_ERROR','CDB_REGISTRY_ERROR');
grant select on SYS.CDB_REGISTRY_ERROR to select_catalog_role
/
create or replace public synonym CDB_REGISTRY_ERROR for SYS.CDB_REGISTRY_ERROR
/

Rem -------------------------------------------------------------------------
Rem CREATE schemas VIEW
Rem -------------------------------------------------------------------------
 
CREATE OR REPLACE VIEW dba_registry_schemas (
            namespace, comp_id, schema)
AS
  SELECT r.namespace, r.cid as comp_id, u.name as schema
    FROM registry$ r, user$ u
    WHERE r.schema#  = u.user#
  UNION ALL
     SELECT r.namespace, r.cid as comp_id, u.name as schema
     FROM registry$ r, registry$schemas s, user$ u
     WHERE r.cid = s.cid
           and s.schema# = u.user#
/
 
CREATE OR REPLACE PUBLIC SYNONYM dba_registry_schemas
                   FOR dba_registry_schemas;
GRANT SELECT ON dba_registry_schemas TO SELECT_CATALOG_ROLE;

execute CDBView.create_cdbview(false,'SYS','DBA_REGISTRY_SCHEMAS','CDB_REGISTRY_SCHEMAS');
create or replace public synonym CDB_registry_schemas for SYS.CDB_registry_schemas;
grant select on SYS.CDB_registry_schemas to select_catalog_role;

-- disable _oracle_script on script exit
@@?/rdbms/admin/sqlsessend.sql

OHA YOOOO