CREATE OR REPLACE VIEW SYS.V$PL_MANAGER
(
  USER#, 
  USER_NAME, 
  NAME, 
  TYPE, 
  BUCKET_ID, 
  LIST_POS, 
  UNUSED, 
  TRIG_USER, 
  TRIG_TABLE, 
  REF_COUNT, 
  ENTITY, 
  PAGES,
  PACKAGE_NAME
)
AS SELECT * FROM SYS.DV_PL_MANAGER 
/

CREATE OR REPLACE VIEW SYS.V$PL_REFSQLS
(
  USER#, 
  USER_NAME, 
  NAME, 
  ENTITY, 
  SQL_ID
)
AS SELECT * FROM SYS.DV_PL_REFSQLS 
/

CREATE OR REPLACE VIEW SYS.V$REPL_STATUS
(
  DATABASE_ROLE, 
  DATABASE_CONDITION, 
  SWITCHOVER_STATUS
)
AS SELECT * FROM SYS.DV_REPL_STATUS 
/

CREATE OR REPLACE VIEW SYS.V$SGASTAT
(
  AREA, 
  POOL, 
  NAME,
  VALUE
)
AS SELECT * FROM SYS.DV_GMA_STATS 
/

CREATE OR REPLACE VIEW SYS.V$SQLPOOL
(
  SQL_ID, 
  SQL_TYPE, 
  UID,
  REF_COUNT,
  VALID,
  CLEANED,
  IS_FREE,
  MCTX_PAGE_COUNT,
  MCTX_PAGE_FRIST,
  MCTX_PAGE_LAST,
  CURRENT_PAGE_ID,
  MCTX_PAGES,
  LARGE_PAGE,
  FIRST_OPTMZ_VARS,
  FIRST_OPTMZ_BUFF,
  LAST_LOAD_TIME,
  LAST_ACTIVE_TIME
)
AS SELECT * FROM SYS.DV_SQL_POOL 
/


CREATE OR REPLACE VIEW SYS.V$LIBRARYCACHE
(
  NAMESPACE,
  GETS,
  GETHITS,
  PINS,
  PINHITS,
  RELOADS,
  INVLIDATIONS
)
AS SELECT * FROM SYS.DV_LIBRARY_CACHE 
/


CREATE OR REPLACE VIEW SYS.V$SYSSTAT
(
  STATISTIC#,
  NAME,
  CLASS,
  VALUE
)
AS SELECT * FROM SYS.DV_SYS_STATS 
/

CREATE OR REPLACE VIEW SYS.V$SYSTEM
(
  ID,
  NAME,
  VALUE,
  COMMENTS,
  ACCUMULATIVE
)
AS SELECT * FROM SYS.DV_SYSTEM 
/

CREATE OR REPLACE VIEW SYS.V$SYSTEM_EVENT
(
  EVENT#,
  EVENT,
  P1,
  WAIT_CLASS,
  TOTAL_WAITS,
  TIME_WAITED,
  TIME_WAITED_MIRCO,
  AVERAGE_WAIT,
  AVERAGE_WAIT_MIRCO
)
AS SELECT * FROM SYS.DV_SYS_EVENTS 
/

CREATE OR REPLACE VIEW SYS.V$TABLESPACE
(
  ID,
  NAME,
  TEMPORARY,
  IN_MEMORY,
  AUTO_PURGE,
  EXTENT_SIZE,
  SEGMENT_COUNT,
  FILE_COUNT,
  STATUS,
  AUTO_OFFLINE,
  EXTENT_MANAGEMENT,
  EXTENT_ALLOCATION,
  ENCRYPT,
  PUNCHED_SIZE
)
AS SELECT * FROM SYS.DV_TABLESPACES 
/

CREATE OR REPLACE VIEW SYS.V$TEMP_POOL
(
  ID,
  TOTAL_VIRTUAL,
  FREE_VIRTUAL,
  PAGE_SIZE,
  TOTAL_PAGES,
  FREE_PAGES,
  PAGE_HWM,
  FREE_LIST,
  CLOSED_LIST,
  DISK_EXTENTS,
  SWAP_COUNT,
  FREE_EXTENTS,
  MAX_SWAP_COUNT
)
AS
  SELECT * FROM SYS.DV_TEMP_POOLS
/

CREATE OR REPLACE VIEW SYS.V$TRANSACTION
(
  SEG_ID,
  SLOT,
  XNUM,
  SCN,
  SID,
  STATUS,
  UNDO_COUNT,
  UNDO_FIRST,
  UNDO_LAST,
  BEGIN_TIME,
  TXN_PAGEID,
  RMID,
  REMAINED,
  EXEC_TIME
)
AS
  SELECT * FROM SYS.DV_TRANSACTIONS
/

CREATE OR REPLACE VIEW SYS.V$UNDO_SEGMENT
(
  ID,
  SEG_ENTRY,
  SEG_STATUS,
  TXN_PAGES,
  TXN_FREE_ITEM_CNT,
  TXN_FIRST,
  TXN_LAST,
  UNDO_PAGES,
  UNDO_FIRST,
  UNDO_LAST,
  FIRST_TIME,
  LAST_TIME,
  RETENTION_TIME,
  OW_SCN,
  BEGIN_TIME,
  TXN_CNT,
  REUSE_XP_PAGES,
  REU_UNXP_PAGES,
  USE_SPACE_PAGES,
  STEAL_XP_PAGES,
  STEAL_UNXP_PAGES,
  STEALED_XP_PAGES,
  STEALED_UNXP_PAGES,
  BUF_BUSY_WAITS
)
AS
  SELECT * FROM SYS.DV_UNDO_SEGMENTS
/

CREATE OR REPLACE VIEW SYS.V$UNDO_STAT
(
  BEGIN_TIME,
  END_TIME,
  TOTAL_UNDO_PAGES,
  REU_XP_PAGES,
  REU_UNXP_PAGES,
  USE_SPACE_PAGES,
  STEAL_XP_PAGES,
  STEAL_UNXP_PAGES,
  TXN_CNT,
  LONGEST_SQL_TIME,
  BUF_BUSY_WAITS,
  BUSY_WAITS_SEG,
  BUSY_SEG_PAGES,
  RETENTION_TIME
)
AS
  SELECT * FROM SYS.DV_UNDO_STATS
/

CREATE OR REPLACE VIEW SYS.V$INDEX_COALESCE
(
  USER_NAME,
  TABLE_NAME,
  INDEX_NAME,
  INDEX_PART_NAME,
  INDEX_SUBPART_NAME,
  NEED_RECYCLE,
  GARBAGE_RATIO,
  GARBAGE_SIZE,
  EMPTY_RATIO,
  EMPTY_SIZE,
  FIRST_CHILD_EMPTY_SIZE,
  RECYCLE_STAT,
  SEGMENT_SIZE,
  RECYCLED_SIZE,
  RECYCLED_REUSABLE,
  FIRST_RECYCLE_SCN,
  LAST_RECYCLE_SCN,
  OW_DEL_SCN,
  OW_RECYCLE_SCN,
  DELETE_SIZE,
  INSERT_SIZE,
  ALLOC_PAGES,
  SEGMENT_SCN,
  BTREE_LEVEL
)
AS
  SELECT * FROM SYS.DV_INDEX_COALESCE
/

CREATE OR REPLACE VIEW SYS.V$INDEX_RECYCLE
(
  UID,
  TABLE_ID,
  INDEX_ID,
  PART_ORG_SCN,
  XID,
  SCN,
  IS_TX_ACTIVE,
  MIN_SCN,
  CUR_SCN
)
AS
  SELECT * FROM SYS.DV_INDEX_RECYCLE
/

CREATE OR REPLACE VIEW SYS.V$INDEX_REBUILD
(
  UID,
  TABLE_ID,
  ALTER_INDEX_TYPE,
  INDEX_NAME,
  INDEX_PART_NAME,
  STATE,
  SCN
)
AS
  SELECT * FROM SYS.DV_INDEX_REBUILD
/

CREATE OR REPLACE VIEW SYS.V$VERSION
(
  VERSION
)
AS
  SELECT * FROM SYS.DV_VERSION
/

CREATE OR REPLACE VIEW SYS.V$USER_ASTATUS_MAP
(
  STATUS#,
  STATUS
)
AS 
  SELECT * FROM SYS.DV_USER_ASTATUS_MAP
/

CREATE OR REPLACE VIEW SYS.V$TEMP_UNDO_SEGMENT
(
  ID,
  SEG_ENTRY,
  TXN_PAGES,
  UNDO_PAGES,
  UNDO_FIRST,
  UNDO_LAST,
  FIRST_TIME,
  LAST_TIME,
  RETENTION_TIME,
  OW_SCN
)
AS SELECT * FROM SYS.DV_TEMP_UNDO_SEGMENT
/

CREATE OR REPLACE VIEW SYS.V$REACTOR_POOL
(
  REACTOR_ID,
  EPOLL_FD,
  REACTOR_STATUS,
  SESSION_COUNT,
  KILLEVENT_R_POS,
  KILLEVENT_W_POS,
  ACTIVE_AGENT_COUNT,
  BLANK_AGENT_COUNT,
  IDLE_AGENT_COUNT,
  OPTIMIZED_AGENT_COUNT,
  MAX_AGENT_COUNT,
  MODE,
  DEDICATED_AGENT_COUNT,
  FREE_DEDICATED_AGENT_COUNT,
  EMERG_SESSION_COUNT,
  BUSY_SCHEDULING_COUNT,
  PRIV_ACTIVE_AGENT_COUNT,
  PRIV_BLANK_AGENT_COUNT,
  PRIV_IDLE_AGENT_COUNT,
  PRIV_OPTIMIZED_AGENT_COUNT,
  PRIV_MAX_AGENT_COUNT
)
AS SELECT * FROM SYS.DV_REACTOR_POOLS
/

CREATE OR REPLACE VIEW SYS.V$RESOURCE_MAP
(
  RESOURCE#,
  TYPE#,
  NAME
)
AS SELECT * FROM SYS.DV_RESOURCE_MAP
/

CREATE OR REPLACE VIEW SYS.V$SEGMENT_STATISTICS
(
  OWNER,
  OBJECT_NAME,
  SUBOBJECT_NAME,
  TS#,
  OBJECT_TYPE,
  STATISTIC_NAME,
  STATISTIC#,
  VALUE
)
AS SELECT * FROM SYS.DV_SEGMENT_STATS
/

CREATE OR REPLACE VIEW SYS.V$SESSION
(
  SID,
  SPID,
  SERIAL#,
  USER#,
  USERNAME,
  CURR_SCHEMA,
  PIPE_TYPE,
  CLIENT_IP,
  CLIENT_PORT,
  CLIENT_UDS_PATH,
  SERVER_IP,
  SERVER_PORT,
  SERVER_UDS_PATH,
  SERVER_MODE,
  OSUSER,
  MACHINE,
  PROGRAM,
  AUTO_COMMIT,
  CLIENT_VERSION,
  TYPE,
  LOGON_TIME,
  STATUS,
  LOCK_WAIT,
  WAIT_SID,
  EXECUTIONS,
  SIMPLE_QUERIES,
  DISK_READS,
  BUFFER_GETS,
  CR_GETS,
  CURRENT_SQL,
  SQL_EXEC_START,
  SQL_ID,
  ATOMIC_OPERS,
  REDO_BYTES,
  COMMITS,
  NOWAIT_COMMITS,
  XA_COMMITS,
  ROLLBACKS,
  XA_ROLLBACKS,
  LOCAL_TXN_TIMES,
  XA_TXN_TIMES,
  PARSES,
  HARD_PARSES,
  EVENT#,
  EVENT,
  SORTS,
  PROCESSED_ROWS,
  IO_WAIT_TIME,
  CON_WAIT_TIME,
  CPU_TIME,
  ELAPSED_TIME,
  ISOLEVEL,
  MODULE,
  VMP_PAGES,
  LARGE_VMP_PAGES,
  RES_CONTROL_GROUP,
  RES_IO_WAIT_TIME,
  RES_QUEUE_TIME,
  PRIV_FLAG,
  QUERY_SCN,
  STMT_COUNT,
  MIN_SCN,
  PREV_SQL_ID,
  DCS_BUFFER_GETS,
  DCS_BUFFER_SENDS,
  DCS_CR_GETS,
  DCS_CR_SENDS
)
AS
  SELECT * FROM SYS.DV_SESSIONS
/

CREATE OR REPLACE VIEW SYS.V$SESSION_EX
(
  SID,
  SQL_ID,
  EVENT#,
  EVENT,
  CONN_NODE
)
AS
  SELECT * FROM SYS.DV_SESSIONS_EX
/

CREATE OR REPLACE VIEW SYS.V$LOCKED_OBJECT
(
  SESSION_ID,
  XIDUSN,
  XIDSLOT,
  XIDSQN,
  USER_NAME,
  OBJECT_ID,
  OBJECT_NAME,
  CLIENT_OS_NAME,
  CLIENT_PROGREM,
  LMODE
)
AS
  SELECT * FROM SYS.DV_LOCKED_OBJECTS 
/

CREATE OR REPLACE VIEW SYS.V$LOGFILE
(
  INSTANCE,
  ID,
  STATUS,
  TYPE,
  FILE_NAME,
  BYTES,
  WRITE_POS,
  FREE_SIZE,
  RESET_ID,
  ASN,
  BLOCK_SIZE,
  CURRENT_POINT,
  ARCH_POS
)
AS
  SELECT * FROM SYS.DV_LOG_FILES 
/

CREATE OR REPLACE VIEW SYS.V$MANAGED_STANDBY
(
  PROCESS,
  STATUS,
  RESETLOG_ID,
  THREAD#,
  SEQUENCE#,
  FLUSH_POINT,
  PRIMARY_CURR_POINT,
  REPLAY_POINT
)
AS
  SELECT * FROM SYS.DV_STANDBYS 
/

CREATE OR REPLACE VIEW SYS.V$ME
(
  SID,
  USER_NAME,
  USER_ID,
  CURR_SCHEMA,
  SPID,
  OS_PROG,
  OS_HOST,
  OS_USER,
  CLIENT_IP,
  CLIENT_PORT
)
AS
  SELECT * FROM SYS.DV_ME 
/

CREATE OR REPLACE VIEW SYS.V$OPEN_CURSOR
(
  SESSION_ID,
  STMT_ID,
  USER_NAME,
  SQL_TEXT,
  SQL_TYPE,
  SQL_ID,
  STATUS,
  CURSOR_TYPE,
  VM_OPEN_PAGES,
  VM_CLOSE_PAGES,
  VM_MAX_OPEN_PAGES,
  VM_ALLOC_PAGES,
  VM_FREE_PAGES,
  VM_SWAPIN_PAGES,
  VM_SWAPOUT_PAGES,
  QUERY_SCN,
  LAST_SQL_ACTIVE_TIME,
  ELAPSED_TIME,
  DISK_READS,
  IO_WAIT_TIME,
  BUFFER_GETS,
  CR_GETS,
  CON_WAIT_TIME,
  CPU_TIME
)
AS
  SELECT * FROM SYS.DV_OPEN_CURSORS 
/

CREATE OR REPLACE VIEW SYS.V$PARAMETER
(
  NAME,
  VALUE,
  RUNTIME_VALUE,
  DEFAULT_VALUE,
  ISDEFAULT,
  MODIFIABLE,
  DESCRIPTION,
  RANGE,
  DATATYPE,
  EFFECTIVE
)
AS
  SELECT * FROM SYS.DV_PARAMETERS 
/

CREATE OR REPLACE VIEW SYS.V$FREE_SPACE
(
    TABLESPACE_NAME,                  
    FILE_ID,                         
    BLOCK_ID,                        
    BYTES,                           
    BLOCKS,                           
    RELATIVE_FNO 
)
AS
  SELECT * FROM SYS.DV_FREE_SPACE
/

CREATE OR REPLACE VIEW SYS.V$HA_SYNC_INFO
(
    THREAD#,          
    STATUS,           
    LOCAL_HOST,        
    ROLE_VALID,        
    NET_MODE,
    PEER_HOST, 
    PEER_PORT,        
    LOCAL_SEND_POINT,        
    PEER_FLUSH_POINT,         
    PEER_CONTFLUSH_POINT,
    PEER_BUILDING,
    LOCAL_LFN,
    LOCAL_LSN,
    PEER_LFN,
    PEER_LSN,
    FLUSH_LAG,
    REPLAY_LAG,
    BUILD_TYPE,
    BUILD_PROGRESS,
    BUILD_STAGE,
    BUILD_SYNCED_STAGE_SIZE,
    BUILD_TOTAL_STAGE_SIZE,
    BUILD_TIME
)
AS
  SELECT * FROM SYS.DV_HA_SYNC_INFO 
/

CREATE OR REPLACE VIEW SYS.V$HBA
(
    TYPE,          
    USER_NAME,           
    ADDRESS
)
AS
  SELECT * FROM SYS.DV_HBA
/

CREATE OR REPLACE VIEW SYS.V$INSTANCE
(
    INSTANCE_ID,     
    INSTANCE_NAME,   
    STATUS,          
    KERNEL_SCN,      
    SHUTDOWN_PHASE,  
    STARTUP_TIME,    
    HOST_NAME,       
    PLATFORM_NAME,
    CONNECT_STATUS
)
AS
  SELECT * FROM SYS.DV_INSTANCE
/

CREATE OR REPLACE VIEW SYS.V$JOBS_RUNNING
(
    JOBNO,     
    SESSION_ID,   
    SERIAL_ID
)
AS
  SELECT * FROM SYS.DV_RUNNING_JOBS
/

CREATE OR REPLACE VIEW SYS.V$LATCH
(
    ID,        
    NAME,      
    GETS,      
    MISSES,    
    SPIN_GETS, 
    WAIT_TIME
)
AS
  SELECT * FROM SYS.DV_LATCHS
/

CREATE OR REPLACE VIEW SYS.V$LOCK
(
    SID,     
    TYPE,    
    ID1,     
    ID2,     
    LMODE,   
    BLOCK,
    RMID
)
AS
  SELECT * FROM SYS.DV_LOCKS
/

CREATE OR REPLACE VIEW V$BUF_INFO
(
    IDX,     
    FILE_ID,    
    PAGE_ID,     
    OWNER_ID,     
    OWNER_LOCK,   
    CONVERTING_INST,     
    CONVERTING_CUR_LOCK,    
    CONVERTING_REQ_LOCK,     
    CONVERTQ_LEN,     
    EDP_MAP,   
    CONVERTING_REQ_SID,
    CONVERTING_REQ_RSN,     
    PART_ID,
    READONLY_COPIES,
    LAST_EDP,
    IN_RECOVERY,
    REFORM_PROMOTE,
    LSN,
    RECOVERY_SKIP,
    RECYCLING,
    MASTER_ID,
)
AS
  SELECT * FROM SYS.DV_DRC_BUF_INFO
/

CREATE OR REPLACE VIEW V$LOCAL_LOCK_INFO
(
    IDX,
    DRID_TYPE,
    DRID_UID,
    DRID_ID,
    DRID_IDX,
    DRID_PART,
    DRID_SUBPART,
    IS_OWNER,
    IS_LOCKED,
    COUNT,
    LATCH_SHARE_COUNT,
    LATCH_STAT,
    LATCH_SID,
    IS_RELEASING,
    LOCK_MODE
)
AS
  SELECT * FROM SYS.DV_DRC_LOCAL_LOCK_INFO
/

CREATE OR REPLACE VIEW V$RES_RATIO
(
    DRC_RESOURCE,     
    USED,    
    TOTAL,     
    RATIO
)
AS
  SELECT * FROM SYS.DV_DRC_RES_RATIO
/

CREATE OR REPLACE VIEW V$GLOBAL_RES
(
    DRC_RESOURCE,
    BUCKET_NUM, 
    POOL_RECYCLE_POS,
    POOL_FREE_LIST,
    BUCKETS_COUNT,
    BUCKETS_FIRST
)
AS
  SELECT * FROM SYS.DV_DRC_GLOBAL_RES
/

CREATE OR REPLACE VIEW V$RES_MAP
(
    DRC_RESOURCE,
    BUCKET_NUM, 
    POOL_RECYCLE_POS,
    POOL_FREE_LIST,
    BUCKETS_COUNT,
    BUCKETS_FIRST
)
AS
  SELECT * FROM SYS.DV_DRC_RES_MAP
/

CREATE OR REPLACE VIEW V$BUF_CTRL_INFO
(
    POOL_ID,     
    FILE_ID,    
    PAGE_ID, 
    LATCH_SHARE_COUNT, 
    LATCH_SID,
    LATCH_STAT,
    LATCH_XSID,
    LOAD_STATUS,
    IS_READONLY,
    IS_DIRTY,
    IS_REMOTE_DIRTY,
    IS_MARKED,
    IN_OLD,
    IN_CKPT,
    LOCK_MODE,
    IS_EDP,
    REF_NUM,
    LASTEST_LFN,
    EDP_SCN,
    EDP_MAP,
    NEED_FLUSH,
    BEEN_LOADED,
    IN_RECOVERY,
    LAST_CKPT_TIME,
    IS_RESIDENT,
    IS_PINNED
)
AS
  SELECT * FROM SYS.DV_BUF_CTRL_INFO
/

CREATE OR REPLACE VIEW SYS.V$BUFFER_POOL_STATISTICS
(
  ID,
  NAME,
  SET_MSIZE,
  CNUM_REPL,
  CNUM_WRITE,
  CNUM_FREE,
  CNUM_PINNED,
  CNUM_RO,
  OLD_LEN,
  STATS_LEN,
  RECYCLED,
  WRITE_LEN,
  RECYCLE_GROUP,
  COLD_DIRTY_GROUP,
  TOTAL_GROUP,
  LOCAL_MASTER,
  REMOTE_MASTER
)
AS
  SELECT * FROM SYS.DV_BUFFER_POOL_STATS
/

CREATE OR REPLACE VIEW SYS.V$CONTROLFILE
(
  STATUS, 
  NAME, 
  IS_RECOVERY_DEST_FILE, 
  BLOCK_SIZE, 
  FILE_SIZE_BLKS
)
AS
  SELECT * FROM SYS.DV_CONTROL_FILES
/

CREATE OR REPLACE VIEW SYS.V$DATABASE
(
  DBID, 
  NAME, 
  STATUS, 
  OPEN_STATUS, 
  OPEN_COUNT, 
  INIT_TIME, 
  CURRENT_SCN,
  RCY_POINT,
  LRP_POINT,
  CKPT_ID,
  LSN,
  LFN,
  LOG_COUNT,
  LOG_FIRST,
  LOG_LAST,
  LOG_FREE_SIZE,
  LOG_MODE,
  SPACE_COUNT,
  DEVICE_COUNT,
  DW_START,
  DW_END,
  PROTECTION_MODE,
  DATABASE_ROLE,
  DATABASE_CONDITION,
  SWITCHOVER_STATUS,
  FAILOVER_STATUS,
  ARCHIVELOG_CHANGE,
  LREP_POINT,
  LREP_MODE,
  OPEN_INCONSISTENCY,
  CHARACTER_SET,
  COMMIT_SCN,
  NEED_REPAIR_REASON,
  READONLY_REASON,
  BIN_SYS_VERSION,
  DATA_SYS_VERSION,
  RESETLOG,
  MIN_SCN,
  ARCHIVELOG_SIZE,
  DDL_EXEC_STATUS
)
AS
  SELECT * FROM SYS.DV_DATABASE
/

CREATE OR REPLACE VIEW SYS.V$DATAFILE
(
  ID, 
  TABLESPACE_ID, 
  STATUS, 
  TYPE, 
  FILE_NAME, 
  BYTES, 
  AUTO_EXTEND,
  AUTO_EXTEND_SIZE,
  MAX_SIZE,
  HIGH_WATER_MARK,
  ALLOC_SIZE,
  COMPRESSION,
  PUNCHED
)
AS
  SELECT * FROM SYS.DV_DATA_FILES
/

CREATE OR REPLACE VIEW SYS.V$DB_OBJECT_CACHE
(
  OWNER, 
  NAME, 
  NAMESPACE, 
  TYPE, 
  LOADS, 
  LOCKS, 
  HASH_VALUE,
  LOCK_MODE,
  STATUS
)
AS
  SELECT * FROM SYS.DV_OBJECT_CACHE
/

CREATE OR REPLACE VIEW SYS.V$DC_POOL
(
  POOL_OPT_COUNT, 
  POOL_PAGE_COUNT, 
  POOL_FREE_PAGE_COUNT, 
  LRU_COUNT, 
  LRU_PAGE_COUNT, 
  LRU_LOCKED_COUNT, 
  LRU_LOCKED_PAGE_COUNT,
  LRU_RECYCLABLE_COUNT,
  LRU_RECYCLABLE_PAGE_COUNT
)
AS
  SELECT * FROM SYS.DV_DC_POOLS
/

CREATE OR REPLACE VIEW SYS.V$DYNAMIC_VIEW
(
  USER_NAME, 
  NAME, 
  ID, 
  COLUMN_COUNT
)
AS
  SELECT * FROM SYS.DV_DYNAMIC_VIEWS
/

CREATE OR REPLACE VIEW SYS.V$DYNAMIC_VIEW_COLUMN
(
  USER_NAME, 
  VIEW_NAME, 
  COLUMN_ID, 
  COLUMN_NAME, 
  DATA_TYPE, 
  DATA_LENGTH, 
  DATA_PRECISION,
  DATA_SCALE
)
AS
  SELECT * FROM SYS.DV_DYNAMIC_VIEW_COLS
/

CREATE OR REPLACE VIEW SYS.V$ALL_TRANSACTION
(
 SEG_ID,
 SLOT,
 XNUM,
 SCN,
 SID,
 STATUS,
 UNDO_COUNT,
 UNDO_FIRST,
 UNDO_LAST,
 TXN_PAGEID,
 RMID,
 REMAINED
)
AS
  SELECT * FROM SYS.DV_ALL_TRANS
/

CREATE OR REPLACE VIEW SYS.V$GLOBAL_TRANSACTIONS
(
 GLOBAL_TRAN_ID,
 FORMAT_ID,
 BRANCH_ID,
 LOCAL_TRAN_ID,
 STATUS,
 SID,
 RMID
)
AS
  SELECT * FROM SYS.DV_GLOBAL_TRANSACTIONS
/

CREATE OR REPLACE VIEW SYS.V$ARCHIVED_LOG
(
 RECID,
 STAMP,
 NAME,
 DEST_ID,
 THREAD#,
 SEQUENCE#,
 RESETLOGS_CHANGE#,
 RESETLOGS_TIME,
 RESETLOGS_ID,
 FIRST_CHANGE#,
 FIRST_TIME,
 NEXT_CHANGE#,
 NEXT_TIME,
 BLOCKS,
 BLOCK_SIZE,
 CREATOR,
 REGISTRAR,
 STANDBY_DEST,
 ARCHIVED,
 APPLIED,
 DELETED,
 STATUS,
 COMPLETION_TIME,
 DICTIONARY_BEGIN,
 DICTIONARY_END,
 END_OF_REDO,
 BACKUP_COUNT,
 ARCHIVAL_THREAD#,
 ACTIVATION#,
 IS_RECOVERY_DEST_FILE,
 COMPRESSED,
 FAL,
 END_OF_REDO_TYPE,
 BACKED_BY_VSS,
 CON_ID,
 REAL_SIZE,
 FIRST_LSN,
 LAST_LSN
)
AS
  SELECT * FROM SYS.DV_ARCHIVED_LOGS
/

CREATE OR REPLACE VIEW SYS.V$ARCHIVE_DEST_STATUS
(
 DEST_ID,
 DEST_NAME,
 STATUS,
 TYPE,
 DATABASE_MODE,
 PROTECTION_MODE,
 DESTINATION,
 DB_UNIQUE_NAME,
 SYNCHRONIZATION_STATUS,
 SYNCHRONIZED
)
AS
  SELECT * FROM SYS.DV_ARCHIVE_DEST_STATUS
/

CREATE OR REPLACE VIEW SYS.V$ARCHIVE_GAP
(
 THREAD#,
 LOW_SEQUENCE#,
 HIGH_SEQUENCE#
)
AS
  SELECT * FROM SYS.DV_ARCHIVE_GAPS
/

CREATE OR REPLACE VIEW SYS.V$ARCHIVE_PROCESSES
(
 PROCESS,
 STATUS,
 LOG_SEQUENCE,
 STATE,
 ROLES,
 CON_ID
)
AS
  SELECT * FROM SYS.DV_ARCHIVE_THREADS
/

CREATE OR REPLACE VIEW SYS.V$BACKUP_PROCESS
(
 TYPE,
 PROGRESS,
 STAGE,
 STATUS,
 ERR_NO,
 ERR_MSG,
 TOTAL_PROC,
 FREE_PROC
)
AS
  SELECT  * FROM SYS.DV_BACKUP_PROCESSES
/

CREATE OR REPLACE VIEW SYS.V$BUFFER_POOL
(
 ID,
 NAME,
 PAGE_SIZE,
 CURRENT_SIZE,
 BUFFERS,
 FREE
)
AS
  SELECT * FROM SYS.DV_BUFFER_POOLS
/


CREATE OR REPLACE VIEW SYS.V$USER_PARAMETER
(
  NAME,
  VALUE,
  RUNTIME_VALUE,
  DEFAULT_VALUE,
  ISDEFAULT,
  MODIFIABLE,
  DESCRIPTION,
  RANGE,
  DATATYPE,
  EFFECTIVE
)
AS
  SELECT * FROM SYS.DV_USER_PARAMETERS
/

CREATE OR REPLACE VIEW SYS.V$SESSION_EVENT
(
  SID,
  EVENT#,
  EVENT,
  P1,
  WAIT_CLASS,
  TOTAL_WAITS,
  TIME_WAITED,
  TIME_WAITED_MIRCO,
  AVERAGE_WAIT,
  AVERAGE_WAIT_MIRCO,
  TENANT_ID
)
AS
  SELECT * FROM SYS.DV_SESSION_EVENTS S WHERE DBE_DIAGNOSE.TENANT_CHECK(0, S.TENANT_ID)
/

CREATE OR REPLACE VIEW SYS.V$SESSION_WAIT
(
  SID,
  EVENT#,
  EVENT,
  P1,
  WAIT_CLASS,
  STATE,
  WAIT_BEGIN_TIME,
  WAIT_TIME_MIRCO,
  SECONDS_IN_WAIT,
  TENANT_ID
)
AS
  SELECT * FROM SYS.DV_SESSION_WAITS S WHERE DBE_DIAGNOSE.TENANT_CHECK(0, S.TENANT_ID)
/

CREATE OR REPLACE VIEW SYS.V$SGA
(
  NAME,
  VALUE
)
AS
  SELECT * FROM SYS.DV_GMA
/

CREATE OR REPLACE VIEW SYS.V$SPINLOCK
(
  SID,
  TYPE,
  SPINS,
  SLEEPS,
  FAILS
)
AS
  SELECT * FROM SYS.DV_SPINLOCKS
/

CREATE OR REPLACE VIEW SYS.V$DLSLOCK
(
  IDX,
  DRID_TYPE,
  DRID_UID,
  DRID_ID,
  DRID_IDX,
  DRID_PART,
  DRID_SUBPART,
  MODE,
  PART_ID,
  GRANTED_MAP,
  CONVERTQ_LEN,
  CONVERTING
)
AS
  SELECT * FROM SYS.DV_DLSLOCKS
/

CREATE OR REPLACE VIEW SYS.V$SQLAREA
(
  SQL_TEXT,         
  SQL_ID,           
  EXECUTIONS,       
  DISK_READS,       
  BUFFER_GETS,
  CR_GETS,      
  SORTS,            
  PARSE_TIME,       
  PARSE_CALLS,      
  PROCESSED_ROWS,   
  PARSING_USER_ID,  
  PARSING_USER_NAME,
  MODULE,           
  IO_WAIT_TIME,     
  CON_WAIT_TIME,
  CPU_TIME,
  ELAPSED_TIME,     
  LAST_LOAD_TIME,   
  PROGRAM_ID,       
  PROGRAM_LINE#,    
  LAST_ACTIVE_TIME, 
  REF_COUNT,        
  IS_FREE,          
  CLEANED,          
  PAGES,            
  VALID,            
  SHARABLE_MEM,
  VM_OPEN_PAGES,
  VM_CLOSE_PAGES,
  VM_SWAPIN_PAGES,
  VM_FREE_PAGES,
  NETWORK_TIME,  
  PDOWN_SQL_ID,
  VM_ALLOC_PAGES,
  VM_MAX_OPEN_PAGES,
  VM_SWAPOUT_PAGES,
  DCS_BUFFER_GETS,
  DCS_CR_GETS,
  DCS_NET_TIME
)
AS
  SELECT * FROM SYS.DV_SQLS
/

CREATE OR REPLACE VIEW SYS.V$USER_ADVISORY_LOCKS
(
  SID,
  LOCK_NAME,
  LOCK_TIMES,
  LOCK_SCN
)
AS
  SELECT * FROM SYS.DV_USER_ADVISORY_LOCKS
/

CREATE OR REPLACE VIEW SYS.V$WAITSTAT
(
  CLASS,
  COUNT,
  TIME
)
AS
  SELECT * FROM SYS.DV_WAIT_STATS
/

CREATE OR REPLACE VIEW SYS.V$VM_FUNC_STACK
(
  FUNC_STACK,
  REF_COUNT
)
AS
  SELECT * FROM SYS.DV_VM_FUNC_STACK
/

CREATE OR REPLACE VIEW SYS.V$XACT_LOCK
(
  SID, 
  SERIAL#, 
  LOCK_NAME, 
  LOCK_TIMES
)
AS SELECT * FROM SYS.DV_XACT_LOCKS 
/


CREATE OR REPLACE PUBLIC SYNONYM  V$PL_REFSQLS                  FOR SYS.V$PL_REFSQLS 
/

CREATE OR REPLACE PUBLIC SYNONYM  V$REPL_STATUS                 FOR SYS.V$REPL_STATUS 
/

CREATE OR REPLACE PUBLIC SYNONYM  V$SGASTAT                     FOR SYS.V$SGASTAT 
/

CREATE OR REPLACE PUBLIC SYNONYM  V$SQLPOOL                     FOR SYS.V$SQLPOOL 
/

CREATE OR REPLACE PUBLIC SYNONYM  V$LIBRARYCACHE                FOR SYS.V$LIBRARYCACHE 
/

CREATE OR REPLACE PUBLIC SYNONYM  V$UNDO_SEGMENT                FOR SYS.V$UNDO_SEGMENT 
/

CREATE OR REPLACE PUBLIC SYNONYM  V$TEMP_UNDO_SEGMENT           FOR SYS.V$TEMP_UNDO_SEGMENT 
/

CREATE OR REPLACE PUBLIC SYNONYM  V$OPEN_CURSOR                 FOR SYS.V$OPEN_CURSOR 
/

CREATE OR REPLACE PUBLIC SYNONYM  V$DC_POOL                     FOR SYS.V$DC_POOL 
/

CREATE OR REPLACE PUBLIC SYNONYM  V$PL_MANAGER                  FOR SYS.V$PL_MANAGER 
/

CREATE OR REPLACE PUBLIC SYNONYM  V$FREE_SPACE                  FOR SYS.V$FREE_SPACE
/

CREATE OR REPLACE PUBLIC SYNONYM  V$HA_SYNC_INFO                FOR SYS.V$HA_SYNC_INFO
/

CREATE OR REPLACE PUBLIC SYNONYM  V$HBA                         FOR SYS.V$HBA
/

CREATE OR REPLACE PUBLIC SYNONYM  V$INSTANCE                    FOR SYS.V$INSTANCE
/

CREATE OR REPLACE PUBLIC SYNONYM  V$JOBS_RUNNING                FOR SYS.V$JOBS_RUNNING
/

CREATE OR REPLACE PUBLIC SYNONYM  V$LOGFILE                     FOR SYS.V$LOGFILE 
/
CREATE OR REPLACE PUBLIC SYNONYM  V$SESSION                     FOR SYS.V$SESSION 
/
CREATE OR REPLACE PUBLIC SYNONYM  V$BUFFER_POOL                 FOR SYS.V$BUFFER_POOL 
/

CREATE OR REPLACE PUBLIC SYNONYM  V$PARAMETER                   FOR SYS.V$PARAMETER 
/

CREATE OR REPLACE PUBLIC SYNONYM  V$USER_PARAMETER              FOR SYS.V$USER_PARAMETER
/
GRANT SELECT ON V$USER_PARAMETER TO PUBLIC
/
CREATE OR REPLACE PUBLIC SYNONYM  V$TEMP_POOL                   FOR SYS.V$TEMP_POOL 
/                                                               
CREATE OR REPLACE PUBLIC SYNONYM  V$DB_OBJECT_CACHE             FOR SYS.V$DB_OBJECT_CACHE 
/                                                               
CREATE OR REPLACE PUBLIC SYNONYM  V$LOCK                        FOR SYS.V$LOCK 
/                                                               
CREATE OR REPLACE PUBLIC SYNONYM  V$ARCHIVED_LOG                FOR SYS.V$ARCHIVED_LOG 
/                                                               
CREATE OR REPLACE PUBLIC SYNONYM  V$ARCHIVE_GAP                 FOR SYS.V$ARCHIVE_GAP 
/                                                               
CREATE OR REPLACE PUBLIC SYNONYM  V$ARCHIVE_PROCESSES           FOR SYS.V$ARCHIVE_PROCESSES 
/                                                               
CREATE OR REPLACE PUBLIC SYNONYM  V$ARCHIVE_DEST_STATUS         FOR SYS.V$ARCHIVE_DEST_STATUS 
/                                                               
CREATE OR REPLACE PUBLIC SYNONYM  V$DATABASE                    FOR SYS.V$DATABASE 
/                                                               
CREATE OR REPLACE PUBLIC SYNONYM  V$SGA                         FOR SYS.V$SGA 
/                                                               
CREATE OR REPLACE PUBLIC SYNONYM  V$LOCKED_OBJECT               FOR SYS.V$LOCKED_OBJECT 
/                                                               
CREATE OR REPLACE PUBLIC SYNONYM  V$MANAGED_STANDBY             FOR SYS.V$MANAGED_STANDBY 
/                                                               
CREATE OR REPLACE PUBLIC SYNONYM  V$TABLESPACE                  FOR SYS.V$TABLESPACE 
/                                                               
CREATE OR REPLACE PUBLIC SYNONYM  V$SPINLOCK                    FOR SYS.V$SPINLOCK 
/                                                               
CREATE OR REPLACE PUBLIC SYNONYM  V$SQLAREA                     FOR SYS.V$SQLAREA 
/                                                               
CREATE OR REPLACE PUBLIC SYNONYM  V$SESSION_WAIT                FOR SYS.V$SESSION_WAIT 
/                                                               
CREATE OR REPLACE PUBLIC SYNONYM  V$SESSION_EVENT               FOR SYS.V$SESSION_EVENT 
/                                                               
CREATE OR REPLACE PUBLIC SYNONYM  V$SYSTEM_EVENT                FOR SYS.V$SYSTEM_EVENT 
/                                                               
CREATE OR REPLACE PUBLIC SYNONYM  V$ME                          FOR SYS.V$ME 
/                                                               
GRANT SELECT ON V$ME TO PUBLIC                                  
/                                                               
CREATE OR REPLACE PUBLIC SYNONYM  V$DATAFILE                    FOR SYS.V$DATAFILE 
/                                                               
CREATE OR REPLACE PUBLIC SYNONYM  V$SYSSTAT                     FOR SYS.V$SYSSTAT 
/                                                               
CREATE OR REPLACE PUBLIC SYNONYM  V$SYSTEM                      FOR SYS.V$SYSTEM 
/                                                               
CREATE OR REPLACE PUBLIC SYNONYM  V$VERSION                     FOR SYS.V$VERSION
/                                                               
CREATE OR REPLACE PUBLIC SYNONYM  V$TRANSACTION                 FOR SYS.V$TRANSACTION 
/                                                               
CREATE OR REPLACE PUBLIC SYNONYM  V$ALL_TRANSACTION             FOR SYS.V$ALL_TRANSACTION
/                                                               
CREATE OR REPLACE PUBLIC SYNONYM  V$GLOBAL_TRANSACTIONS         FOR SYS.V$GLOBAL_TRANSACTIONS
/                                                               
CREATE OR REPLACE PUBLIC SYNONYM  V$RESOURCE_MAP                FOR SYS.V$RESOURCE_MAP 
/                                                               
CREATE OR REPLACE PUBLIC SYNONYM  V$USER_ASTATUS_MAP            FOR SYS.V$USER_ASTATUS_MAP
/                                                               
CREATE OR REPLACE PUBLIC SYNONYM  V$DYNAMIC_VIEW                FOR SYS.V$DYNAMIC_VIEW 
/                                                               
CREATE OR REPLACE PUBLIC SYNONYM  V$DYNAMIC_VIEW_COLUMN         FOR SYS.V$DYNAMIC_VIEW_COLUMN 
/                                                               
CREATE OR REPLACE PUBLIC SYNONYM  V$BACKUP_PROCESS              FOR SYS.V$BACKUP_PROCESS
/                                                               
                                                                
CREATE OR REPLACE PUBLIC SYNONYM  V$USER_ADVISORY_LOCKS         FOR SYS.V$USER_ADVISORY_LOCKS
/                                                               
CREATE OR REPLACE PUBLIC SYNONYM  V$CONTROLFILE                 FOR SYS.V$CONTROLFILE
/                                                               
CREATE OR REPLACE PUBLIC SYNONYM  V$REACTOR_POOL                FOR SYS.V$REACTOR_POOL
/

CREATE OR REPLACE PUBLIC SYNONYM  V$SEGMENT_STATISTICS          FOR SYS.V$SEGMENT_STATISTICS
/

CREATE OR REPLACE PUBLIC SYNONYM  V$WAITSTAT                    FOR SYS.V$WAITSTAT
/
CREATE OR REPLACE PUBLIC SYNONYM  V$LATCH                       FOR SYS.V$LATCH
/

CREATE OR REPLACE PUBLIC SYNONYM  V$VM_FUNC_STACK               FOR SYS.V$VM_FUNC_STACK
/

CREATE OR REPLACE PUBLIC SYNONYM  V$BUFFER_POOL_STATISTICS      FOR SYS.V$BUFFER_POOL_STATISTICS
/

CREATE OR REPLACE PUBLIC SYNONYM  V$XACT_LOCK                  FOR SYS.V$XACT_LOCK
/

CREATE OR REPLACE PUBLIC SYNONYM  V$SESSION_EX                     FOR SYS.V$SESSION_EX
/

CREATE OR REPLACE PUBLIC SYNONYM DUAL FOR SYS.SYS_DUMMY
/

CREATE OR REPLACE SYNONYM DUAL FOR SYS.SYS_DUMMY
/

CREATE OR REPLACE PUBLIC SYNONYM  V$RES_RATIO               FOR SYS.V$RES_RATIO
/

CREATE OR REPLACE PUBLIC SYNONYM  V$GLOBAL_RES               FOR SYS.V$GLOBAL_RES
/

CREATE OR REPLACE PUBLIC SYNONYM  V$RES_MAP               FOR SYS.V$RES_MAP
/

CREATE OR REPLACE PUBLIC SYNONYM  V$BUF_INFO               FOR SYS.V$BUF_INFO
/

GRANT SELECT ON DUAL TO PUBLIC
/

CREATE OR REPLACE VIEW DBA_BACKUP_SET
(
  BACKUP_TYPE,
  STAGE,
  STATUS,
  INCREMENTAL_LEVEL,
  TAG,
  SCN,
  DEVICE_TYPE,
  DIR,
  START_TIME,
  BASE_TAG
)
AS
  SELECT DECODE(TYPE, 1, 'FULL', 2, 'INCR', 3, 'LOG', 'INVALID') AS BACKUP_TYPE,
  DECODE(STAGE, 1, 'CTRL', 2, 'HEAD', 3, 'DATA', 4, 'LOG', 'INVALID') AS STAGE,
  DECODE(STATUS, 0, 'SUCCESS', 1, 'DOING', 'FAILED') AS STATUS,
  INCREMENTAL_LEVEL, TAG, SCN, DECODE(DEVICE_TYPE, 0, 'DISK', 1, 'NBU', 'UNKNOWN') AS DEVICE_TYPE,
  DIR, START_TIME, BASE_TAG FROM SYS.SYS_BACKUP_SETS
/

CREATE OR REPLACE VIEW USER_SEGMENTS
(
  SEGMENT_NAME, 
  PARTITION_NAME, 
  SEGMENT_TYPE, 
  TABLESPACE_NAME, 
  BYTES, 
  PAGES, 
  EXTENTS
)
AS
  SELECT T.NAME, '', 'TABLE', TS.NAME, 
  DBE_DIAGNOSE.DBA_SEGSIZE(0, T.ENTRY), DBE_DIAGNOSE.DBA_SEGSIZE(1, T.ENTRY), DBE_DIAGNOSE.DBA_SEGSIZE(2, T.ENTRY) 
  FROM SYS.DV_ME ME, SYS.SYS_TABLES T, SYS.DV_TABLESPACES TS
  WHERE T.USER# = ME.USER_ID AND T.SPACE# = TS.ID
  UNION ALL
  SELECT I.NAME, '', 'INDEX', TS.NAME,
  DBE_DIAGNOSE.DBA_SEGSIZE(0, I.ENTRY), DBE_DIAGNOSE.DBA_SEGSIZE(1, I.ENTRY), DBE_DIAGNOSE.DBA_SEGSIZE(2, I.ENTRY) 
  FROM SYS.DV_ME ME, SYS.SYS_INDEXES I, SYS.DV_TABLESPACES TS
  WHERE I.USER# = ME.USER_ID AND I.SPACE# = TS.ID
  UNION ALL
  SELECT 'LOB_' || T.NAME || '_' || C.NAME, '', 'LOB', TS.NAME, 
  DBE_DIAGNOSE.DBA_SEGSIZE(0, L.ENTRY), DBE_DIAGNOSE.DBA_SEGSIZE(1, L.ENTRY), DBE_DIAGNOSE.DBA_SEGSIZE(2, L.ENTRY) 
  FROM SYS.DV_ME ME, SYS.SYS_LOBS L, SYS.SYS_TABLES T, SYS.SYS_COLUMNS C, SYS.DV_TABLESPACES TS
  WHERE L.USER# = ME.USER_ID AND L.USER# = T.USER# AND L.TABLE# = T.ID AND 
  L.USER# = C.USER# AND L.TABLE# = C.TABLE# AND L.COLUMN# = C.ID AND L.SPACE# = TS.ID
  UNION ALL
  SELECT T.NAME, TP.NAME, 'TABLE', TS.NAME, 
  DBE_DIAGNOSE.DBA_SEGSIZE(0, TP.ENTRY), DBE_DIAGNOSE.DBA_SEGSIZE(1, TP.ENTRY), DBE_DIAGNOSE.DBA_SEGSIZE(2, TP.ENTRY) 
  FROM SYS.DV_ME ME, SYS.SYS_TABLES T, SYS.SYS_TABLE_PARTS TP, SYS.DV_TABLESPACES TS 
  WHERE T.PARTITIONED = 1 AND T.USER# = ME.USER_ID AND 
  T.USER# = TP.USER# AND T.ID = TP.TABLE# AND TP.SPACE# = TS.ID
  UNION ALL
  SELECT I.NAME, IP.NAME, 'INDEX', TS.NAME, 
  DBE_DIAGNOSE.DBA_SEGSIZE(0, IP.ENTRY), DBE_DIAGNOSE.DBA_SEGSIZE(1, IP.ENTRY), DBE_DIAGNOSE.DBA_SEGSIZE(2, IP.ENTRY) 
  FROM SYS.DV_ME ME, SYS.SYS_INDEXES I, SYS.SYS_INDEX_PARTS IP, SYS.DV_TABLESPACES TS 
  WHERE I.PARTITIONED = 1 AND I.USER# = ME.USER_ID AND 
  I.USER# = IP.USER# AND I.TABLE# = IP.TABLE# AND I.ID = IP.INDEX# AND IP.SPACE# = TS.ID
  UNION ALL
  SELECT 'LOB_' || T.NAME || '_' || C.NAME, 'LOB_' || T.NAME || '_' || C.NAME || '_' || LP.PART#, 
  'LOB', TS.NAME, DBE_DIAGNOSE.DBA_SEGSIZE(0, LP.ENTRY), DBE_DIAGNOSE.DBA_SEGSIZE(1, LP.ENTRY), DBE_DIAGNOSE.DBA_SEGSIZE(2, LP.ENTRY) 
  FROM SYS.DV_ME ME, SYS.SYS_LOBS L, SYS.SYS_TABLES T, SYS.SYS_COLUMNS C, SYS.SYS_LOB_PARTS LP, SYS.DV_TABLESPACES TS
  WHERE L.USER# = ME.USER_ID AND L.USER# = T.USER# AND L.TABLE# = T.ID AND T.PARTITIONED = 1 AND
  L.USER# = C.USER# AND L.TABLE# = C.TABLE# AND L.COLUMN# = C.ID AND
  L.USER# = LP.USER# AND L.TABLE# = LP.TABLE# AND L.COLUMN# = LP.COLUMN# AND LP.SPACE# = TS.ID
/

CREATE OR REPLACE VIEW DBA_SEGMENTS
(
  OWNER,
  SEGMENT_NAME, 
  PARTITION_NAME, 
  SEGMENT_TYPE, 
  TABLESPACE_NAME, 
  BYTES, 
  PAGES, 
  EXTENTS
)
AS
  SELECT U.NAME, T.NAME, '', 'TABLE', TS.NAME, 
  DBE_DIAGNOSE.DBA_SEGSIZE(0, T.ENTRY), DBE_DIAGNOSE.DBA_SEGSIZE(1, T.ENTRY), DBE_DIAGNOSE.DBA_SEGSIZE(2, T.ENTRY) 
  FROM SYS.SYS_USERS U, SYS.SYS_TABLES T, SYS.DV_TABLESPACES TS
  WHERE T.USER# = U.ID AND T.SPACE# = TS.ID AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
  UNION ALL
  SELECT  U.NAME, I.NAME, '', 'INDEX', TS.NAME,
  DBE_DIAGNOSE.DBA_SEGSIZE(0, I.ENTRY), DBE_DIAGNOSE.DBA_SEGSIZE(1, I.ENTRY), DBE_DIAGNOSE.DBA_SEGSIZE(2, I.ENTRY) 
  FROM SYS.SYS_USERS U, SYS.SYS_INDEXES I, SYS.DV_TABLESPACES TS
  WHERE I.USER# = U.ID AND I.SPACE# = TS.ID AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
  UNION ALL
  SELECT U.NAME, 'LOB_' || T.NAME || '_' || C.NAME, '', 'LOB', TS.NAME, 
  DBE_DIAGNOSE.DBA_SEGSIZE(0, L.ENTRY), DBE_DIAGNOSE.DBA_SEGSIZE(1, L.ENTRY), DBE_DIAGNOSE.DBA_SEGSIZE(2, L.ENTRY) 
  FROM SYS.SYS_USERS U, SYS.SYS_LOBS L, SYS.SYS_TABLES T, SYS.SYS_COLUMNS C, SYS.DV_TABLESPACES TS
  WHERE L.USER# = U.ID AND L.USER# = T.USER# AND L.TABLE# = T.ID AND 
  L.USER# = C.USER# AND L.TABLE# = C.TABLE# AND L.COLUMN# = C.ID AND L.SPACE# = TS.ID AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
  UNION ALL
  SELECT U.NAME, T.NAME, TP.NAME, 'TABLE', TS.NAME, 
  DBE_DIAGNOSE.DBA_SEGSIZE(0, TP.ENTRY), DBE_DIAGNOSE.DBA_SEGSIZE(1, TP.ENTRY), DBE_DIAGNOSE.DBA_SEGSIZE(2, TP.ENTRY) 
  FROM SYS.SYS_USERS U, SYS.SYS_TABLES T, SYS.SYS_TABLE_PARTS TP, SYS.DV_TABLESPACES TS
  WHERE T.PARTITIONED = 1 AND T.USER# = U.ID AND 
  T.USER# = TP.USER# AND T.ID = TP.TABLE# AND TP.SPACE# = TS.ID AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
  UNION ALL
  SELECT U.NAME, I.NAME, IP.NAME, 'INDEX', TS.NAME, 
  DBE_DIAGNOSE.DBA_SEGSIZE(0, IP.ENTRY), DBE_DIAGNOSE.DBA_SEGSIZE(1, IP.ENTRY), DBE_DIAGNOSE.DBA_SEGSIZE(2, IP.ENTRY) 
  FROM SYS.SYS_USERS U, SYS.SYS_INDEXES I, SYS.SYS_INDEX_PARTS IP, SYS.DV_TABLESPACES TS
  WHERE I.PARTITIONED = 1 AND I.USER# = U.ID AND 
  I.USER# = IP.USER# AND I.TABLE# = IP.TABLE# AND I.ID = IP.INDEX# AND IP.SPACE# = TS.ID AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
  UNION ALL
  SELECT U.NAME, 'LOB_' || T.NAME || '_' || C.NAME, 'LOB_' || T.NAME || '_' || C.NAME || '_' || LP.PART#, 
  'LOB', TS.NAME, DBE_DIAGNOSE.DBA_SEGSIZE(0, LP.ENTRY), DBE_DIAGNOSE.DBA_SEGSIZE(1, LP.ENTRY), DBE_DIAGNOSE.DBA_SEGSIZE(2, LP.ENTRY) 
  FROM SYS.SYS_USERS U, SYS.SYS_LOBS L, SYS.SYS_TABLES T, SYS.SYS_COLUMNS C, SYS.SYS_LOB_PARTS LP, SYS.DV_TABLESPACES TS
  WHERE L.USER# = U.ID AND L.USER# = T.USER# AND L.TABLE# = T.ID AND T.PARTITIONED = 1 AND
  L.USER# = C.USER# AND L.TABLE# = C.TABLE# AND L.COLUMN# = C.ID AND
  L.USER# = LP.USER# AND L.TABLE# = LP.TABLE# AND L.COLUMN# = LP.COLUMN# AND LP.SPACE# = TS.ID AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
/

CREATE OR REPLACE VIEW DBA_TABLES
(
  OWNER, 
  TABLE_NAME,
  TABLE_ID, 
  TABLESPACE_NAME,
  COLUMN_COUNT,
  INDEX_COUNT,
  PARTITIONED,
  CREATED_TIME,
  LAST_DDL_TIME,
  PCT_FREE,
  INI_TRANS,
  MAX_TRANS, 
  BYTES,
  PAGES,
  EXTENTS,
  NUM_ROWS,
  BLOCKS,
  EMPTY_BLOCKS,
  AVG_SPACE,
  CHAIN_CNT,
  AVG_ROW_LEN,
  SAMPLE_SIZE,
  LAST_ANALYZED,
  STATUS,
  TEMPORARY,
  APPENDONLY,
  TABLE_TYPE,
  CR_MODE,
  ROW_FORMAT,
  NOLOGGING_INSERT
) 
AS 
  SELECT U.NAME, T.NAME, T.ID,
  TS.NAME, T.COLS, T.INDEXES,
  DECODE(T.PARTITIONED,1,'Y','N'),   
  SCN2DATE(T.ORG_SCN), SCN2DATE(T.CHG_SCN), T.PCTFREE, T.INITRANS, 255,
  DECODE(T.PARTITIONED,0,DBE_DIAGNOSE.DBA_SEGSIZE(0, T.ENTRY),1,DBE_DIAGNOSE.DBA_PARTITIONED_TABSIZE(0,U.NAME,'"'||T.NAME||'"')), 
  DECODE(T.PARTITIONED,0,DBE_DIAGNOSE.DBA_SEGSIZE(1, T.ENTRY),1,DBE_DIAGNOSE.DBA_PARTITIONED_TABSIZE(1,U.NAME,'"'||T.NAME||'"')),
  DECODE(T.PARTITIONED,0,DBE_DIAGNOSE.DBA_SEGSIZE(2, T.ENTRY),1,DBE_DIAGNOSE.DBA_PARTITIONED_TABSIZE(2,U.NAME,'"'||T.NAME||'"')),
  T.NUM_ROWS, T.BLOCKS, T.EMPTY_BLOCKS, NULL::NUMBER, NULL::NUMBER, T.AVG_ROW_LEN,
  T.SAMPLESIZE, T.ANALYZETIME,
  'VALID', 
  DECODE(T.TYPE, 0, 'N', 1, 'N', 2, 'Y', 3, 'Y', 4, 'Y', 5, 'N'),  
  DECODE(T.APPENDONLY, 1, 'Y', 'N'),
  DECODE(T.TYPE, 0, 'HEAP', 1, 'IOT', 2, 'TRANS_TEMP', 3, 'SESSION_TEMP', 4, 'NOLOGGING', 5, 'EXTERNAL'),
  DECODE(T.CR_MODE, 0, 'ROW', 1, 'PAGE', NULL),
  DECODE(T.FLAG & 1, 1, 'CSF', 'ASF'),
  DECODE(T.FLAG & 4, 4, 'YES', 'NO')
  FROM SYS.SYS_USERS U, SYS.SYS_TABLES T, SYS.DV_TABLESPACES TS
  WHERE T.USER# = U.ID AND T.SPACE# = TS.ID AND T.RECYCLED = 0  AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
/

CREATE OR REPLACE VIEW ALL_TABLES
(
  OWNER, 
  TABLE_NAME,
  TABLE_ID, 
  TABLESPACE_NAME,
  COLUMN_COUNT,
  INDEX_COUNT,
  PARTITIONED,
  CREATED_TIME,
  LAST_DDL_TIME,
  PCT_FREE,
  INI_TRANS,
  MAX_TRANS, 
  BYTES,
  PAGES,
  EXTENTS,
  NUM_ROWS,
  BLOCKS,
  EMPTY_BLOCKS,
  AVG_SPACE,
  CHAIN_CNT,
  AVG_ROW_LEN,
  SAMPLE_SIZE,
  LAST_ANALYZED,
  STATUS,
  TEMPORARY,
  APPENDONLY,
  TABLE_TYPE,
  CR_MODE,
  ROW_FORMAT,
  NOLOGGING_INSERT
) 
AS 
  SELECT U.NAME, T.NAME, T.ID,
  TS.NAME, T.COLS, T.INDEXES, 
  DECODE(T.PARTITIONED,1,'Y','N'),  
  SCN2DATE(T.ORG_SCN), SCN2DATE(T.CHG_SCN), T.PCTFREE, T.INITRANS, 255,
  DECODE(T.PARTITIONED,0,DBE_DIAGNOSE.DBA_SEGSIZE(0, T.ENTRY),1,DBE_DIAGNOSE.DBA_PARTITIONED_TABSIZE(0,U.NAME,'"'||T.NAME||'"')), 
  DECODE(T.PARTITIONED,0,DBE_DIAGNOSE.DBA_SEGSIZE(1, T.ENTRY),1,DBE_DIAGNOSE.DBA_PARTITIONED_TABSIZE(1,U.NAME,'"'||T.NAME||'"')),
  DECODE(T.PARTITIONED,0,DBE_DIAGNOSE.DBA_SEGSIZE(2, T.ENTRY),1,DBE_DIAGNOSE.DBA_PARTITIONED_TABSIZE(2,U.NAME,'"'||T.NAME||'"')),
  T.NUM_ROWS, T.BLOCKS, T.EMPTY_BLOCKS, NULL::NUMBER, NULL::NUMBER, T.AVG_ROW_LEN,
  T.SAMPLESIZE, T.ANALYZETIME,
  'VALID', 
  DECODE(T.TYPE, 0, 'N', 1, 'N', 2, 'Y', 3, 'Y', 4, 'Y', 5, 'N'), 
  DECODE(T.APPENDONLY, 1, 'Y', 'N'),
  DECODE(T.TYPE, 0, 'HEAP', 1, 'IOT', 2, 'TRANS_TEMP', 3, 'SESSION_TEMP', 4, 'NOLOGGING', 5, 'EXTERNAL'),
  DECODE(T.CR_MODE, 0, 'ROW', 1, 'PAGE', NULL),
  DECODE(T.FLAG & 1, 1, 'CSF', 'ASF'),
  DECODE(T.FLAG & 4, 4, 'YES', 'NO')
  FROM SYS.SYS_USERS U, SYS.SYS_TABLES T, SYS.DV_TABLESPACES TS
  WHERE T.USER# = U.ID AND T.SPACE# = TS.ID AND T.RECYCLED = 0 and
        (user = 'SYS' or  
        U.NAME = user or 
        DBE_DIAGNOSE.has_obj_privs(user, U.NAME, '"'||T.NAME||'"', 'TABLE')) AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
/

CREATE OR REPLACE VIEW ALL_DBLINK_TABLES
(
  OWNER, 
  TABLE_NAME,
  OWNER_ID,
  TABLE_ID, 
  COLUMN_COUNT,
  INDEX_COUNT
) 
AS 
  SELECT U.NAME, T.NAME, U.ID, T.ID, T.COLS, T.INDEXES
  FROM SYS.SYS_USERS U, SYS.SYS_TABLES T
  WHERE T.USER# = U.ID AND T.RECYCLED = 0 and
        (user = 'SYS' or  
        U.NAME = user or 
        DBE_DIAGNOSE.has_obj_privs(user, U.NAME, '"'||T.NAME||'"', 'TABLE')) AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
/

CREATE OR REPLACE VIEW DBA_REDACTION_POLICIES
(
  USER_NAME,
  OBJECT_NAME, 
  COL_NAME, 
  RULE_NAME, 
  TYPE_NAME, 
  PARAM
)
AS
  SELECT U.NAME, T.NAME, C.NAME, D.RULE_NAME, D.TYPE_NAME, D.PARAM
  FROM SYS.SYS_DDM D, SYS.SYS_USERS U, SYS.SYS_TABLES T, SYS.SYS_COLUMNS C
  WHERE U.ID = D.USER# AND T.ID = D.TABLE# AND C.TABLE# = D.TABLE# AND C.USER# = D.USER# AND C.ID = D.COLUMN# AND T.USER# = U.ID AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
/
CREATE OR REPLACE VIEW USER_REDACTION_POLICIES
(
  USER_NAME,
  OBJECT_NAME, 
  COL_NAME, 
  RULE_NAME, 
  TYPE_NAME, 
  PARAM
)
AS
  SELECT U.NAME, T.NAME, C.NAME, D.RULE_NAME, D.TYPE_NAME, D.PARAM
  FROM SYS.SYS_DDM D, SYS.SYS_USERS U, SYS.SYS_TABLES T, SYS.SYS_COLUMNS C, SYS.DV_ME ME
  WHERE U.ID = D.USER# AND T.ID = D.TABLE# AND C.TABLE# = D.TABLE# AND C.USER# = D.USER# AND C.ID = D.COLUMN# AND T.USER# = U.ID AND D.USER# = ME.USER_ID
/ 

CREATE OR REPLACE VIEW DBA_POLICIES
(
  OBJECT_OWNER,
  OBJECT_NAME,
  POLICY_NAME,
  PF_OWNER,
  FUNCTION,
  SEL,
  INS,
  UPD,
  DEL,
  CHK_OPTION,
  ENABLE,
  LONG_PREDICATE
)
AS
  SELECT U.NAME, P.OBJ_NAME, P.PNAME, P.PF_SCHEMA, P.PF_NAME, 
  DECODE(bitand(P.STMT_TYPE, 1), 0, 'NO', 1, 'YES'),
  DECODE(bitand(P.STMT_TYPE, 2), 0, 'NO', 2, 'YES'),
  DECODE(bitand(P.STMT_TYPE, 4), 0, 'NO', 4, 'YES'),
  DECODE(bitand(P.STMT_TYPE, 8), 0, 'NO', 8, 'YES'),
  DECODE(P.CHK_OPTION, 0, 'NO', 1, 'YES'),
  DECODE(P.ENABLE, 0, 'NO', 1, 'YES'),
  DECODE(P.LONG_PREDICATE, 0, 'NO', 1, 'YES') 
  FROM SYS.SYS_POLICIES P, SYS.SYS_USERS U 
  WHERE U.ID = P.OBJ_SCHEMA_ID AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
/

CREATE OR REPLACE VIEW USER_POLICIES
(
  OBJECT_OWNER,
  OBJECT_NAME,
  POLICY_NAME,
  PF_OWNER,
  FUNCTION,
  SEL,
  INS,
  UPD,
  DEL,
  CHK_OPTION,
  ENABLE,
  LONG_PREDICATE
)
AS
  SELECT U.NAME, P.OBJ_NAME, P.PNAME, P.PF_SCHEMA, P.PF_NAME, 
  DECODE(bitand(P.STMT_TYPE, 1), 0, 'NO', 1, 'YES'),
  DECODE(bitand(P.STMT_TYPE, 2), 0, 'NO', 2, 'YES'),
  DECODE(bitand(P.STMT_TYPE, 4), 0, 'NO', 4, 'YES'),
  DECODE(bitand(P.STMT_TYPE, 8), 0, 'NO', 8, 'YES'),
  DECODE(P.CHK_OPTION, 0, 'NO', 1, 'YES'),
  DECODE(P.ENABLE, 0, 'NO', 1, 'YES'),
  DECODE(P.LONG_PREDICATE, 0, 'NO', 1, 'YES') 
  FROM SYS.SYS_POLICIES P, SYS.SYS_USERS U, SYS.DV_ME ME 
  WHERE U.ID = P.OBJ_SCHEMA_ID AND P.OBJ_SCHEMA_ID = ME.USER_ID
/

CREATE OR REPLACE VIEW DBA_DBLINK_TABLES
(
  OWNER, 
  TABLE_NAME,
  OWNER_ID,
  TABLE_ID, 
  COLUMN_COUNT,
  INDEX_COUNT
) 
AS 
  SELECT U.NAME, T.NAME, U.ID, T.ID, T.COLS, T.INDEXES
  FROM SYS.SYS_USERS U, SYS.SYS_TABLES T
  WHERE T.USER# = U.ID AND T.RECYCLED = 0 AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
/

CREATE OR REPLACE VIEW USER_TABLES
(
  TABLE_NAME,
  TABLE_ID, 
  TABLESPACE_NAME,
  COLUMN_COUNT,
  INDEX_COUNT,
  PARTITIONED,
  CREATED_TIME,
  LAST_DDL_TIME,
  PCT_FREE,
  INI_TRANS,
  MAX_TRANS,
  BYTES,
  PAGES,
  EXTENTS,
  NUM_ROWS,
  BLOCKS,
  EMPTY_BLOCKS,
  AVG_SPACE,
  CHAIN_CNT,
  AVG_ROW_LEN,
  SAMPLE_SIZE,
  LAST_ANALYZED,
  STATUS,
  TEMPORARY,
  APPENDONLY,
  TABLE_TYPE,
  CR_MODE,
  ROW_FORMAT,
  NOLOGGING_INSERT
) 
AS 
  SELECT T.NAME, T.ID,
  TS.NAME, T.COLS, T.INDEXES, 
  DECODE(T.PARTITIONED,1,'Y','N'),  
  SCN2DATE(T.ORG_SCN), SCN2DATE(T.CHG_SCN), T.PCTFREE, T.INITRANS, 255,
  DECODE(T.PARTITIONED,0,DBE_DIAGNOSE.DBA_SEGSIZE(0, T.ENTRY),1,DBE_DIAGNOSE.DBA_PARTITIONED_TABSIZE(0,ME.USER_NAME,'"'||T.NAME||'"')), 
  DECODE(T.PARTITIONED,0,DBE_DIAGNOSE.DBA_SEGSIZE(1, T.ENTRY),1,DBE_DIAGNOSE.DBA_PARTITIONED_TABSIZE(1,ME.USER_NAME,'"'||T.NAME||'"')),
  DECODE(T.PARTITIONED,0,DBE_DIAGNOSE.DBA_SEGSIZE(2, T.ENTRY),1,DBE_DIAGNOSE.DBA_PARTITIONED_TABSIZE(2,ME.USER_NAME,'"'||T.NAME||'"')),
  T.NUM_ROWS, T.BLOCKS, T.EMPTY_BLOCKS, NULL::NUMBER, NULL::NUMBER, T.AVG_ROW_LEN,
  T.SAMPLESIZE, T.ANALYZETIME,
  'VALID', 
  DECODE(T.TYPE, 0, 'N', 1, 'N', 2, 'Y', 3, 'Y', 4, 'Y', 5, 'N'),
  DECODE(T.APPENDONLY, 1, 'Y', 'N'),
  DECODE(T.TYPE, 0, 'HEAP', 1, 'IOT', 2, 'TRANS_TEMP', 3, 'SESSION_TEMP', 4, 'NOLOGGING', 5, 'EXTERNAL'),
  DECODE(T.CR_MODE, 0, 'ROW', 1, 'PAGE', NULL),
  DECODE(T.FLAG & 1, 1, 'CSF', 'ASF'),
  DECODE(T.FLAG & 4, 4, 'YES', 'NO')
  FROM SYS.DV_ME ME, SYS.SYS_TABLES T, SYS.DV_TABLESPACES TS
  WHERE T.USER# = ME.USER_ID AND T.SPACE# =TS.ID AND T.RECYCLED = 0
/

CREATE OR REPLACE VIEW ALL_TAB_COLS
(
  OWNER,
  TABLE_NAME,
  COLUMN_NAME,
  DATA_TYPE,
  DATA_LENGTH,
  DATA_PRECISION,
  DATA_SCALE,
  NULLABLE,
  COLUMN_ID,
  DATA_DEFAULT,
  NUM_DISTINCT,
  LOW_VALUE,
  HIGH_VALUE,
  CHAR_LENGTH,
  CHAR_USED,
  HISTOGRAM
) 
AS
  SELECT U.NAME, T.NAME, C.NAME, TYPE_ID2NAME(C.DATATYPE) || DECODE(C.FLAGS & 1024, 1024, '[]', ''),
  C.BYTES, C.PRECISION,  C.SCALE, DECODE(C.NULLABLE, 1, 'Y', 'N'), C.ID, 
  C.DEFAULT_TEXT, C.NUM_DISTINCT, C.LOW_VALUE, C.HIGH_VALUE, 0, NULL, C.HISTOGRAM
  FROM SYS.SYS_USERS U, SYS.SYS_COLUMNS C, SYS.SYS_TABLES T
  WHERE C.TABLE# = T.ID AND C.USER# = T.USER# AND T.USER# = U.ID AND T.RECYCLED = 0 AND C.FLAGS & 3 = 0
    AND TYPE_ID2NAME(C.DATATYPE) NOT IN ('CHAR','VARCHAR2','NCHAR','NVARCHAR','VARCHAR')
    and (U.NAME = user or 
        user = 'SYS' or
        DBE_DIAGNOSE.has_obj_privs(user, U.NAME, '"'||T.NAME||'"', 'TABLE'))
    AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
  UNION ALL
  SELECT U.NAME, T.NAME, C.NAME, TYPE_ID2NAME(C.DATATYPE) || DECODE(C.FLAGS & 1024, 1024, '[]', ''),
  C.BYTES, C.PRECISION,  C.SCALE, DECODE(C.NULLABLE, 1, 'Y', 'N'), C.ID, 
  C.DEFAULT_TEXT, C.NUM_DISTINCT, C.LOW_VALUE, C.HIGH_VALUE, C.BYTES, DECODE(C.FLAGS & 32, 32, 'C', 'B'), C.HISTOGRAM
  FROM SYS.SYS_USERS U, SYS.SYS_COLUMNS C, SYS.SYS_TABLES T
  WHERE C.TABLE# = T.ID AND C.USER# = T.USER# AND T.USER# = U.ID AND T.RECYCLED = 0 AND C.FLAGS & 3 = 0
    AND TYPE_ID2NAME(C.DATATYPE) IN ('CHAR','VARCHAR2','NCHAR','NVARCHAR','VARCHAR')
    and (U.NAME = user or 
        user = 'SYS' or
        DBE_DIAGNOSE.has_obj_privs(user, U.NAME, '"'||T.NAME||'"', 'TABLE'))
    AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
/

CREATE OR REPLACE VIEW DBA_TAB_COLS
(
  OWNER,
  TABLE_NAME,
  COLUMN_NAME,
  DATA_TYPE,
  DATA_LENGTH,
  DATA_PRECISION,
  DATA_SCALE,
  NULLABLE,
  COLUMN_ID,
  DATA_DEFAULT,
  NUM_DISTINCT,
  LOW_VALUE,
  HIGH_VALUE,
  CHAR_LENGTH,
  CHAR_USED,
  HISTOGRAM
) 
AS
  SELECT U.NAME, T.NAME, C.NAME, TYPE_ID2NAME(C.DATATYPE) || DECODE(C.FLAGS & 1024, 1024, '[]', ''),
  C.BYTES, C.PRECISION,  C.SCALE, DECODE(C.NULLABLE, 1, 'Y', 'N'), C.ID, 
  C.DEFAULT_TEXT, C.NUM_DISTINCT, C.LOW_VALUE, C.HIGH_VALUE, 0, NULL, C.HISTOGRAM
  FROM SYS.SYS_USERS U, SYS.SYS_COLUMNS C, SYS.SYS_TABLES T
  WHERE C.TABLE# = T.ID AND C.USER# = T.USER# AND T.USER# = U.ID AND T.RECYCLED = 0 AND C.FLAGS & 3 = 0
    AND TYPE_ID2NAME(C.DATATYPE) NOT IN ('CHAR','VARCHAR2','NCHAR','NVARCHAR','VARCHAR')
    AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
  UNION ALL
  SELECT U.NAME, T.NAME, C.NAME, TYPE_ID2NAME(C.DATATYPE) || DECODE(C.FLAGS & 1024, 1024, '[]', ''),
  C.BYTES, C.PRECISION,  C.SCALE, DECODE(C.NULLABLE, 1, 'Y', 'N'), C.ID, 
  C.DEFAULT_TEXT, C.NUM_DISTINCT, C.LOW_VALUE, C.HIGH_VALUE, C.BYTES, DECODE(C.FLAGS & 32, 32, 'C', 'B'), C.HISTOGRAM
  FROM SYS.SYS_USERS U, SYS.SYS_COLUMNS C, SYS.SYS_TABLES T
  WHERE C.TABLE# = T.ID AND C.USER# = T.USER# AND T.USER# = U.ID AND T.RECYCLED = 0 AND C.FLAGS & 3 = 0
    AND TYPE_ID2NAME(C.DATATYPE) IN ('CHAR','VARCHAR2','NCHAR','NVARCHAR','VARCHAR')
    AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
/

CREATE OR REPLACE VIEW USER_PART_STORE
(
    NAME,
    OBJECT_TYPE,
    POSITION,
    TABLESPACE_NAME
)
AS
SELECT T.NAME,
       'TABLE',
       P.POSITION#,
       TS.NAME
   FROM SYS.DV_ME U, SYS.SYS_PART_STORES P, SYS.SYS_TABLES T, SYS.DV_TABLESPACES TS
   WHERE P.INDEX# = -1
   AND P.USER# = U.USER_ID
   AND P.USER# = T.USER# AND P.TABLE# = T.ID
   AND P.SPACE# = TS.ID
/

CREATE OR REPLACE VIEW ALL_PART_STORE
(
    OWNER,
    NAME,
    OBJECT_TYPE,
    POSITION,
    TABLESPACE_NAME
)
AS
SELECT U.NAME,
       T.NAME,
       'TABLE',
       P.POSITION#,
       TS.NAME
  FROM SYS.SYS_USERS U, SYS.SYS_PART_STORES P, SYS.SYS_TABLES T, SYS.DV_TABLESPACES TS
 WHERE P.INDEX# = -1
   AND P.USER# = U.ID
   AND P.USER# = T.USER# 
   AND P.TABLE# = T.ID
   AND P.SPACE# = TS.ID
   AND T.RECYCLED = 0
   AND (U.NAME = user or 
        user = 'SYS' or
        DBE_DIAGNOSE.has_obj_privs(user, U.NAME, '"'||T.NAME||'"', 'TABLE'))
   AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
/ 

CREATE OR REPLACE VIEW DBA_PART_STORE
(
    OWNER,
    NAME,
    OBJECT_TYPE,
    POSITION,
    TABLESPACE_NAME
)
AS
SELECT U.NAME,
       T.NAME,
       'TABLE',
       P.POSITION#,
       TS.NAME
  FROM SYS.SYS_USERS U, SYS.SYS_PART_STORES P, SYS.SYS_TABLES T, SYS.DV_TABLESPACES TS
 WHERE P.INDEX# = -1
   AND P.USER# = U.ID
   AND P.USER# = T.USER# 
   AND P.TABLE# = T.ID
   AND P.SPACE# = TS.ID
   AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
/


CREATE OR REPLACE VIEW USER_PART_TABLES
(
  TABLE_NAME,
  PARTITIONING_TYPE,
  PARTITION_COUNT,
  PARTITIONING_KEY_COUNT,
  DEF_TABLESPACE_NAME,
  INTERVAL,
  STATUS
)
AS
SELECT T.NAME,
       DECODE(P.PARTTYPE, 0, 'INVALID', 1, 'RANGE', 2, 'LIST', 3, 'HASH'),
       P.PARTCNT#,
       PARTKEYS#,
       TS.NAME,
       P.INTERVAL,
       'VALID'
   FROM SYS.DV_ME U, SYS.SYS_PART_OBJECTS P, SYS.SYS_TABLES T, SYS.DV_TABLESPACES TS
   WHERE P.INDEX# = -1
   AND P.USER# = U.USER_ID
   AND P.USER# = T.USER# AND P.TABLE# = T.ID
   AND T.SPACE# = TS.ID
/

CREATE OR REPLACE VIEW ALL_PART_TABLES
(
  OWNER,
  TABLE_NAME,
  PARTITIONING_TYPE,
  PARTITION_COUNT,
  PARTITIONING_KEY_COUNT,
  DEF_TABLESPACE_NAME,
  INTERVAL,
  STATUS
)
AS
SELECT U.NAME,
       T.NAME,
       DECODE(P.PARTTYPE, 0, 'INVALID', 1, 'RANGE', 2, 'LIST', 3, 'HASH'),
       P.PARTCNT#,
       PARTKEYS#,
       TS.NAME,
       P.INTERVAL,
       'VALID'
  FROM SYS.SYS_USERS U, SYS.SYS_PART_OBJECTS P, SYS.SYS_TABLES T, SYS.DV_TABLESPACES TS
 WHERE P.INDEX# = -1
   AND P.USER# = U.ID
   AND P.USER# = T.USER# AND P.TABLE# = T.ID
   AND T.SPACE# = TS.ID
   AND T.RECYCLED = 0 
   AND (U.NAME = user or 
        user = 'SYS' or
        DBE_DIAGNOSE.has_obj_privs(user, U.NAME, '"'||T.NAME||'"', 'TABLE'))
   AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
/   

CREATE OR REPLACE VIEW DBA_PART_TABLES
(
  OWNER,
  TABLE_NAME,
  PARTITIONING_TYPE,
  PARTITION_COUNT,
  PARTITIONING_KEY_COUNT,
  DEF_TABLESPACE_NAME,
  INTERVAL,
  STATUS
)
AS
SELECT U.NAME,
       T.NAME,
       DECODE(P.PARTTYPE, 0, 'INVALID', 1, 'RANGE', 2, 'LIST', 3, 'HASH'),
       P.PARTCNT#,
       PARTKEYS#,
       TS.NAME,
       P.INTERVAL,
       'VALID'
  FROM SYS.SYS_USERS U, SYS.SYS_PART_OBJECTS P, SYS.SYS_TABLES T, SYS.DV_TABLESPACES TS
 WHERE P.INDEX# = -1
   AND P.USER# = U.ID
   AND P.USER# = T.USER# AND P.TABLE# = T.ID
   AND T.SPACE# = TS.ID
   AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
/  


CREATE OR REPLACE VIEW ALL_PART_KEY_COLUMNS
(
  OWNER,
  NAME,
  OBJECT_TYPE,
  COLUMN_NAME,
  COLUMN_POSITION
)
AS
  SELECT U.NAME,
         T.NAME, 
         'TABLE',
         C.NAME,
         P.POSITION# + 1
    FROM SYS.SYS_USERS U, SYS.SYS_PART_COLUMNS P, SYS.SYS_COLUMNS C, SYS.SYS_TABLES T
   WHERE P.USER# = U.ID
     AND P.TABLE#= T.ID
     AND P.USER# = T.USER#
     AND P.USER# = C.USER#
     AND P.TABLE#= C.TABLE#
     AND P.COLUMN# = C.ID
     AND T.RECYCLED = 0 
     AND (U.NAME = user or 
          user = 'SYS' or
          DBE_DIAGNOSE.has_obj_privs(user, U.NAME, '"'||T.NAME||'"', 'TABLE'))
     AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
/

CREATE OR REPLACE VIEW DBA_PART_KEY_COLUMNS
(
  OWNER,
  NAME,
  OBJECT_TYPE,
  COLUMN_NAME,
  COLUMN_POSITION
)
AS
  SELECT U.NAME,
         T.NAME, 
         'TABLE',
         C.NAME,
         P.POSITION# + 1
     FROM SYS.SYS_USERS U, SYS.SYS_PART_COLUMNS P, SYS.SYS_COLUMNS C, SYS.SYS_TABLES T
     WHERE P.USER# = U.ID
     AND P.TABLE#= T.ID
     AND P.USER# = T.USER#
     AND P.USER# = C.USER#
     AND P.TABLE#= C.TABLE#
     AND P.COLUMN# = C.ID
     AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
/


CREATE OR REPLACE VIEW USER_PART_KEY_COLUMNS
(
  NAME,
  OBJECT_TYPE,
  COLUMN_NAME,
  COLUMN_POSITION
)
AS
  SELECT T.NAME, 
         'TABLE',
         C.NAME,
         P.POSITION# + 1
     FROM SYS.DV_ME B, SYS.SYS_PART_COLUMNS P, SYS.SYS_COLUMNS C, SYS.SYS_TABLES T
     WHERE P.USER# = B.USER_ID
     AND P.TABLE#= T.ID
     AND P.USER# = T.USER#
     AND P.USER# = C.USER#
     AND P.TABLE#= C.TABLE#
     AND P.COLUMN# = C.ID
/

CREATE OR REPLACE VIEW USER_TAB_COLS
(
  TABLE_NAME,
  COLUMN_NAME,
  DATA_TYPE,
  DATA_LENGTH,
  DATA_PRECISION,
  DATA_SCALE,
  NULLABLE,
  COLUMN_ID,
  DATA_DEFAULT,
  NUM_DISTINCT,
  LOW_VALUE,
  HIGH_VALUE,
  CHAR_LENGTH,
  CHAR_USED,
  HISTOGRAM
) 
AS
  SELECT T.NAME, C.NAME, TYPE_ID2NAME(C.DATATYPE) || DECODE(C.FLAGS & 1024, 1024, '[]', ''),
  C.BYTES, C.PRECISION,  C.SCALE, DECODE(C.NULLABLE, 1, 'Y', 'N'), C.ID, 
  C.DEFAULT_TEXT, C.NUM_DISTINCT, C.LOW_VALUE, C.HIGH_VALUE, 0, NULL, C.HISTOGRAM
  FROM SYS.DV_ME M, SYS.SYS_COLUMNS C, SYS.SYS_TABLES T
  WHERE C.TABLE# = T.ID AND C.USER# = T.USER# AND T.USER# = M.USER_ID AND T.RECYCLED = 0 AND C.FLAGS & 3 = 0 
    AND TYPE_ID2NAME(C.DATATYPE) NOT IN ('CHAR','VARCHAR2','NCHAR','NVARCHAR','VARCHAR')
  UNION ALL
  SELECT T.NAME, C.NAME, TYPE_ID2NAME(C.DATATYPE) || DECODE(C.FLAGS & 1024, 1024, '[]', ''),
  C.BYTES, C.PRECISION,  C.SCALE, DECODE(C.NULLABLE, 1, 'Y', 'N'), C.ID, 
  C.DEFAULT_TEXT, C.NUM_DISTINCT, C.LOW_VALUE, C.HIGH_VALUE, C.BYTES, DECODE(C.FLAGS & 32, 32, 'C', 'B'), C.HISTOGRAM
  FROM SYS.DV_ME M, SYS.SYS_COLUMNS C, SYS.SYS_TABLES T
  WHERE C.TABLE# = T.ID AND C.USER# = T.USER# AND T.USER# = M.USER_ID AND T.RECYCLED = 0 AND C.FLAGS & 3 = 0 
    AND TYPE_ID2NAME(C.DATATYPE) IN ('CHAR','VARCHAR2','NCHAR','NVARCHAR','VARCHAR')
/

CREATE OR REPLACE VIEW USER_TAB_COLUMNS
(
  TABLE_NAME,
  COLUMN_NAME,
  DATA_TYPE,
  DATA_LENGTH,
  DATA_PRECISION,
  DATA_SCALE,
  NULLABLE,
  COLUMN_ID,
  DATA_DEFAULT,
  NUM_DISTINCT,
  LOW_VALUE,
  HIGH_VALUE,
  NUM_NULLS,
  NUM_BUCKETS,
  CHAR_LENGTH,
  CHAR_USED,
  SAMPLE_SIZE,
  LAST_ANALYZED,
  HISTOGRAM,
  AUTO_INCREMENT
) 
AS
  SELECT T.NAME, C.NAME, TYPE_ID2NAME(C.DATATYPE) || DECODE(C.FLAGS & 1024, 1024, '[]', ''),
         C.BYTES, C.PRECISION,  C.SCALE, DECODE(C.NULLABLE, 1, 'Y', 'N'), C.ID, 
         C.DEFAULT_TEXT, C.NUM_DISTINCT, C.LOW_VALUE, C.HIGH_VALUE, HH.NULL_NUM, HH.BUCKET_NUM, 
         0, NULL::CHAR, HH.SPARE3, HH.ANALYZE_TIME, C.HISTOGRAM,DECODE(C.FLAGS & 8, 0, 'N', 'Y')
  FROM SYS.DV_ME M JOIN SYS.SYS_TABLES T ON T.USER# = M.USER_ID AND T.RECYCLED = 0
  JOIN SYS.SYS_COLUMNS C ON C.USER# = T.USER# AND C.TABLE# = T.ID AND C.FLAGS & 3 = 0 AND TYPE_ID2NAME(C.DATATYPE) NOT IN ('CHAR','VARCHAR2','NCHAR','NVARCHAR','VARCHAR')
  LEFT JOIN SYS.SYS_HISTGRAM_ABSTR HH ON C.USER# = HH.USER# AND C.TABLE# = HH.TAB# AND C.ID = HH.COL# AND (HH.SPARE1 IS NULL OR HH.SPARE1 = 4294967295)
  UNION ALL
  SELECT T.NAME, C.NAME, TYPE_ID2NAME(C.DATATYPE) || DECODE(C.FLAGS & 1024, 1024, '[]', ''),
         C.BYTES, C.PRECISION,  C.SCALE, DECODE(C.NULLABLE, 1, 'Y', 'N'), C.ID, 
         C.DEFAULT_TEXT, C.NUM_DISTINCT, C.LOW_VALUE, C.HIGH_VALUE, HH.NULL_NUM, HH.BUCKET_NUM,
         C.BYTES, DECODE(C.FLAGS & 32, 32, 'C', 'B'), HH.SPARE3, HH.ANALYZE_TIME, C.HISTOGRAM,DECODE(C.FLAGS & 8, 0, 'N', 'Y')
  FROM SYS.DV_ME M JOIN SYS.SYS_TABLES T ON T.USER# = M.USER_ID AND T.RECYCLED = 0
  JOIN SYS.SYS_COLUMNS C ON C.USER# = T.USER# AND C.TABLE# = T.ID AND C.FLAGS & 3 = 0 AND TYPE_ID2NAME(C.DATATYPE) IN ('CHAR','VARCHAR2','NCHAR','NVARCHAR','VARCHAR')
  LEFT JOIN SYS.SYS_HISTGRAM_ABSTR HH ON C.USER# = HH.USER# AND C.TABLE# = HH.TAB# AND C.ID = HH.COL# AND (HH.SPARE1 IS NULL OR HH.SPARE1 = 4294967295)
  UNION ALL
  SELECT V.NAME, C.NAME, TYPE_ID2NAME(C.DATATYPE) || DECODE(C.FLAGS & 1024, 1024, '[]', ''), C.BYTES, C.PRECISION, C.SCALE, DECODE(C.NULLABLE, 1, 'Y', 'N'), C.ID, NULL,NULL::BINARY_INTEGER,NULL,NULL,
  NULL::BINARY_INTEGER,NULL::BINARY_INTEGER,0,NULL::CHAR,NULL::BINARY_INTEGER,NULL::TIMESTAMP,NULL,NULL::CHAR
  FROM SYS.DV_ME ME, SYS.SYS_VIEWS V, SYS.SYS_VIEW_COLS C
  WHERE V.USER# = ME.USER_ID AND C.USER# = ME.USER_ID AND C.VIEW# = V.ID AND TYPE_ID2NAME(C.DATATYPE) NOT IN ('CHAR','VARCHAR2','NCHAR','NVARCHAR','VARCHAR')
  UNION ALL
  SELECT V.NAME, C.NAME, TYPE_ID2NAME(C.DATATYPE) || DECODE(C.FLAGS & 1024, 1024, '[]', ''), C.BYTES, C.PRECISION, C.SCALE, DECODE(C.NULLABLE, 1, 'Y', 'N'), C.ID, NULL,NULL::BINARY_INTEGER,NULL,NULL,
  NULL::BINARY_INTEGER,NULL::BINARY_INTEGER,C.BYTES,NULL::CHAR,NULL::BINARY_INTEGER,NULL::TIMESTAMP,NULL,NULL::CHAR
  FROM SYS.DV_ME ME, SYS.SYS_VIEWS V, SYS.SYS_VIEW_COLS C
  WHERE V.USER# = ME.USER_ID AND C.USER# = ME.USER_ID AND C.VIEW# = V.ID AND TYPE_ID2NAME(C.DATATYPE) IN ('CHAR','VARCHAR2','NCHAR','NVARCHAR','VARCHAR')
/
  
CREATE OR REPLACE VIEW ALL_TAB_COLUMNS
(
  OWNER,
  TABLE_NAME,
  COLUMN_NAME,
  DATA_TYPE,
  DATA_LENGTH,
  DATA_PRECISION,
  DATA_SCALE,
  NULLABLE,
  COLUMN_ID,
  DATA_DEFAULT,
  NUM_DISTINCT,
  LOW_VALUE,
  HIGH_VALUE,
  NUM_NULLS,
  NUM_BUCKETS,
  CHAR_LENGTH,
  CHAR_USED,
  SAMPLE_SIZE,
  LAST_ANALYZED,
  HISTOGRAM,
  AUTO_INCREMENT
) 
AS
  SELECT U.NAME, T.NAME, C.NAME, TYPE_ID2NAME(C.DATATYPE) || DECODE(C.FLAGS & 1024, 1024, '[]', ''),
         C.BYTES, C.PRECISION,  C.SCALE, DECODE(C.NULLABLE, 1, 'Y', 'N'), C.ID, 
         C.DEFAULT_TEXT, C.NUM_DISTINCT, C.LOW_VALUE, C.HIGH_VALUE, HH.NULL_NUM, HH.BUCKET_NUM, 
         0, NULL::CHAR, HH.SPARE3, HH.ANALYZE_TIME, C.HISTOGRAM,DECODE(C.FLAGS & 8, 0, 'N', 'Y')
  FROM SYS.SYS_USERS U JOIN SYS.SYS_TABLES T ON T.USER# = U.ID AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
  JOIN SYS.SYS_COLUMNS C ON C.USER# = T.USER# AND C.TABLE# = T.ID AND T.RECYCLED = 0 AND C.FLAGS & 3 = 0 AND TYPE_ID2NAME(C.DATATYPE) NOT IN ('CHAR','VARCHAR2','NCHAR','NVARCHAR','VARCHAR')
  LEFT JOIN SYS.SYS_HISTGRAM_ABSTR HH ON C.USER# = HH.USER# AND C.TABLE# = HH.TAB# AND C.ID = HH.COL# AND (HH.SPARE1 IS NULL OR HH.SPARE1 = 4294967295)
    where (U.NAME = user or 
           user = 'SYS' or
           DBE_DIAGNOSE.has_obj_privs(user, U.NAME, '"'||T.NAME||'"', 'TABLE'))
  UNION ALL
  SELECT U.NAME, T.NAME, C.NAME, TYPE_ID2NAME(C.DATATYPE) || DECODE(C.FLAGS & 1024, 1024, '[]', ''),
         C.BYTES, C.PRECISION,  C.SCALE, DECODE(C.NULLABLE, 1, 'Y', 'N'), C.ID, 
         C.DEFAULT_TEXT, C.NUM_DISTINCT, C.LOW_VALUE, C.HIGH_VALUE, HH.NULL_NUM, HH.BUCKET_NUM,
         C.BYTES, DECODE(C.FLAGS & 32, 32, 'C', 'B'), HH.SPARE3, HH.ANALYZE_TIME, C.HISTOGRAM,DECODE(C.FLAGS & 8, 0, 'N', 'Y')
  FROM SYS.SYS_USERS U JOIN SYS.SYS_TABLES T ON T.USER# = U.ID AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
  JOIN SYS.SYS_COLUMNS C ON C.USER# = T.USER# AND C.TABLE# = T.ID AND T.RECYCLED = 0 AND C.FLAGS & 3 = 0 AND TYPE_ID2NAME(C.DATATYPE) IN ('CHAR','VARCHAR2','NCHAR','NVARCHAR','VARCHAR')
  LEFT JOIN SYS.SYS_HISTGRAM_ABSTR HH ON C.USER# = HH.USER# AND C.TABLE# = HH.TAB# AND C.ID = HH.COL# AND (HH.SPARE1 IS NULL OR HH.SPARE1 = 4294967295) 
    where (U.NAME = user or 
           user = 'SYS' or
           DBE_DIAGNOSE.has_obj_privs(user, U.NAME, '"'||T.NAME||'"', 'TABLE'))
  UNION ALL
  SELECT U.NAME, V.NAME, C.NAME, TYPE_ID2NAME(C.DATATYPE) || DECODE(C.FLAGS & 1024, 1024, '[]', ''), C.BYTES, C.PRECISION, C.SCALE, DECODE(C.NULLABLE, 1, 'Y', 'N'), C.ID, NULL,NULL::BINARY_INTEGER,NULL,NULL,
  NULL::BINARY_INTEGER,NULL::BINARY_INTEGER,0, NULL::CHAR,NULL::BINARY_INTEGER,NULL::TIMESTAMP,NULL,NULL::CHAR
  FROM SYS.SYS_USERS U, SYS.SYS_VIEWS V, SYS.SYS_VIEW_COLS C 
  WHERE V.USER# = U.ID AND C.USER# = U.ID AND C.VIEW# = V.ID AND TYPE_ID2NAME(C.DATATYPE) NOT IN ('CHAR','VARCHAR2','NCHAR','NVARCHAR','VARCHAR')
    and (U.NAME = user or 
        user = 'SYS' or 
        DBE_DIAGNOSE.has_obj_privs(user, U.NAME, '"'||V.NAME||'"', 'VIEW'))
    AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
  UNION ALL
  SELECT U.NAME, V.NAME, C.NAME, TYPE_ID2NAME(C.DATATYPE) || DECODE(C.FLAGS & 1024, 1024, '[]', ''), C.BYTES, C.PRECISION, C.SCALE, DECODE(C.NULLABLE, 1, 'Y', 'N'), C.ID, NULL,NULL::BINARY_INTEGER,NULL,NULL,
  NULL::BINARY_INTEGER,NULL::BINARY_INTEGER,C.BYTES, DECODE(C.FLAGS & 32, 32, 'C', 'B'),NULL::BINARY_INTEGER,NULL::TIMESTAMP,NULL,NULL::CHAR
  FROM SYS.SYS_USERS U, SYS.SYS_VIEWS V, SYS.SYS_VIEW_COLS C 
  WHERE V.USER# = U.ID AND C.USER# = U.ID AND C.VIEW# = V.ID AND TYPE_ID2NAME(C.DATATYPE) IN ('CHAR','VARCHAR2','NCHAR','NVARCHAR','VARCHAR')
    and (U.NAME = user or 
         user = 'SYS' or
         DBE_DIAGNOSE.has_obj_privs(user, U.NAME, '"'||V.NAME||'"', 'VIEW'))
    AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
/

CREATE OR REPLACE VIEW DBA_TAB_COLUMNS
(
  OWNER,
  TABLE_NAME,
  COLUMN_NAME,
  DATA_TYPE,
  DATA_LENGTH,
  DATA_PRECISION,
  DATA_SCALE,
  NULLABLE,
  COLUMN_ID,
  DATA_DEFAULT,
  NUM_DISTINCT,
  LOW_VALUE,
  HIGH_VALUE,
  NUM_NULLS,
  NUM_BUCKETS,
  CHAR_LENGTH,
  CHAR_USED,
  SAMPLE_SIZE,
  LAST_ANALYZED,
  HISTOGRAM,
  AUTO_INCREMENT
) 
AS
  SELECT U.NAME, T.NAME, C.NAME, TYPE_ID2NAME(C.DATATYPE) || DECODE(C.FLAGS & 1024, 1024, '[]', ''),
         C.BYTES, C.PRECISION,  C.SCALE, DECODE(C.NULLABLE, 1, 'Y', 'N'), C.ID, 
         C.DEFAULT_TEXT, C.NUM_DISTINCT, C.LOW_VALUE, C.HIGH_VALUE, HH.NULL_NUM, HH.BUCKET_NUM, 
         0, NULL::CHAR, HH.SPARE3, HH.ANALYZE_TIME, C.HISTOGRAM,DECODE(C.FLAGS & 8, 0, 'N', 'Y')
  FROM SYS.SYS_USERS U JOIN SYS.SYS_TABLES T ON T.USER# = U.ID AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
  JOIN SYS.SYS_COLUMNS C ON C.USER# = T.USER# AND C.TABLE# = T.ID AND T.RECYCLED = 0 AND C.FLAGS & 3 = 0 AND TYPE_ID2NAME(C.DATATYPE) NOT IN ('CHAR','VARCHAR2','NCHAR','NVARCHAR','VARCHAR')
  LEFT JOIN SYS.SYS_HISTGRAM_ABSTR HH ON C.USER# = HH.USER# AND C.TABLE# = HH.TAB# AND C.ID = HH.COL# AND (HH.SPARE1 IS NULL OR HH.SPARE1 = 4294967295)
  UNION ALL
  SELECT U.NAME, T.NAME, C.NAME, TYPE_ID2NAME(C.DATATYPE) || DECODE(C.FLAGS & 1024, 1024, '[]', ''),
         C.BYTES, C.PRECISION,  C.SCALE, DECODE(C.NULLABLE, 1, 'Y', 'N'), C.ID, 
         C.DEFAULT_TEXT, C.NUM_DISTINCT, C.LOW_VALUE, C.HIGH_VALUE, HH.NULL_NUM, HH.BUCKET_NUM,
         C.BYTES, DECODE(C.FLAGS & 32, 32, 'C', 'B'), HH.SPARE3, HH.ANALYZE_TIME, C.HISTOGRAM,DECODE(C.FLAGS & 8, 0, 'N', 'Y')
  FROM SYS.SYS_USERS U JOIN SYS.SYS_TABLES T ON T.USER# = U.ID AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
  JOIN SYS.SYS_COLUMNS C ON C.USER# = T.USER# AND C.TABLE# = T.ID AND T.RECYCLED = 0 AND C.FLAGS & 3 = 0 AND TYPE_ID2NAME(C.DATATYPE) IN ('CHAR','VARCHAR2','NCHAR','NVARCHAR','VARCHAR')
  LEFT JOIN SYS.SYS_HISTGRAM_ABSTR HH ON C.USER# = HH.USER# AND C.TABLE# = HH.TAB# AND C.ID = HH.COL# AND (HH.SPARE1 IS NULL OR HH.SPARE1 = 4294967295)
  UNION ALL
  SELECT U.NAME, V.NAME, C.NAME, TYPE_ID2NAME(C.DATATYPE) || DECODE(C.FLAGS & 1024, 1024, '[]', ''), C.BYTES, C.PRECISION, C.SCALE, DECODE(C.NULLABLE, 1, 'Y', 'N'), C.ID, NULL,NULL::BINARY_INTEGER,NULL,NULL,
  NULL::BINARY_INTEGER,NULL::BINARY_INTEGER,0, NULL::CHAR,NULL::BINARY_INTEGER,NULL::TIMESTAMP,NULL,NULL::CHAR
  FROM SYS.SYS_USERS U, SYS.SYS_VIEWS V, SYS.SYS_VIEW_COLS C 
  WHERE V.USER# = U.ID AND C.USER# = U.ID AND C.VIEW# = V.ID AND TYPE_ID2NAME(C.DATATYPE) NOT IN ('CHAR','VARCHAR2','NCHAR','NVARCHAR','VARCHAR') AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
  UNION ALL
  SELECT U.NAME, V.NAME, C.NAME, TYPE_ID2NAME(C.DATATYPE) || DECODE(C.FLAGS & 1024, 1024, '[]', ''), C.BYTES, C.PRECISION, C.SCALE, DECODE(C.NULLABLE, 1, 'Y', 'N'), C.ID, NULL,NULL::BINARY_INTEGER,NULL,NULL,
  NULL::BINARY_INTEGER,NULL::BINARY_INTEGER,C.BYTES, DECODE(C.FLAGS & 32, 32, 'C', 'B'),NULL::BINARY_INTEGER,NULL::TIMESTAMP,NULL,NULL::CHAR
  FROM SYS.SYS_USERS U, SYS.SYS_VIEWS V, SYS.SYS_VIEW_COLS C 
  WHERE V.USER# = U.ID AND C.USER# = U.ID AND C.VIEW# = V.ID AND TYPE_ID2NAME(C.DATATYPE) IN ('CHAR','VARCHAR2','NCHAR','NVARCHAR','VARCHAR') AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
/

CREATE OR REPLACE VIEW DBA_DBLINK_TAB_COLUMNS
(
  OWNER,
  TABLE_NAME,
  COLUMN_NAME,
  DATA_TYPE,
  DATA_LENGTH,
  DATA_PRECISION,
  DATA_SCALE,
  NULLABLE,
  COLUMN_ID
) 
AS
  SELECT U.NAME, T.NAME, C.NAME, C.DATATYPE,
         C.BYTES, C.PRECISION,  C.SCALE, C.NULLABLE, C.ID
  FROM SYS.SYS_USERS U JOIN SYS.SYS_TABLES T ON T.USER# = U.ID AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
  JOIN SYS.SYS_COLUMNS C ON C.USER# = T.USER# AND C.TABLE# = T.ID AND T.RECYCLED = 0 AND C.FLAGS & 3 = 0 AND TYPE_ID2NAME(C.DATATYPE) NOT IN ('CHAR','VARCHAR2','NCHAR','NVARCHAR','VARCHAR')
  UNION ALL
  SELECT U.NAME, T.NAME, C.NAME, C.DATATYPE,
         C.BYTES, C.PRECISION,  C.SCALE, C.NULLABLE, C.ID
  FROM SYS.SYS_USERS U JOIN SYS.SYS_TABLES T ON T.USER# = U.ID AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
  JOIN SYS.SYS_COLUMNS C ON C.USER# = T.USER# AND C.TABLE# = T.ID AND T.RECYCLED = 0 AND C.FLAGS & 3 = 0 AND TYPE_ID2NAME(C.DATATYPE) IN ('CHAR','VARCHAR2','NCHAR','NVARCHAR','VARCHAR')
/

CREATE OR REPLACE VIEW ALL_DBLINK_TAB_COLUMNS
(
  OWNER,
  TABLE_NAME,
  COLUMN_NAME,
  DATA_TYPE,
  DATA_LENGTH,
  DATA_PRECISION,
  DATA_SCALE,
  NULLABLE,
  COLUMN_ID
) 
AS
  SELECT U.NAME, T.NAME, C.NAME, C.DATATYPE,
         C.BYTES, C.PRECISION,  C.SCALE, C.NULLABLE, C.ID
  FROM SYS.SYS_USERS U JOIN SYS.SYS_TABLES T ON T.USER# = U.ID AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
  JOIN SYS.SYS_COLUMNS C ON C.USER# = T.USER# AND C.TABLE# = T.ID AND T.RECYCLED = 0 AND C.FLAGS & 3 = 0 AND TYPE_ID2NAME(C.DATATYPE) NOT IN ('CHAR','VARCHAR2','NCHAR','NVARCHAR','VARCHAR')
    where  U.NAME = user or 
           user = 'SYS' or
           DBE_DIAGNOSE.has_obj_privs(user, U.NAME, '"'||T.NAME||'"', 'TABLE')
  UNION ALL
  SELECT U.NAME, T.NAME, C.NAME, C.DATATYPE,
         C.BYTES, C.PRECISION,  C.SCALE, C.NULLABLE, C.ID
  FROM SYS.SYS_USERS U JOIN SYS.SYS_TABLES T ON T.USER# = U.ID AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
  JOIN SYS.SYS_COLUMNS C ON C.USER# = T.USER# AND C.TABLE# = T.ID AND T.RECYCLED = 0 AND C.FLAGS & 3 = 0 AND TYPE_ID2NAME(C.DATATYPE) IN ('CHAR','VARCHAR2','NCHAR','NVARCHAR','VARCHAR')
    where  U.NAME = user or 
           user = 'SYS' or
           DBE_DIAGNOSE.has_obj_privs(user, U.NAME, '"'||T.NAME||'"', 'TABLE')
/

CREATE OR REPLACE VIEW ALL_VIEWS
(
  OWNER,
  VIEW_NAME,
  VIEW_TYPE,
  COLUMN_COUNT,
  TEXT,
  TEXT_LENGTH,
  CREATED_TIME,
  LAST_DDL_TIME
) 
AS
  SELECT U.NAME, V.NAME, 'NORMAL', V.COLS, V.TEXT, V.TEXT_LENGTH, SCN2DATE(V.ORG_SCN), SCN2DATE(V.CHG_SCN)
  FROM SYS.SYS_USERS U, SYS.SYS_VIEWS V
  WHERE V.USER# = U.ID
    and (U.NAME = user or 
        user = 'SYS' or
        DBE_DIAGNOSE.has_obj_privs(user, U.NAME, '"'||V.NAME||'"', 'VIEW'))
    AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
  UNION ALL
  SELECT DV.USER_NAME, DV.NAME, 'DYNAMIC', DV.COLUMN_COUNT, NULL, 0, SCN2DATE(0), SCN2DATE(0) FROM SYS.DV_DYNAMIC_VIEWS DV
    WHERE DV.USER_NAME = user or  
        user = 'SYS' or 
        DBE_DIAGNOSE.has_obj_privs(user, 'SYS', '"'||DV.NAME||'"', 'VIEW')
/

CREATE OR REPLACE VIEW DBA_VIEWS
(
  OWNER,
  VIEW_NAME,
  VIEW_TYPE,
  COLUMN_COUNT,
  TEXT,
  TEXT_LENGTH,
  CREATED_TIME,
  LAST_DDL_TIME
) 
AS
  SELECT U.NAME, V.NAME, 'NORMAL', V.COLS, V.TEXT, V.TEXT_LENGTH, SCN2DATE(V.ORG_SCN), SCN2DATE(V.CHG_SCN)
  FROM SYS.SYS_USERS U, SYS.SYS_VIEWS V
  WHERE V.USER# = U.ID AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
  UNION ALL
  SELECT DV.USER_NAME, DV.NAME, 'DYNAMIC', DV.COLUMN_COUNT, NULL, 0, SCN2DATE(0), SCN2DATE(0) FROM SYS.DV_DYNAMIC_VIEWS DV
/

CREATE OR REPLACE VIEW USER_VIEWS
(
  VIEW_NAME,
  VIEW_TYPE,
  COLUMN_COUNT,
  TEXT,
  TEXT_LENGTH,
  CREATED_TIME,
  LAST_DDL_TIME
) 
AS
  SELECT V.NAME, 'NORMAL', V.COLS, V.TEXT, V.TEXT_LENGTH, SCN2DATE(V.ORG_SCN), SCN2DATE(V.CHG_SCN)
  FROM SYS.DV_ME ME, SYS.SYS_VIEWS V
  WHERE V.USER# = ME.USER_ID
  UNION ALL
  SELECT DV.NAME, 'DYNAMIC', DV.COLUMN_COUNT, NULL, 0, SCN2DATE(0), SCN2DATE(0) 
  FROM SYS.DV_ME ME, SYS.DV_DYNAMIC_VIEWS DV
  WHERE ME.USER_ID = 0
/

CREATE OR REPLACE VIEW ALL_VIEW_COLUMNS
(
  OWNER,
  VIEW_NAME,
  COLUMN_ID,
  COLUMN_NAME,
  DATA_TYPE,
  DATA_LENGTH,
  DATA_PRECISION,
  DATA_SCALE,
  NULLABLE
) 
AS
  SELECT U.NAME, V.NAME, C.ID, C.NAME, TYPE_ID2NAME(C.DATATYPE) || DECODE(C.FLAGS & 1024, 1024, '[]', ''), C.BYTES, C.PRECISION, C.SCALE, DECODE(C.NULLABLE, 1, 'Y', 'N')
  FROM SYS.SYS_USERS U, SYS.SYS_VIEWS V, SYS.SYS_VIEW_COLS C 
  WHERE V.USER# = U.ID AND C.USER# = U.ID AND C.VIEW# = V.ID
    and (U.NAME = user or 
         user = 'SYS' or
         DBE_DIAGNOSE.has_obj_privs(user, U.NAME, '"'||V.NAME||'"', 'VIEW'))
    AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
  UNION ALL
  SELECT DC.USER_NAME, DC.VIEW_NAME, DC.COLUMN_ID, DC.COLUMN_NAME, DC.DATA_TYPE, DC.DATA_LENGTH, DC.DATA_PRECISION, DC.DATA_SCALE, 'Y' 
  FROM SYS.DV_DYNAMIC_VIEW_COLS DC
  where DC.USER_NAME = user or 
        user = 'SYS' or
        DBE_DIAGNOSE.has_obj_privs(user, 'SYS', '"'||DC.VIEW_NAME||'"', 'VIEW')
/

CREATE OR REPLACE VIEW DBA_VIEW_COLUMNS
(
  OWNER,
  VIEW_NAME,
  COLUMN_ID,
  COLUMN_NAME,
  DATA_TYPE,
  DATA_LENGTH,
  DATA_PRECISION,
  DATA_SCALE,
  NULLABLE
) 
AS
  SELECT U.NAME, V.NAME, C.ID, C.NAME, TYPE_ID2NAME(C.DATATYPE) || DECODE(C.FLAGS & 1024, 1024, '[]', ''), C.BYTES, C.PRECISION, C.SCALE, DECODE(C.NULLABLE, 1, 'Y', 'N')
  FROM SYS.SYS_USERS U, SYS.SYS_VIEWS V, SYS.SYS_VIEW_COLS C 
  WHERE V.USER# = U.ID AND C.USER# = U.ID AND C.VIEW# = V.ID AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
  UNION ALL
  SELECT DC.USER_NAME, DC.VIEW_NAME, DC.COLUMN_ID, DC.COLUMN_NAME, DC.DATA_TYPE, DC.DATA_LENGTH, DC.DATA_PRECISION, DC.DATA_SCALE, 'Y' 
  FROM SYS.DV_DYNAMIC_VIEW_COLS DC
/

CREATE OR REPLACE VIEW USER_VIEW_COLUMNS
(
  VIEW_NAME, 
  COLUMN_ID, 
  COLUMN_NAME, 
  DATA_TYPE, 
  DATA_LENGTH, 
  DATA_PRECISION, 
  DATA_SCALE, 
  NULLABLE
)
AS
  SELECT V.NAME, C.ID, C.NAME, TYPE_ID2NAME(C.DATATYPE) || DECODE(C.FLAGS & 1024, 1024, '[]', ''), C.BYTES, C.PRECISION, C.SCALE, DECODE(C.NULLABLE, 1, 'Y', 'N')
  FROM SYS.DV_ME ME, SYS.SYS_VIEWS V, SYS.SYS_VIEW_COLS C
  WHERE V.USER# = ME.USER_ID AND C.USER# = ME.USER_ID AND C.VIEW# = V.ID
  UNION ALL
  SELECT DC.VIEW_NAME, DC.COLUMN_ID, DC.COLUMN_NAME, DC.DATA_TYPE, DC.DATA_LENGTH, DC.DATA_PRECISION, DC.DATA_SCALE, 'Y' 
  FROM SYS.DV_ME ME, SYS.DV_DYNAMIC_VIEW_COLS DC
  WHERE ME.USER_ID = 0 
/

CREATE OR REPLACE VIEW ALL_INDEXES
(
  OWNER,
  INDEX_NAME,
  INDEX_TYPE,
  TABLE_NAME,
  TABLESPACE_NAME,
  IS_PRIMARY,
  IS_UNIQUE,
  IS_DUPLICATE,
  PARTITIONED,
  STATUS,
  INI_TRANS,
  MAX_TRANS,
  PCT_FREE,
  COLUMN_COUNT,
  COLUMNS,
  BYTES,
  PAGES,
  EXTENTS,
  BLEVEL,
  LEAF_BLOCKS,
  EMPTY_LEAF_BLOCKS,
  DISTINCT_KEYS,
  AVG_LEAF_BLOCKS_PER_KEY,
  AVG_DATA_BLOCKS_PER_KEY,
  CLUSTERING_FACTOR,
  NUM_ROWS,
  SAMPLE_SIZE,
  LAST_ANALYZED,
  SYS_GENERATE,
  CR_MODE,
  IS_REVERSED
)
AS
  SELECT U.NAME, I.NAME, DECODE(I.TYPE, 0, 'NORMAL', 'NORMAL'), 
  T.NAME, DBE_DIAGNOSE.DBA_SPACE_NAME(I.SPACE#)::VARCHAR(64), DECODE(I.IS_PRIMARY, 1, 'Y', 'N'), DECODE(I.IS_UNIQUE, 1, 'Y', 'N'), DECODE(I.FLAGS & 16, 0, 'N', 'Y'),
  DECODE(I.PARTITIONED, 1, 'Y','N'), DECODE(I.FLAGS & 4, 0, 'VALID', 'INVALID'), I.INITRANS, 255, I.PCTFREE, I.COLS, DBE_DIAGNOSE.DBA_LISTCOLS(U.NAME, '"'||T.NAME||'"', I.COL_LIST),
  DECODE(I.PARTITIONED,0,DBE_DIAGNOSE.DBA_SEGSIZE(0, I.ENTRY),1,DBE_DIAGNOSE.DBA_PARTITIONED_INDSIZE(0,U.NAME,'"'||T.NAME||'"','"'||I.NAME||'"')),
  DECODE(I.PARTITIONED,0,DBE_DIAGNOSE.DBA_SEGSIZE(1, I.ENTRY),1,DBE_DIAGNOSE.DBA_PARTITIONED_INDSIZE(1,U.NAME,'"'||T.NAME||'"','"'||I.NAME||'"')),
  DECODE(I.PARTITIONED,0,DBE_DIAGNOSE.DBA_SEGSIZE(2, I.ENTRY),1,DBE_DIAGNOSE.DBA_PARTITIONED_INDSIZE(2,U.NAME,'"'||T.NAME||'"','"'||I.NAME||'"')),
  I.BLEVEL, I.LEVEL_BLOCKS,I.EMPTY_LEAF_BLOCKS, I.DISTINCT_KEYS, I.AVG_LEAF_BLOCKS_PER_KEY, I.AVG_DATA_BLOCKS_PER_KEY, I.CLUFAC,
  T.NUM_ROWS, I.SAMPLESIZE, I.ANALYZETIME, FLAGS & 1,
  DECODE(I.CR_MODE, 0, 'ROW', 1, 'PAGE', NULL),
  DECODE(I.FLAGS & 64, 0, 'N', 'Y') 
  FROM SYS.SYS_USERS U, SYS.SYS_INDEXES I, SYS.SYS_TABLES T
  WHERE T.USER# = U.ID AND I.USER# = U.ID AND I.TABLE# = T.ID AND T.RECYCLED = 0
    AND (U.NAME = user or  
         user = 'SYS' or
         DBE_DIAGNOSE.has_obj_privs(user, U.NAME, '"'||T.NAME||'"', 'TABLE'))
    AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
/

CREATE OR REPLACE VIEW DBA_INDEXES
(
  OWNER,
  INDEX_NAME,
  INDEX_TYPE,
  TABLE_NAME,
  TABLESPACE_NAME,
  IS_PRIMARY,
  IS_UNIQUE,
  IS_DUPLICATE,
  PARTITIONED,
  STATUS,
  INI_TRANS,
  MAX_TRANS,
  PCT_FREE,
  COLUMN_COUNT,
  COLUMNS,
  BYTES,
  PAGES,
  EXTENTS,
  BLEVEL,
  LEAF_BLOCKS,
  EMPTY_LEAF_BLOCKS,
  DISTINCT_KEYS,
  AVG_LEAF_BLOCKS_PER_KEY,
  AVG_DATA_BLOCKS_PER_KEY,
  CLUSTERING_FACTOR,
  NUM_ROWS,
  SAMPLE_SIZE,
  LAST_ANALYZED,
  SYS_GENERATE,
  CR_MODE,
  IS_REVERSED
)
AS
  SELECT U.NAME, I.NAME, DECODE(I.TYPE, 0, 'NORMAL', 'NORMAL'), 
  T.NAME, DBE_DIAGNOSE.DBA_SPACE_NAME(I.SPACE#)::VARCHAR(64), DECODE(I.IS_PRIMARY, 1, 'Y', 'N'), DECODE(I.IS_UNIQUE, 1, 'Y', 'N'), DECODE(I.FLAGS & 16, 0, 'N', 'Y'),
  DECODE(I.PARTITIONED, 1, 'Y','N'), DECODE(I.FLAGS & 4, 0, 'VALID', 'INVALID'), I.INITRANS, 255, I.PCTFREE, I.COLS, DBE_DIAGNOSE.DBA_LISTCOLS(U.NAME, '"'||T.NAME||'"', I.COL_LIST),
  DECODE(I.PARTITIONED,0,DBE_DIAGNOSE.DBA_SEGSIZE(0, I.ENTRY),1,DBE_DIAGNOSE.DBA_PARTITIONED_INDSIZE(0,U.NAME,'"'||T.NAME||'"','"'||I.NAME||'"')),
  DECODE(I.PARTITIONED,0,DBE_DIAGNOSE.DBA_SEGSIZE(1, I.ENTRY),1,DBE_DIAGNOSE.DBA_PARTITIONED_INDSIZE(1,U.NAME,'"'||T.NAME||'"','"'||I.NAME||'"')),
  DECODE(I.PARTITIONED,0,DBE_DIAGNOSE.DBA_SEGSIZE(2, I.ENTRY),1,DBE_DIAGNOSE.DBA_PARTITIONED_INDSIZE(2,U.NAME,'"'||T.NAME||'"','"'||I.NAME||'"')),
  I.BLEVEL, I.LEVEL_BLOCKS,I.EMPTY_LEAF_BLOCKS, I.DISTINCT_KEYS, I.AVG_LEAF_BLOCKS_PER_KEY, I.AVG_DATA_BLOCKS_PER_KEY, I.CLUFAC,
  T.NUM_ROWS, I.SAMPLESIZE, I.ANALYZETIME, FLAGS & 1,
  DECODE(I.CR_MODE, 0, 'ROW', 1, 'PAGE', NULL),
  DECODE(I.FLAGS & 64, 0, 'N', 'Y') 
  FROM SYS.SYS_USERS U, SYS.SYS_INDEXES I, SYS.SYS_TABLES T
  WHERE T.USER# = U.ID AND I.USER# = U.ID AND I.TABLE# = T.ID AND T.RECYCLED = 0 AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
/

CREATE OR REPLACE VIEW USER_INDEXES
(
  INDEX_NAME,
  INDEX_TYPE,
  TABLE_NAME,
  TABLESPACE_NAME,
  IS_PRIMARY,
  IS_UNIQUE,
  IS_DUPLICATE,
  PARTITIONED,
  STATUS,
  INI_TRANS,
  MAX_TRANS,
  PCT_FREE,
  COLUMN_COUNT,
  COLUMNS,
  BYTES,
  PAGES,
  EXTENTS,
  BLEVEL,
  LEAF_BLOCKS,
  EMPTY_LEAF_BLOCKS,
  DISTINCT_KEYS,
  AVG_LEAF_BLOCKS_PER_KEY,
  AVG_DATA_BLOCKS_PER_KEY,
  CLUSTERING_FACTOR,
  NUM_ROWS,
  SAMPLE_SIZE,
  LAST_ANALYZED,
  SYS_GENERATE,
  CR_MODE,
  IS_REVERSED
)
AS
  SELECT I.NAME, DECODE(I.TYPE, 0, 'NORMAL', 'NORMAL'), 
  T.NAME, DBE_DIAGNOSE.DBA_SPACE_NAME(I.SPACE#), DECODE(I.IS_PRIMARY, 1, 'Y', 'N'), DECODE(I.IS_UNIQUE, 1, 'Y', 'N'), DECODE(I.FLAGS & 16, 0, 'N', 'Y'),
  DECODE(I.PARTITIONED,1,'Y','N'), DECODE(I.FLAGS & 4, 0, 'VALID', 'INVALID'), I.INITRANS, 255, I.PCTFREE, I.COLS, DBE_DIAGNOSE.DBA_LISTCOLS(ME.USER_NAME, '"'||T.NAME||'"', I.COL_LIST),
  DECODE(I.PARTITIONED,0,DBE_DIAGNOSE.DBA_SEGSIZE(0, I.ENTRY),1,DBE_DIAGNOSE.DBA_PARTITIONED_INDSIZE(0,ME.USER_NAME,'"'||T.NAME||'"','"'||I.NAME||'"')),
  DECODE(I.PARTITIONED,0,DBE_DIAGNOSE.DBA_SEGSIZE(1, I.ENTRY),1,DBE_DIAGNOSE.DBA_PARTITIONED_INDSIZE(1,ME.USER_NAME,'"'||T.NAME||'"','"'||I.NAME||'"')),
  DECODE(I.PARTITIONED,0,DBE_DIAGNOSE.DBA_SEGSIZE(2, I.ENTRY),1,DBE_DIAGNOSE.DBA_PARTITIONED_INDSIZE(2,ME.USER_NAME,'"'||T.NAME||'"','"'||I.NAME||'"')),
  I.BLEVEL, I.LEVEL_BLOCKS,I.EMPTY_LEAF_BLOCKS, I.DISTINCT_KEYS, I.AVG_LEAF_BLOCKS_PER_KEY, I.AVG_DATA_BLOCKS_PER_KEY, I.CLUFAC,
  T.NUM_ROWS, I.SAMPLESIZE, I.ANALYZETIME, FLAGS & 1,
  DECODE(I.CR_MODE, 0, 'ROW', 1, 'PAGE', NULL),
  DECODE(I.FLAGS & 64, 0, 'N', 'Y') 
  FROM SYS.DV_ME ME, SYS.SYS_INDEXES I, SYS.SYS_TABLES T
  WHERE I.USER# = ME.USER_ID AND T.USER# = ME.USER_ID AND I.TABLE# = T.ID AND T.RECYCLED = 0
/

CREATE OR REPLACE VIEW ALL_OBJECTS
(
  OWNER,
  OBJECT_NAME,
  SUBOBJECT_NAME,
  OBJECT_ID,
  OBJECT_TYPE,
  CREATED,
  LAST_DDL_TIME,
  STATUS,
  TEMPORARY
)
AS
  SELECT U.NAME, T.NAME, NULL AS SUBOBJECT_NAME, T.ID, DECODE(T.RECYCLED, 1, 'RECYCLED TABLE', 'TABLE'), 
  SCN2DATE(T.ORG_SCN), SCN2DATE(T.CHG_SCN), 'VALID', if(T.TYPE = 2 or T.TYPE = 3, 'Y', 'N')
   FROM SYS.SYS_USERS U, SYS.SYS_TABLES T
    WHERE T.RECYCLED = 0 AND
          T.USER# = U.ID and 
          (U.NAME = user or  
           user = 'SYS' or
           DBE_DIAGNOSE.has_obj_privs(user, U.NAME, '"'||T.NAME||'"', 'TABLE')) AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
  UNION ALL
  SELECT U.NAME, T.NAME, P.NAME AS SUBOBJECT_NAME, P.PART#, 'TABLE PARTITION', 
  SCN2DATE(P.ORG_SCN), SCN2DATE(T.CHG_SCN), 'VALID', if(T.TYPE = 2 or T.TYPE = 3, 'Y', 'N')
   FROM SYS.SYS_USERS U, SYS.SYS_TABLES T, SYS.SYS_TABLE_PARTS P
    WHERE T.RECYCLED = 0 AND
          T.USER# = U.ID AND 
          P.USER# = U.ID AND 
          P.TABLE# = T.ID and 
          (U.NAME = user or  
           user = 'SYS' or
           DBE_DIAGNOSE.has_obj_privs(user, U.NAME, '"'||T.NAME||'"', 'TABLE')) AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
  UNION ALL  
  SELECT U.NAME, I.NAME, NULL AS SUBOBJECT_NAME, I.ID, DECODE(T.RECYCLED, 1, 'RECYCLED INDEX', 'INDEX'), 
  SCN2DATE(I.SEQUENCE#), SCN2DATE(I.SEQUENCE#), DECODE(I.FLAGS & 4, 0, 'VALID', 'INVALID'), if(T.TYPE = 2 or T.TYPE = 3, 'Y', 'N')
   FROM SYS.SYS_USERS U, SYS.SYS_INDEXES I, SYS.SYS_TABLES T
    WHERE T.RECYCLED = 0 AND 
          I.USER# = U.ID AND 
          T.USER# = U.ID AND 
          I.TABLE# = T.ID AND 
          (U.NAME = user or  
           user = 'SYS' or
           DBE_DIAGNOSE.has_obj_privs(user, U.NAME, '"'||T.NAME||'"', 'TABLE')) AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
  UNION ALL
  SELECT U.NAME, V.NAME, NULL AS SUBOBJECT_NAME, V.ID, 'VIEW',
  SCN2DATE(V.ORG_SCN), SCN2DATE(V.CHG_SCN), DECODE(V.FLAGS, 1, 'VALID', 0, 'INVALID', 'UNKNOWN'), 'N'
   FROM SYS.SYS_USERS U, SYS.SYS_VIEWS V
    WHERE V.USER# = U.ID and 
          (U.NAME = user or  
           user = 'SYS' or 
           DBE_DIAGNOSE.has_obj_privs(user, U.NAME, '"'||V.NAME||'"', 'VIEW')) AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
  UNION ALL
  SELECT DV.USER_NAME, DV.NAME, NULL AS SUBOBJECT_NAME, DV.ID, 'DYNAMIC VIEW', 
  SCN2DATE(0), SCN2DATE(0), 'VALID', 'N'
  FROM SYS.DV_DYNAMIC_VIEWS DV
    WHERE DV.USER_NAME = user or  
          user = 'SYS' or 
          DBE_DIAGNOSE.has_obj_privs(user, 'SYS', '"'||DV.NAME||'"', 'VIEW')
 
  UNION ALL
  SELECT U.NAME, P.NAME, NULL AS SUBOBJECT_NAME, P.OBJ#, 
  CASE WHEN P.TYPE='P' THEN 'PROCEDURE' WHEN P.TYPE='T' THEN 'TRIGGER' WHEN P.TYPE='F' THEN 'FUNCTION' WHEN P.TYPE='S' THEN 'PACKAGE SPEC' WHEN P.TYPE='B' THEN 'PACKAGE BODY' WHEN P.TYPE='Y' THEN 'TYPE SPEC' WHEN P.TYPE='O' THEN 'TYPE BODY' ELSE P.TYPE END,
  SCN2DATE(P.ORG_SCN), SCN2DATE(P.CHG_SCN), DECODE(P.STATUS, 1, 'VALID', 0,'INVALID','UNKNOWN'), 'N'
   FROM SYS.SYS_USERS U, SYS.SYS_PROCS P
    WHERE P.USER# = U.ID and   
          (U.NAME = user or 
           user = 'SYS' or
           DBE_DIAGNOSE.has_obj_privs(user, U.NAME, '"'||P.NAME||'"', P.TYPE)) AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
  UNION ALL
  SELECT U.NAME, S.NAME, NULL AS SUBOBJECT_NAME, S.ID, 'SEQUENCE',
  SCN2DATE(S.ORG_SCN), SCN2DATE(S.CHG_SCN), 'VALID', 'N'
   FROM SYS.SYS_USERS U, SYS.SYS_SEQUENCES S
    WHERE S.UID = U.ID and 
          (U.NAME = user or  
           user = 'SYS' or
           DBE_DIAGNOSE.has_obj_privs(user, U.NAME, '"'||S.NAME||'"', 'SEQUENCE') ) AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
  UNION ALL
  SELECT U.NAME, Y.SYNONYM_NAME, NULL AS SUBOBJECT_NAME, Y.ID, 'SYNONYM',
    SCN2DATE(Y.ORG_SCN), SCN2DATE(Y.CHG_SCN), DECODE(Y.FLAGS, 1, 'VALID', 0,'INVALID','UNKNOWN'), 'N'
   FROM SYS.SYS_USERS U, SYS.SYS_SYNONYMS Y
    WHERE Y.USER# = U.ID and
          Y.TYPE = 0 and    
         (U.NAME = user or 
          U.NAME = 'PUBLIC' or 
          user = 'SYS' or 
          DBE_DIAGNOSE.has_obj_privs(user, Y.TABLE_OWNER, '"'||Y.TABLE_NAME||'"', 'TABLE')) AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
  UNION ALL
  SELECT U.NAME, Y.SYNONYM_NAME, NULL AS SUBOBJECT_NAME, Y.ID, 'SYNONYM',
    SCN2DATE(Y.ORG_SCN), SCN2DATE(Y.CHG_SCN), DECODE(Y.FLAGS, 1, 'VALID', 0,'INVALID','UNKNOWN'), 'N'
   FROM SYS.SYS_USERS U, SYS.SYS_SYNONYMS Y
    WHERE Y.USER# = U.ID and
          Y.TYPE = 1 and    
         (U.NAME = user or 
          U.NAME = 'PUBLIC' or 
          user = 'SYS' or 
          DBE_DIAGNOSE.has_obj_privs(user, Y.TABLE_OWNER, '"'||Y.TABLE_NAME||'"', 'VIEW')) AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
  UNION ALL
  SELECT U.NAME, Y.SYNONYM_NAME, NULL AS SUBOBJECT_NAME, Y.ID, 'SYNONYM',
    SCN2DATE(Y.ORG_SCN), SCN2DATE(Y.CHG_SCN), DECODE(Y.FLAGS, 1, 'VALID', 0,'INVALID','UNKNOWN'), 'N'
   FROM SYS.SYS_USERS U, SYS.SYS_SYNONYMS Y
    WHERE Y.USER# = U.ID and
          Y.TYPE = 8 and    
         (U.NAME = user or 
          U.NAME = 'PUBLIC' or 
          user = 'SYS' or 
          DBE_DIAGNOSE.has_obj_privs(user, Y.TABLE_OWNER, '"'||Y.SYNONYM_NAME||'"', 'FUNCTION')) AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
   UNION ALL
   SELECT U.NAME, D.DIRECTORY_NAME, NULL AS SUBOBJECT_NAME, NULL AS OBJECT_ID, 'DIRECTORY', NULL AS CREATED, NULL AS LAST_DDL_TIME, NULL AS STATUS, NULL AS TEMPORARY 
   FROM SYS.SYS_USERS U, SYS.SYS_DIRECTORIES D
   WHERE U.ID = D.USER# and 
        (U.NAME = user or 
         user = 'SYS' or 
         DBE_DIAGNOSE.has_obj_privs(user, U.NAME, '"'||D.DIRECTORY_NAME||'"', 'DIRECTORY')) AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
  UNION ALL
  SELECT U.NAME, L.NAME, NULL AS SUBOBJECT_NAME, NULL AS OBJECT_ID, 'LIBRARY', SCN2DATE(L.ORG_SCN), SCN2DATE(L.CHG_SCN), NULL AS STATUS, 'N' 
  FROM SYS.SYS_USERS U, SYS.SYS_LIBRARIES L
  WHERE U.ID = L.USER# and 
        (U.NAME = user or 
         user = 'SYS' or
         DBE_DIAGNOSE.has_obj_privs(user, U.NAME, '"'||L.NAME||'"', 'LIBRARY') ) AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
/

CREATE OR REPLACE VIEW DBA_OBJECTS
(
  OWNER,
  OBJECT_NAME,
  SUBOBJECT_NAME,
  OBJECT_ID,
  OBJECT_TYPE,
  CREATED,
  LAST_DDL_TIME,
  STATUS,
  TEMPORARY
)
AS
  SELECT U.NAME, T.NAME, NULL AS SUBOBJECT_NAME, T.ID, DECODE(T.RECYCLED, 1, 'RECYCLED TABLE', 'TABLE'), 
  SCN2DATE(T.ORG_SCN), SCN2DATE(T.CHG_SCN), 'VALID', if(T.TYPE = 2 or T.TYPE = 3, 'Y', 'N')
   FROM SYS.SYS_USERS U, SYS.SYS_TABLES T
    WHERE T.USER# = U.ID AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
  UNION ALL
  SELECT U.NAME, T.NAME, P.NAME AS SUBOBJECT_NAME, P.PART#, 'TABLE PARTITION', 
  SCN2DATE(P.ORG_SCN), SCN2DATE(T.CHG_SCN), 'VALID', if(T.TYPE = 2 or T.TYPE = 3, 'Y', 'N')
   FROM SYS.SYS_USERS U, SYS.SYS_TABLES T, SYS.SYS_TABLE_PARTS P
    WHERE T.USER# = U.ID AND P.USER# = U.ID AND P.TABLE# = T.ID AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
  UNION ALL 
  SELECT U.NAME, I.NAME, NULL AS SUBOBJECT_NAME, I.ID, DECODE(T.RECYCLED, 1, 'RECYCLED INDEX', 'INDEX'), 
  SCN2DATE(I.SEQUENCE#), SCN2DATE(I.SEQUENCE#), DECODE(I.FLAGS & 4, 0, 'VALID', 'INVALID'), if(T.TYPE = 2 or T.TYPE = 3, 'Y', 'N')
   FROM SYS.SYS_USERS U, SYS.SYS_INDEXES I, SYS.SYS_TABLES T
    WHERE I.USER# = U.ID AND T.USER# = U.ID AND I.TABLE# = T.ID AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
  UNION ALL
  SELECT U.NAME, V.NAME, NULL AS SUBOBJECT_NAME, V.ID, 'VIEW',
  SCN2DATE(V.ORG_SCN), SCN2DATE(V.CHG_SCN), DECODE(V.FLAGS, 1, 'VALID', 0, 'INVALID', 'UNKNOWN'), 'N'
   FROM SYS.SYS_USERS U, SYS.SYS_VIEWS V
    WHERE V.USER# = U.ID AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
  UNION ALL
  SELECT DV.USER_NAME, DV.NAME, NULL AS SUBOBJECT_NAME, DV.ID, 'DYNAMIC VIEW', 
  SCN2DATE(0), SCN2DATE(0), 'VALID', 'N'
  FROM SYS.DV_DYNAMIC_VIEWS DV
  UNION ALL
  SELECT U.NAME, P.NAME, NULL AS SUBOBJECT_NAME, P.OBJ#, 
  CASE WHEN P.TYPE='P' THEN 'PROCEDURE' WHEN P.TYPE='T' THEN 'TRIGGER' WHEN P.TYPE='F' THEN 'FUNCTION' WHEN P.TYPE='S' THEN 'PACKAGE SPEC' WHEN P.TYPE='B' THEN 'PACKAGE BODY' WHEN P.TYPE='Y' THEN 'TYPE SPEC' WHEN P.TYPE='O' THEN 'TYPE BODY' ELSE P.TYPE END,
  SCN2DATE(P.ORG_SCN), SCN2DATE(P.CHG_SCN), DECODE(P.STATUS, 1, 'VALID', 0,'INVALID','UNKNOWN'), 'N'
   FROM SYS.SYS_USERS U, SYS.SYS_PROCS P
    WHERE P.USER# = U.ID AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
  UNION ALL
  SELECT U.NAME, S.NAME, NULL AS SUBOBJECT_NAME, S.ID, 'SEQUENCE',
  SCN2DATE(S.ORG_SCN), SCN2DATE(S.CHG_SCN), 'VALID', 'N'
   FROM SYS.SYS_USERS U, SYS.SYS_SEQUENCES S
    WHERE S.UID = U.ID AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
  UNION ALL
  SELECT U.NAME, Y.SYNONYM_NAME, NULL AS SUBOBJECT_NAME, Y.ID, 'SYNONYM',
    SCN2DATE(Y.ORG_SCN), SCN2DATE(Y.CHG_SCN), DECODE(Y.FLAGS, 1, 'VALID', 0,'INVALID','UNKNOWN'), 'N'
   FROM SYS.SYS_USERS U, SYS.SYS_SYNONYMS Y
    WHERE Y.USER# = U.ID AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
   UNION ALL
   SELECT U.NAME, D.DIRECTORY_NAME, NULL AS SUBOBJECT_NAME, NULL AS OBJECT_ID, 'DIRECTORY', NULL AS CREATED, NULL AS LAST_DDL_TIME, NULL AS STATUS, NULL AS TEMPORARY FROM SYS.SYS_USERS U, SYS.SYS_DIRECTORIES D WHERE U.ID = D.USER# AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
  UNION ALL
  SELECT U.NAME, L.NAME, NULL AS SUBOBJECT_NAME, NULL AS OBJECT_ID, 'LIBRARY', SCN2DATE(L.ORG_SCN), SCN2DATE(L.CHG_SCN), NULL AS STATUS, 'N' FROM SYS.SYS_USERS U, SYS.SYS_LIBRARIES L WHERE U.ID = L.USER# AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
/

CREATE OR REPLACE VIEW USER_OBJECTS
(
  OBJECT_NAME,
  SUBOBJECT_NAME,
  OBJECT_ID,
  OBJECT_TYPE,
  CREATED,
  LAST_DDL_TIME,
  STATUS,
  TEMPORARY
)
AS
  SELECT T.NAME, NULL AS SUBOBJECT_NAME, T.ID, DECODE(T.RECYCLED, 1, 'RECYCLED TABLE', 'TABLE'), 
  SCN2DATE(T.ORG_SCN), SCN2DATE(T.CHG_SCN), 'VALID', if(T.TYPE = 2 or T.TYPE = 3, 'Y', 'N')
  FROM SYS.DV_ME ME, SYS.SYS_TABLES T
  WHERE T.USER# = ME.USER_ID
  UNION ALL
  SELECT T.NAME, P.NAME AS SUBOBJECT_NAME, P.PART#, 'TABLE PARTITION', 
  SCN2DATE(P.ORG_SCN), SCN2DATE(T.CHG_SCN), 'VALID', if(T.TYPE = 2 or T.TYPE = 3, 'Y', 'N')
   FROM SYS.DV_ME ME, SYS.SYS_TABLES T, SYS.SYS_TABLE_PARTS P
    WHERE T.USER# = ME.USER_ID AND P.USER# = ME.USER_ID AND P.TABLE# = T.ID  
  UNION ALL  
  SELECT I.NAME, NULL AS SUBOBJECT_NAME, I.ID, DECODE(T.RECYCLED, 1, 'RECYCLED INDEX', 'INDEX'), 
  SCN2DATE(I.SEQUENCE#), SCN2DATE(I.SEQUENCE#), DECODE(I.FLAGS & 4, 0, 'VALID', 'INVALID'), if(T.TYPE = 2 or T.TYPE = 3, 'Y', 'N')
  FROM SYS.DV_ME ME, SYS.SYS_INDEXES I, SYS.SYS_TABLES T
  WHERE I.USER# = ME.USER_ID AND T.USER# = I.USER# AND I.TABLE# = T.ID 
  UNION ALL
  SELECT V.NAME, NULL AS SUBOBJECT_NAME, V.ID, 'VIEW', 
  SCN2DATE(V.ORG_SCN), SCN2DATE(V.CHG_SCN), DECODE(V.FLAGS, 1, 'VALID', 0, 'INVALID', 'UNKNOWN'), 'N'
  FROM SYS.DV_ME ME, SYS.SYS_VIEWS V
  WHERE V.USER# = ME.USER_ID 
  UNION ALL
  SELECT P.NAME, NULL AS SUBOBJECT_NAME, P.OBJ#, 
  CASE WHEN P.TYPE='P' THEN 'PROCEDURE' WHEN P.TYPE='T' THEN 'TRIGGER' WHEN P.TYPE='F' THEN 'FUNCTION' WHEN P.TYPE='S' THEN 'PACKAGE SPEC' WHEN P.TYPE='B' THEN 'PACKAGE BODY' WHEN P.TYPE='Y' THEN 'TYPE SPEC' WHEN P.TYPE='O' THEN 'TYPE BODY' ELSE P.TYPE END,
  SCN2DATE(P.ORG_SCN), SCN2DATE(P.CHG_SCN), DECODE(P.STATUS, 1, 'VALID', 0,'INVALID','UNKNOWN'), 'N'
  FROM SYS.DV_ME ME, SYS.SYS_PROCS P
  WHERE P.USER# = ME.USER_ID
  UNION ALL
  SELECT S.NAME, NULL AS SUBOBJECT_NAME, S.ID, 'SEQUENCE',
  SCN2DATE(S.ORG_SCN), SCN2DATE(S.CHG_SCN), 'VALID', 'N'
  FROM SYS.DV_ME ME, SYS.SYS_SEQUENCES S
  WHERE S.UID = ME.USER_ID
  UNION ALL
  SELECT Y.SYNONYM_NAME, NULL AS SUBOBJECT_NAME, Y.ID, 'SYNONYM',
  SCN2DATE(Y.ORG_SCN), SCN2DATE(Y.CHG_SCN), DECODE(Y.FLAGS, 1, 'VALID', 0,'INVALID','UNKNOWN'), 'N'
  FROM SYS.DV_ME ME, SYS.SYS_SYNONYMS Y
  WHERE Y.USER# = ME.USER_ID
  UNION ALL
  SELECT D.DIRECTORY_NAME, NULL AS SUBOBJECT_NAME, NULL AS OBJECT_ID, 'DIRECTORY', NULL AS CREATED, NULL AS LAST_DDL_TIME, NULL AS STATUS, NULL AS TEMPORARY FROM SYS.DV_ME ME, SYS.SYS_DIRECTORIES D WHERE ME.USER_ID = D.USER#
  UNION ALL
  SELECT L.NAME, NULL AS SUBOBJECT_NAME, NULL AS OBJECT_ID, 'LIBRARY', SCN2DATE(L.ORG_SCN), SCN2DATE(L.CHG_SCN), NULL AS STATUS, 'N' FROM SYS.DV_ME ME, SYS.SYS_LIBRARIES L WHERE ME.USER_ID = L.USER#
/

CREATE OR REPLACE VIEW DBA_TABLESPACES 
(
  TABLESPACE_NAME,
  PAGE_SIZE,
  EXTENT_PAGES,
  DATAFILE_COUNT,
  TOTAL_SIZE,
  USED_SIZE,
  STATUS,
  IN_MEMORY,
  CONTENTS,
  LOGGING,
  BIGFILE,
  ENCRYPT
)
AS
  SELECT TS.NAME, DBE_DIAGNOSE.DBA_SPCSIZE(TS.ID, 'PAGE'), TS.EXTENT_SIZE, TS.FILE_COUNT, 
  DBE_DIAGNOSE.DBA_SPCSIZE(TS.ID, 'TOTAL'), DBE_DIAGNOSE.DBA_SPCSIZE(TS.ID, 'USED'), TS.STATUS, TS.IN_MEMORY, 
  DECODE(TS.TEMPORARY, 'TRUE', 'TEMPORARY', 'PERMANENT'),
  DECODE(TS.TEMPORARY, 'TRUE', 'N', 'Y'), 'N',
  DECODE(TS.ENCRYPT, 'TRUE', 'Y', 'N')
  FROM SYS.DV_TABLESPACES TS
/

CREATE OR REPLACE VIEW DBA_FREE_SPACE
(
  TABLESPACE_NAME,
  FILE_ID,
  BLOCK_ID,
  BYTES,
  BLOCKS,
  RELATIVE_FNO
)
AS
  SELECT * FROM SYS.DV_FREE_SPACE
/

CREATE OR REPLACE VIEW USER_FREE_SPACE
(
  TABLESPACE_NAME,
  FILE_ID,
  BLOCK_ID,
  BYTES,
  BLOCKS,
  RELATIVE_FNO
)
AS
  SELECT
  TABLESPACE_NAME,
  FILE_ID,
  BLOCK_ID,
  BYTES,
  BLOCKS,
  RELATIVE_FNO
  FROM SYS.DV_FREE_SPACE
/

CREATE OR REPLACE VIEW USER_SYNONYMS
(
  SYNONYM_NAME,
  TABLE_OWNER,
  TABLE_NAME
)
AS
  SELECT  S.SYNONYM_NAME, S.TABLE_OWNER, S.TABLE_NAME
  FROM SYS.DV_ME ME  INNER JOIN  SYS.SYS_SYNONYMS S ON ME.USER_ID = S.USER# 
  
/
COMMENT ON COLUMN SYS.USER_SYNONYMS.SYNONYM_NAME IS 'Name of the synonym' 
/
COMMENT ON COLUMN SYS.USER_SYNONYMS.TABLE_OWNER IS 'Owner of the object referenced by the synonym'
/
COMMENT ON COLUMN SYS.USER_SYNONYMS.TABLE_NAME IS 'Name of the object referenced by the synonym'
/

CREATE OR REPLACE VIEW SYS.DBA_SYNONYMS 
(
  OWNER,
  SYNONYM_NAME,
  TABLE_OWNER,
  TABLE_NAME
)
AS
  SELECT U.NAME, S.SYNONYM_NAME, S.TABLE_OWNER, S.TABLE_NAME
  FROM SYS.SYS_USERS U  INNER JOIN  SYS.SYS_SYNONYMS S ON U.ID = S.USER# AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
/

CREATE OR REPLACE VIEW SYS.ALL_SYNONYMS 
(
  OWNER,
  SYNONYM_NAME,
  TABLE_OWNER,
  TABLE_NAME
)
AS
  SELECT U.NAME, S.SYNONYM_NAME, S.TABLE_OWNER, S.TABLE_NAME
  FROM SYS.SYS_USERS U  INNER JOIN  SYS.SYS_SYNONYMS S ON U.ID = S.USER# AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
    where S.TYPE = 0 and
          (U.NAME = user or 
           user = 'SYS' or 
           U.NAME = 'PUBLIC' or  
           DBE_DIAGNOSE.has_obj_privs(user, S.TABLE_OWNER, '"'||S.TABLE_NAME||'"', 'TABLE'))
  UNION ALL  
  SELECT U.NAME, S.SYNONYM_NAME, S.TABLE_OWNER, S.TABLE_NAME
  FROM SYS.SYS_USERS U  INNER JOIN  SYS.SYS_SYNONYMS S ON U.ID = S.USER# AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
    where S.TYPE = 1 and
          (U.NAME = user or 
           user = 'SYS' or 
           U.NAME = 'PUBLIC' or  
           DBE_DIAGNOSE.has_obj_privs(user, S.TABLE_OWNER, '"'||S.TABLE_NAME||'"', 'VIEW'))
  UNION ALL
  SELECT U.NAME, S.SYNONYM_NAME, S.TABLE_OWNER, S.TABLE_NAME
  FROM SYS.SYS_USERS U  INNER JOIN  SYS.SYS_SYNONYMS S ON U.ID = S.USER# AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
    where S.TYPE = 8 and
          (U.NAME = user or 
           user = 'SYS' or 
           U.NAME = 'PUBLIC' or  
           DBE_DIAGNOSE.has_obj_privs(user, S.TABLE_OWNER, '"'||S.SYNONYM_NAME||'"', 'FUNCTION'))
/ 

COMMENT ON COLUMN SYS.ALL_SYNONYMS.OWNER IS 'Username of the owner of the synonym'
/
COMMENT ON COLUMN SYS.ALL_SYNONYMS.SYNONYM_NAME IS 'Name of the synonym'
/
COMMENT ON COLUMN SYS.ALL_SYNONYMS.TABLE_OWNER IS 'Owner of the object referenced by the synonym'
/
COMMENT ON COLUMN SYS.ALL_SYNONYMS.TABLE_NAME IS 'Name of the object referenced by the synonym'
/

CREATE OR REPLACE VIEW USER_TAB_COMMENTS 
(
  TABLE_NAME,
  TABLE_TYPE,
  COMMENTS
)
AS
  SELECT  T.NAME, 'TABLE', C.TEXT
  FROM SYS.SYS_TABLES T INNER JOIN SYS.DV_ME ME ON ME.USER_ID = T.USER# AND T.RECYCLED = 0 INNER JOIN SYS.SYS_COMMENTS C  ON  T.USER# = C.USER# AND T.ID = C.TABLE# AND C.COLUMN# IS NULL
  UNION ALL
  SELECT  V.NAME, 'VIEW', C.TEXT
  FROM SYS.SYS_VIEWS V INNER JOIN SYS.DV_ME ME ON ME.USER_ID = V.USER# INNER JOIN SYS.SYS_COMMENTS C  ON  V.USER# = C.USER# AND V.ID = C.TABLE# AND C.COLUMN# IS NULL
/
COMMENT ON COLUMN SYS.USER_TAB_COMMENTS.TABLE_NAME IS 'Name of the object' 
/
COMMENT ON COLUMN SYS.USER_TAB_COMMENTS.TABLE_TYPE IS 'Type of the object:  "TABLE" or "VIEW"'
/
COMMENT ON COLUMN SYS.USER_TAB_COMMENTS.COMMENTS IS 'Comment on the object'
/

CREATE OR REPLACE VIEW DBA_TAB_COMMENTS 
(
  OWNER,
  TABLE_NAME,
  TABLE_TYPE,
  COMMENTS
)
AS
  SELECT  U.NAME, T.NAME, 'TABLE', C.TEXT
  FROM SYS.SYS_TABLES T INNER JOIN  SYS.SYS_USERS U ON U.ID = T.USER# AND T.RECYCLED = 0 AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID) INNER JOIN SYS.SYS_COMMENTS C  ON  T.USER# = C.USER# AND T.ID = C.TABLE# AND C.COLUMN# IS NULL
  UNION ALL
  SELECT  U.NAME, V.NAME, 'VIEW', C.TEXT
  FROM SYS.SYS_VIEWS V INNER JOIN SYS.SYS_USERS U ON U.ID = V.USER# AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID) INNER JOIN SYS.SYS_COMMENTS C  ON  V.USER# = C.USER# AND V.ID = C.TABLE# AND C.COLUMN# IS NULL
/ 
COMMENT ON COLUMN SYS.DBA_TAB_COMMENTS.OWNER IS 'Owner of the object'
/
COMMENT ON COLUMN SYS.DBA_TAB_COMMENTS.TABLE_NAME IS 'Name of the object'
/
COMMENT ON COLUMN SYS.DBA_TAB_COMMENTS.TABLE_TYPE IS 'Type of the object'
/
COMMENT ON COLUMN SYS.DBA_TAB_COMMENTS.COMMENTS IS 'Comment on the object'
/

CREATE OR REPLACE VIEW ALL_TAB_COMMENTS 
(
  OWNER,
  TABLE_NAME,
  TABLE_TYPE,
  COMMENTS
)
AS
  SELECT  U.NAME, T.NAME, 'TABLE', C.TEXT
  FROM SYS.SYS_TABLES T INNER JOIN  SYS.SYS_USERS U ON U.ID = T.USER# AND T.RECYCLED = 0 AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID) INNER JOIN SYS.SYS_COMMENTS C  ON  T.USER# = C.USER# AND T.ID = C.TABLE# AND C.COLUMN# IS NULL
    where (U.NAME = user or 
           user = 'SYS' or
           DBE_DIAGNOSE.has_obj_privs(user, U.NAME, '"'||T.NAME||'"', 'TABLE'))
  UNION ALL
  SELECT  U.NAME, V.NAME, 'VIEW', C.TEXT
  FROM SYS.SYS_VIEWS V INNER JOIN SYS.SYS_USERS U ON U.ID = V.USER# AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID) INNER JOIN SYS.SYS_COMMENTS C  ON  V.USER# = C.USER# AND V.ID = C.TABLE# AND C.COLUMN# IS NULL
    where (U.NAME = user or 
           user = 'SYS' or
           DBE_DIAGNOSE.has_obj_privs(user, U.NAME, '"'||V.NAME||'"', 'VIEW'))
/ 
COMMENT ON COLUMN SYS.ALL_TAB_COMMENTS.OWNER IS 'Owner of the object'
/
COMMENT ON COLUMN SYS.ALL_TAB_COMMENTS.TABLE_NAME IS 'Name of the object'
/
COMMENT ON COLUMN SYS.ALL_TAB_COMMENTS.TABLE_TYPE IS 'Type of the object'
/
COMMENT ON COLUMN SYS.ALL_TAB_COMMENTS.COMMENTS IS 'Comment on the object'
/

CREATE OR REPLACE VIEW USER_COL_COMMENTS 
(
  TABLE_NAME,
  COLUMN_NAME,
  COMMENTS
)
AS
  SELECT  T.NAME, C.NAME, CO.TEXT
  FROM  SYS.DV_ME ME, SYS.SYS_TABLES T, SYS.SYS_COLUMNS C, SYS.SYS_COMMENTS CO WHERE  ME.USER_ID = T.USER# AND T.RECYCLED = 0 AND T.USER# = C.USER# AND T.ID = C.TABLE# AND C.USER# = CO.USER# AND C.TABLE# = CO.TABLE# AND C.ID = CO.COLUMN#
  UNION ALL
  SELECT V.NAME, V_C.NAME, CO.TEXT
  FROM SYS.DV_ME ME, SYS.SYS_VIEWS V, SYS.SYS_VIEW_COLS V_C, SYS.SYS_COMMENTS CO WHERE  ME.USER_ID = V.USER# AND V.USER# = V_C.USER# AND V.ID = V_C.VIEW# AND V_C.USER# = CO.USER# AND V_C.VIEW# = CO.TABLE# AND V_C.ID = CO.COLUMN#
/
COMMENT ON COLUMN SYS.USER_COL_COMMENTS.TABLE_NAME IS 'Name of the object'
/
COMMENT ON COLUMN SYS.USER_COL_COMMENTS.COLUMN_NAME IS 'Name of the column'
/
COMMENT ON COLUMN SYS.USER_COL_COMMENTS.COMMENTS IS 'Comment on the object'
/

CREATE OR REPLACE VIEW DBA_COL_COMMENTS 
(
  OWNER,
  TABLE_NAME,
  COLUMN_NAME,
  COMMENTS
)
AS
  SELECT U.NAME, T.NAME, C.NAME, CO.TEXT
  FROM SYS.SYS_USERS U, SYS.SYS_TABLES T, SYS.SYS_COLUMNS C, SYS.SYS_COMMENTS CO WHERE U.ID = T.USER# AND T.RECYCLED = 0 AND T.USER# = C.USER# AND T.ID = C.TABLE# AND C.USER# = CO.USER# AND C.TABLE# = CO.TABLE# AND C.ID = CO.COLUMN# AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
  UNION ALL
  SELECT U.NAME, V.NAME, V_C.NAME, CO.TEXT
  FROM SYS.SYS_USERS U, SYS.SYS_VIEWS V, SYS.SYS_VIEW_COLS V_C, SYS.SYS_COMMENTS CO WHERE U.ID = V.USER# AND V.USER# = V_C.USER# AND V.ID = V_C.VIEW#  AND V_C.USER# = CO.USER# AND V_C.VIEW# = CO.TABLE# AND V_C.ID = CO.COLUMN# AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
/ 

CREATE OR REPLACE VIEW ALL_COL_COMMENTS 
(
  OWNER,
  TABLE_NAME,
  COLUMN_NAME,
  COMMENTS
)
AS
  SELECT U.NAME, T.NAME, C.NAME, CO.TEXT
  FROM SYS.SYS_USERS U, SYS.SYS_TABLES T, SYS.SYS_COLUMNS C, SYS.SYS_COMMENTS CO WHERE U.ID = T.USER# AND T.RECYCLED = 0 AND T.USER# = C.USER# AND T.ID = C.TABLE# AND C.USER# = CO.USER# AND C.TABLE# = CO.TABLE# AND C.ID = CO.COLUMN#
  AND (U.NAME = user or 
       user = 'SYS' or 
       DBE_DIAGNOSE.has_obj_privs(user, U.NAME, '"'||T.NAME||'"', 'TABLE'))
  AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
  UNION ALL
  SELECT U.NAME, V.NAME, V_C.NAME, CO.TEXT
  FROM SYS.SYS_USERS U, SYS.SYS_VIEWS V, SYS.SYS_VIEW_COLS V_C, SYS.SYS_COMMENTS CO WHERE U.ID = V.USER# AND V.USER# = V_C.USER# AND V.ID = V_C.VIEW#  AND V_C.USER# = CO.USER# AND V_C.VIEW# = CO.TABLE# AND V_C.ID = CO.COLUMN#
    AND (U.NAME = user or 
         user = 'SYS' or
         DBE_DIAGNOSE.has_obj_privs(user, U.NAME, '"'||V.NAME||'"', 'VIEW'))
    AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
/

CREATE OR REPLACE VIEW ALL_USERS
(
  USER_ID,
  USERNAME,
  CREATED,
  CRYPTOPERIOD
)
AS
  SELECT U.ID, U.NAME, U.CTIME, decode(U.ASTATUS, 
  1 ,cast(NUMTODSINTERVAL(0, 'DAY') as varchar(64)),
  5 ,cast(NUMTODSINTERVAL(0, 'DAY') as varchar(64)),
  9 ,cast(NUMTODSINTERVAL(0, 'DAY') as varchar(64)),
  17,cast(NUMTODSINTERVAL(0, 'DAY') as varchar(64)),
  21,cast(NUMTODSINTERVAL(0, 'DAY') as varchar(64)),
  25,cast(NUMTODSINTERVAL(0, 'DAY') as varchar(64)),
  cast(DECODE(P.THRESHOLD, 0, 'UNLIMITED', U.PTIME + NUMTODSINTERVAL(P.THRESHOLD / 86400.0, 'DAY') - CURRENT_TIMESTAMP()) as varchar(64)))
  FROM SYS.SYS_USERS U JOIN SYS.SYS_PROFILE P ON U.PROFILE# = P.PROFILE# AND P.RESOURCE# = 1 AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
/

CREATE OR REPLACE VIEW USER_SOURCE 
(NAME, TYPE, LINE, TEXT)
AS
SELECT 
	P.NAME, DECODE(P.TYPE, 'T', 'TRIGGER', 'P', 'PROCEDURE', 'F', 'FUNCTION', 'S', 'PACKAGE SPEC', 'B', 'PACKAGE BODY', 'Y', 'TYPE SPEC', 'O', 'TYPE BODY', 'UNDEFINED'),
	NULL::NUMBER, P.SOURCE
FROM SYS.DV_ME ME, SYS.SYS_PROCS P
WHERE  P.USER# = ME.USER_ID
/

CREATE OR REPLACE VIEW DBA_SOURCE 
(OWNER, NAME, TYPE, LINE, TEXT)
AS
SELECT 
	U.NAME, P.NAME, DECODE(P.TYPE, 'T', 'TRIGGER', 'P', 'PROCEDURE', 'F', 'FUNCTION','S', 'PACKAGE SPEC', 'B', 'PACKAGE BODY', 'Y', 'TYPE SPEC', 'O', 'TYPE BODY', 'UNDEFINED'),
	NULL::NUMBER, P.SOURCE
FROM SYS.SYS_USERS U, SYS.SYS_PROCS P
WHERE  P.USER# = U.ID AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
/

CREATE OR REPLACE VIEW ALL_SOURCE 
(OWNER, NAME, TYPE, LINE, TEXT)
AS
SELECT 
	U.NAME, P.NAME, DECODE(P.TYPE, 'T', 'TRIGGER', 'P', 'PROCEDURE', 'F', 'FUNCTION','S', 'PACKAGE SPEC', 'B', 'PACKAGE BODY', 'Y', 'TYPE SPEC', 'O', 'TYPE BODY', 'UNDEFINED'),
	NULL::NUMBER, P.SOURCE
FROM SYS.SYS_USERS U, SYS.SYS_PROCS P
WHERE  P.USER# = U.ID and   
       (U.NAME = user or 
        user = 'SYS' or
        DBE_DIAGNOSE.has_obj_privs(user, U.NAME, '"'||P.NAME||'"', P.TYPE)) AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
/

CREATE OR REPLACE VIEW DBA_PROFILES
(
  PROFILE,
  RESOURCE_NAME,
  RESOURCE_TYPE,
  THRESHOLD
)
AS
  SELECT P.NAME, M.NAME, DECODE(M.TYPE#, 0, 'KERNEL', 1, 'PASSWORD'), 
  DECODE(P.THRESHOLD, 0, 'UNLIMITED', DECODE(P.RESOURCE#, 1, CAST(P.THRESHOLD/86400 AS  NUMBER(16,6)), 2, CAST(P.THRESHOLD/86400 AS  NUMBER(16,6)), 4, CAST(P.THRESHOLD/86400 AS  NUMBER(16,6)), 5, CAST(P.THRESHOLD/86400 AS  NUMBER(16,6)), P.THRESHOLD))
  FROM SYS.SYS_PROFILE P, SYS.DV_RESOURCE_MAP M WHERE P.RESOURCE# = M.RESOURCE# ORDER BY P.NAME, M.TYPE# 
/

CREATE OR REPLACE VIEW SYS.ALL_USER_SYS_PRIVS
(
  USERNAME,
  PRIVILEGE,
  ADMIN_OPTION
)
AS
  SELECT U.NAME,
  DECODE(P.PRIVILEGE,
  1, 'ALTER ANY INDEX',
  2, 'ALTER ANY MATERIALIZED VIEW',
  3, 'ALTER ANY PROCEDURE',
  4, 'ALTER ANY ROLE',
  5, 'ALTER ANY SEQUENCE',
  6, 'ALTER ANY TABLE',
  7, 'ALTER ANY TRIGGER',
  8, 'ALTER DATABASE',
  9, 'ALTER PROFILE',
  10, 'ALTER SESSION',
  11, 'ALTER SYSTEM',
  12, 'ALTER TABLESPACE',
  13, 'ALTER USER',
  14, 'CREATE ANY INDEX',
  15, 'CREATE ANY MATERIALIZED VIEW',
  16, 'CREATE ANY PROCEDURE',
  17, 'CREATE ANY SEQUENCE',
  18, 'CREATE ANY SYNONYM',
  19, 'CREATE ANY TABLE',
  20, 'CREATE ANY TRIGGER',
  21, 'CREATE ANY VIEW',
  22, 'CREATE DATABASE',
  23, 'CREATE MATERIALIZED VIEW',
  24, 'CREATE NODE',
  25, 'CREATE PROCEDURE',
  26, 'CREATE PROFILE',
  27, 'CREATE PUBLIC SYNONYM',
  28, 'CREATE ROLE',
  29, 'CREATE SEQUENCE',
  30, 'CREATE SESSION',
  31, 'CREATE SYNONYM',
  32, 'CREATE TABLE',
  33, 'CREATE TABLESPACE',
  34, 'CREATE TRIGGER',
  35, 'CREATE USER',
  36, 'CREATE VIEW',
  38, 'DROP ANY INDEX',
  39, 'DROP ANY MATERIALIZED VIEW',
  40, 'DROP ANY PROCEDURE',
  41, 'DROP ANY ROLE',
  42, 'DROP ANY SEQUENCE',
  43, 'DROP ANY SYNONYM',
  44, 'DROP ANY TABLE',
  45, 'DROP ANY TRIGGER',
  46, 'DROP ANY VIEW',
  47, 'DROP PROFILE',
  48, 'DROP PUBLIC SYNONYM',
  49, 'DROP TABLESPACE',
  50, 'DROP USER',
  51, 'FLASHBACK ANY TABLE',
  52, 'FLASHBACK ARCHIVE ADMINISTER',
  53, 'GLOBAL QUERY REWRITE',
  54, 'GRANT ANY OBJECT PRIVILEGE',
  55, 'GRANT ANY PRIVILEGE',
  56, 'GRANT ANY ROLE',
  57, 'LOCK ANY TABLE',
  58, 'MANAGE TABLESPACE',
  59, 'ON COMMIT REFRESH',
  60, 'PURGE DBA_RECYCLEBIN',
  61, 'READ ANY TABLE',
  62, 'SELECT ANY SEQUENCE',
  63, 'SELECT ANY TABLE',
  64, 'UNLIMITED TABLESPACE',
  65, 'UNDER ANY VIEW',
  66, 'COMMENT ANY TABLE',
  67, 'UPDATE ANY TABLE',
  68, 'INSERT ANY TABLE',
  69, 'DELETE ANY TABLE',
  70, 'EXECUTE ANY PROCEDURE',
  71, 'SYSBACKUP',
  72, 'SYSDBA',
  73, 'SYSOPER',
  74, 'ANALYZE ANY',
  75, 'DROP NODE',
  76, 'ALTER NODE',
  78, 'CREATE ANY DIRECTORY',
  79, 'DROP ANY DIRECTORY',
  81, 'CREATE ANY SQL MAP',
  82, 'DROP ANY SQL MAP',
  83, 'CREATE ANY TYPE',
  84, 'CREATE TYPE',
  85, 'DROP ANY TYPE',
  86, 'EXECUTE ANY TYPE',
  87, 'CREATE CTRLFILE',
  88, 'CREATE LIBRARY',
  89, 'EXEMPT REDACTION POLICY',
  90, 'CREATE ANY LIBRARY',
  91, 'DROP ANY LIBRARY',
  92, 'EXECUTE ANY LIBRARY', 
  93, 'EXEMPT ACCESS POLICY',
  94, 'INHERIT ANY PRIVILEGES',
  95, 'CREATE TENANT',
  96, 'ALTER TENANT',
  97, 'DROP TENANT',
  98, 'SELECT ANY DICTIONARY',
  99, 'FORCE ANY TRANSACTION',
  100, 'CREATE DATABASE LINK',
  101, 'ALTER DATABASE LINK',
  102, 'DROP DATABASE LINK',
  103, 'USE ANY TABLESPACE',
  'UNKNOWN'),
  DECODE(P.ADMIN_OPTION, 0, 'NO', 'YES')
  FROM SYS.SYS_USERS U INNER JOIN SYS.SYS_PRIVS P ON U.ID = P.GRANTEE_ID AND P.GRANTEE_TYPE = 0 AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
/


CREATE OR REPLACE VIEW SYS.DBA_SYS_PRIVS
(
  GRANTEE,
  PRIVILEGE,
  ADMIN_OPTION
)
AS
  SELECT * FROM SYS.ALL_USER_SYS_PRIVS
  UNION ALL
  SELECT R.NAME,
  DECODE(P.PRIVILEGE,
  1, 'ALTER ANY INDEX',
  2, 'ALTER ANY MATERIALIZED VIEW',
  3, 'ALTER ANY PROCEDURE',
  4, 'ALTER ANY ROLE',
  5, 'ALTER ANY SEQUENCE',
  6, 'ALTER ANY TABLE',
  7, 'ALTER ANY TRIGGER',
  8, 'ALTER DATABASE',
  9, 'ALTER PROFILE',
  10, 'ALTER SESSION',
  11, 'ALTER SYSTEM',
  12, 'ALTER TABLESPACE',
  13, 'ALTER USER',
  14, 'CREATE ANY INDEX',
  15, 'CREATE ANY MATERIALIZED VIEW',
  16, 'CREATE ANY PROCEDURE',
  17, 'CREATE ANY SEQUENCE',
  18, 'CREATE ANY SYNONYM',
  19, 'CREATE ANY TABLE',
  20, 'CREATE ANY TRIGGER',
  21, 'CREATE ANY VIEW',
  22, 'CREATE DATABASE',
  23, 'CREATE MATERIALIZED VIEW',
  24, 'CREATE NODE',
  25, 'CREATE PROCEDURE',
  26, 'CREATE PROFILE',
  27, 'CREATE PUBLIC SYNONYM',
  28, 'CREATE ROLE',
  29, 'CREATE SEQUENCE',
  30, 'CREATE SESSION',
  31, 'CREATE SYNONYM',
  32, 'CREATE TABLE',
  33, 'CREATE TABLESPACE',
  34, 'CREATE TRIGGER',
  35, 'CREATE USER',
  36, 'CREATE VIEW',
  38, 'DROP ANY INDEX',
  39, 'DROP ANY MATERIALIZED VIEW',
  40, 'DROP ANY PROCEDURE',
  41, 'DROP ANY ROLE',
  42, 'DROP ANY SEQUENCE',
  43, 'DROP ANY SYNONYM',
  44, 'DROP ANY TABLE',
  45, 'DROP ANY TRIGGER',
  46, 'DROP ANY VIEW',
  47, 'DROP PROFILE',
  48, 'DROP PUBLIC SYNONYM',
  49, 'DROP TABLESPACE',
  50, 'DROP USER',
  51, 'FLASHBACK ANY TABLE',
  52, 'FLASHBACK ARCHIVE ADMINISTER',
  53, 'GLOBAL QUERY REWRITE',
  54, 'GRANT ANY OBJECT PRIVILEGE',
  55, 'GRANT ANY PRIVILEGE',
  56, 'GRANT ANY ROLE',
  57, 'LOCK ANY TABLE',
  58, 'MANAGE TABLESPACE',
  59, 'ON COMMIT REFRESH',
  60, 'PURGE DBA_RECYCLEBIN',
  61, 'READ ANY TABLE',
  62, 'SELECT ANY SEQUENCE',
  63, 'SELECT ANY TABLE',
  64, 'UNLIMITED TABLESPACE',
  65, 'UNDER ANY VIEW',
  66, 'COMMENT ANY TABLE',
  67, 'UPDATE ANY TABLE',
  68, 'INSERT ANY TABLE',
  69, 'DELETE ANY TABLE',
  70, 'EXECUTE ANY PROCEDURE',
  71, 'SYSBACKUP',
  72, 'SYSDBA',
  73, 'SYSOPER',
  74, 'ANALYZE ANY',
  75, 'DROP NODE',
  76, 'ALTER NODE',
  78, 'CREATE ANY DIRECTORY',
  79, 'DROP ANY DIRECTORY',
  81, 'CREATE ANY SQL MAP',
  82, 'DROP ANY SQL MAP',
  83, 'CREATE ANY TYPE',
  84, 'CREATE TYPE',
  85, 'DROP ANY TYPE',
  86, 'EXECUTE ANY TYPE',
  87, 'CREATE CTRLFILE',
  88, 'CREATE LIBRARY',
  89, 'EXEMPT REDACTION POLICY',
  90, 'CREATE ANY LIBRARY',
  91, 'DROP ANY LIBRARY',
  92, 'EXECUTE ANY LIBRARY', 
  93, 'EXEMPT ACCESS POLICY',
  94, 'INHERIT ANY PRIVILEGES',
  95, 'CREATE TENANT',
  96, 'ALTER TENANT',
  97, 'DROP TENANT',
  98, 'SELECT ANY DICTIONARY',
  99, 'FORCE ANY TRANSACTION',
  100, 'CREATE DATABASE LINK',
  101, 'ALTER DATABASE LINK',
  102, 'DROP DATABASE LINK',
  103, 'USE ANY TABLESPACE',
  'UNKNOWN'),
  DECODE(P.ADMIN_OPTION, 0, 'NO', 'YES')
  FROM SYS.SYS_ROLES R INNER JOIN SYS.SYS_PRIVS P ON R.ID = P.GRANTEE_ID AND P.GRANTEE_TYPE = 1 
/

CREATE OR REPLACE VIEW SYS.USER_SYS_PRIVS
(
  USERNAME,
  PRIVILEGE,
  ADMIN_OPTION
)
AS
  SELECT M.USER_NAME,
  DECODE(P.PRIVILEGE,
  1, 'ALTER ANY INDEX',
  2, 'ALTER ANY MATERIALIZED VIEW',
  3, 'ALTER ANY PROCEDURE',
  4, 'ALTER ANY ROLE',
  5, 'ALTER ANY SEQUENCE',
  6, 'ALTER ANY TABLE',
  7, 'ALTER ANY TRIGGER',
  8, 'ALTER DATABASE',
  9, 'ALTER PROFILE',
  10, 'ALTER SESSION',
  11, 'ALTER SYSTEM',
  12, 'ALTER TABLESPACE',
  13, 'ALTER USER',
  14, 'CREATE ANY INDEX',
  15, 'CREATE ANY MATERIALIZED VIEW',
  16, 'CREATE ANY PROCEDURE',
  17, 'CREATE ANY SEQUENCE',
  18, 'CREATE ANY SYNONYM',
  19, 'CREATE ANY TABLE',
  20, 'CREATE ANY TRIGGER',
  21, 'CREATE ANY VIEW',
  22, 'CREATE DATABASE',
  23, 'CREATE MATERIALIZED VIEW',
  24, 'CREATE NODE',
  25, 'CREATE PROCEDURE',
  26, 'CREATE PROFILE',
  27, 'CREATE PUBLIC SYNONYM',
  28, 'CREATE ROLE',
  29, 'CREATE SEQUENCE',
  30, 'CREATE SESSION',
  31, 'CREATE SYNONYM',
  32, 'CREATE TABLE',
  33, 'CREATE TABLESPACE',
  34, 'CREATE TRIGGER',
  35, 'CREATE USER',
  36, 'CREATE VIEW',
  38, 'DROP ANY INDEX',
  39, 'DROP ANY MATERIALIZED VIEW',
  40, 'DROP ANY PROCEDURE',
  41, 'DROP ANY ROLE',
  42, 'DROP ANY SEQUENCE',
  43, 'DROP ANY SYNONYM',
  44, 'DROP ANY TABLE',
  45, 'DROP ANY TRIGGER',
  46, 'DROP ANY VIEW',
  47, 'DROP PROFILE',
  48, 'DROP PUBLIC SYNONYM',
  49, 'DROP TABLESPACE',
  50, 'DROP USER',
  51, 'FLASHBACK ANY TABLE',
  52, 'FLASHBACK ARCHIVE ADMINISTER',
  53, 'GLOBAL QUERY REWRITE',
  54, 'GRANT ANY OBJECT PRIVILEGE',
  55, 'GRANT ANY PRIVILEGE',
  56, 'GRANT ANY ROLE',
  57, 'LOCK ANY TABLE',
  58, 'MANAGE TABLESPACE',
  59, 'ON COMMIT REFRESH',
  60, 'PURGE DBA_RECYCLEBIN',
  61, 'READ ANY TABLE',
  62, 'SELECT ANY SEQUENCE',
  63, 'SELECT ANY TABLE',
  64, 'UNLIMITED TABLESPACE',
  65, 'UNDER ANY VIEW',
  66, 'COMMENT ANY TABLE',
  67, 'UPDATE ANY TABLE',
  68, 'INSERT ANY TABLE',
  69, 'DELETE ANY TABLE',
  70, 'EXECUTE ANY PROCEDURE',
  71, 'SYSBACKUP',
  72, 'SYSDBA',
  73, 'SYSOPER',
  74, 'ANALYZE ANY',
  75, 'DROP NODE',
  76, 'ALTER NODE',
  78, 'CREATE ANY DIRECTORY',
  79, 'DROP ANY DIRECTORY',
  81, 'CREATE ANY SQL MAP',
  82, 'DROP ANY SQL MAP',
  83, 'CREATE ANY TYPE',
  84, 'CREATE TYPE',
  85, 'DROP ANY TYPE',
  86, 'EXECUTE ANY TYPE',
  87, 'CREATE CTRLFILE',
  88, 'CREATE LIBRARY',
  89, 'EXEMPT REDACTION POLICY',
  90, 'CREATE ANY LIBRARY',
  91, 'DROP ANY LIBRARY',
  92, 'EXECUTE ANY LIBRARY', 
  93, 'EXEMPT ACCESS POLICY',
  94, 'INHERIT ANY PRIVILEGES',
  95, 'CREATE TENANT',
  96, 'ALTER TENANT',
  97, 'DROP TENANT',
  98, 'SELECT ANY DICTIONARY',
  99, 'FORCE ANY TRANSACTION',
  100, 'CREATE DATABASE LINK',
  101, 'ALTER DATABASE LINK',
  102, 'DROP DATABASE LINK',
  103, 'USE ANY TABLESPACE',
  'UNKNOWN'),
  DECODE(P.ADMIN_OPTION, 0, 'NO', 'YES')
  FROM SYS.DV_ME M INNER JOIN SYS.SYS_PRIVS P ON M.USER_ID = P.GRANTEE_ID AND P.GRANTEE_TYPE = 0
/

CREATE OR REPLACE VIEW SYS.DBA_ROLE_PRIVS
(
  GRANTEE,
  GRANTED_ROLE,
  ADMIN_OPTION
)
AS
  SELECT U.NAME, R.NAME, DECODE(P.ADMIN_OPTION, 0, 'NO', 'YES')
  FROM SYS.SYS_USERS U, SYS.SYS_ROLES R, SYS.SYS_USER_ROLES P
  WHERE P.GRANTEE_TYPE = 0 AND U.ID = P.GRANTEE_ID AND R.ID = P.GRANTED_ROLE_ID AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
  UNION ALL
  SELECT R1.NAME, R2.NAME, DECODE(P.ADMIN_OPTION, 0, 'NO', 'YES')
  FROM SYS.SYS_ROLES R1, SYS.SYS_ROLES R2, SYS.SYS_USER_ROLES P
  WHERE P.GRANTEE_TYPE = 1 AND R1.ID = P.GRANTEE_ID AND R2.ID = P.GRANTED_ROLE_ID
/

CREATE OR REPLACE VIEW SYS.USER_ROLE_PRIVS
(
  USERNAME,
  GRANTED_ROLE,
  ADMIN_OPTION
)
AS
  SELECT M.USER_NAME, R.NAME, DECODE(P.ADMIN_OPTION, 0, 'NO', 'YES')
  FROM SYS.DV_ME M, SYS.SYS_ROLES R, SYS.SYS_USER_ROLES P
  WHERE P.GRANTEE_TYPE = 0 AND M.USER_ID = P.GRANTEE_ID AND R.ID = P.GRANTED_ROLE_ID
/

CREATE OR REPLACE VIEW SYS.DBA_TAB_PRIVS
(
  GRANTEE,
  OWNER,
  OBJECT_NAME,
  OBJECT_TYPE,
  PRIVILEGE,
  GRANTABLE
)
AS
  SELECT U1.NAME, U2.NAME, P.OBJECT_NAME,
  DECODE(P.OBJECT_TYPE, 0, 'TABLE', 1, 'VIEW', 2, 'SEQUENCE', 3, 'PROCEDURE', 18, 'DIRECTORY', 21, 'LIBRARY', 25, 'USER', 'UNKNOWN'),
  DECODE(P.PRIVILEGE, 0, 'ALTER', 1, 'DELETE', 2, 'EXECUTE', 3, 'INDEX', 4, 'INSERT', 5, 'READ', 6, 'REFERENCES', 7, 'SELECT', 8, 'UPDATE', 9, 'READ ON DIRECTORY', 10, 'WRITE ON DIRECTORY', 11, 'EXECUTE ON DIRECTORY', 12, 'INHERIT PRIVILEGES', 'UNKNOWN'),
  DECODE(P.GRANTABLE, 0, 'NO', 1, 'YES', '-')
  FROM SYS.SYS_USERS U1, SYS.SYS_USERS U2, SYS.SYS_OBJECT_PRIVS P
  WHERE P.GRANTEE_TYPE = 0 AND U1.ID = P.GRANTEE AND P.OBJECT_OWNER = U2.ID AND DBE_DIAGNOSE.TENANT_CHECK(0, U1.TENANT_ID)
  UNION ALL
  SELECT R.NAME, U.NAME, P.OBJECT_NAME,
  DECODE(P.OBJECT_TYPE, 0, 'TABLE', 1, 'VIEW', 2, 'SEQUENCE', 3, 'PROCEDURE', 18, 'DIRECTORY', 21, 'LIBRARY', 25, 'USER', 'UNKNOWN'),
  DECODE(P.PRIVILEGE, 0, 'ALTER', 1, 'DELETE', 2, 'EXECUTE', 3, 'INDEX', 4, 'INSERT', 5, 'READ', 6, 'REFERENCES', 7, 'SELECT', 8, 'UPDATE', 9, 'READ ON DIRECTORY', 10, 'WRITE ON DIRECTORY', 11, 'EXECUTE ON DIRECTORY', 12, 'INHERIT PRIVILEGES', 'UNKNOWN'),
  DECODE(P.GRANTABLE, 0, 'NO', 1, 'YES', '-')
  FROM SYS.SYS_ROLES R, SYS.SYS_USERS U, SYS.SYS_OBJECT_PRIVS P
  WHERE P.GRANTEE_TYPE = 1 AND R.ID = P.GRANTEE AND P.OBJECT_OWNER = U.ID AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
  UNION ALL
  SELECT U1.NAME, 'SYS', U2.NAME, 'USER', 
  DECODE(P.PRIVILEGE, 0, 'INHERIT PRIVILEGES', 'UNKNOWN'),
  DECODE(P.OPTION, 0, 'NO', 1, 'YES', '-')
  FROM SYS.SYS_USERS U1, SYS.SYS_USERS U2, SYS.SYS_USER_PRIVS P
  WHERE U1.ID = P.GRANTEE AND U2.ID = P.UID
/

CREATE OR REPLACE VIEW SYS.USER_TAB_PRIVS
(
  GRANTEE,
  OWNER,
  OBJECT_NAME,
  OBJECT_TYPE,
  PRIVILEGE,
  GRANTABLE
)
AS
  SELECT M.USER_NAME, U.NAME, P.OBJECT_NAME,
  DECODE(P.OBJECT_TYPE, 0, 'TABLE', 1, 'VIEW', 2, 'SEQUENCE', 3, 'PROCEDURE', 18, 'DIRECTORY', 21, 'LIBRARY', 25, 'USER', 'UNKNOWN'),
  DECODE(P.PRIVILEGE, 0, 'ALTER', 1, 'DELETE', 2, 'EXECUTE', 3, 'INDEX', 4, 'INSERT', 5, 'READ', 6, 'REFERENCES', 7, 'SELECT', 8, 'UPDATE', 9, 'READ ON DIRECTORY', 10, 'WRITE ON DIRECTORY', 11, 'EXECUTE ON DIRECTORY', 12, 'INHERIT PRIVILEGES', 'UNKNOWN'),
  DECODE(P.GRANTABLE, 0, 'NO', 1, 'YES', '-')
  FROM SYS.DV_ME M, SYS.SYS_USERS U, SYS.SYS_OBJECT_PRIVS P
  WHERE P.GRANTEE_TYPE = 0 AND M.USER_ID = P.GRANTEE AND P.OBJECT_OWNER = U.ID AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
  UNION ALL
  SELECT M.USER_NAME, 'SYS', U2.NAME, 'USER', 
  DECODE(P.PRIVILEGE, 0, 'INHERIT PRIVILEGES', 'UNKNOWN'),
  DECODE(P.OPTION, 0, 'NO', 1, 'YES', '-')
  FROM SYS.DV_ME M, SYS.SYS_USERS U2, SYS.SYS_USER_PRIVS P
  WHERE M.USER_ID = P.GRANTEE AND U2.ID = P.UID
/

CREATE OR REPLACE VIEW DBA_SEQUENCES
(
  SEQUENCE_OWNER,
  SEQUENCE_NAME,
  MIN_VALUE,
  MAX_VALUE,
  INCREMENT_BY,
  CYCLE_FLAG,
  ORDER_FLAG,
  CACHE_SIZE,
  LAST_NUMBER
)
AS
  SELECT U.NAME, SEQ.NAME, SEQ.MINVAL, SEQ.MAXVAL, SEQ.STEP, SEQ.CYCLE_FLAG, SEQ.ORDER_FLAG, SEQ.CACHESIZE, SEQ.LAST_NUMBER
  FROM SYS.SYS_USERS U, SYS.SYS_SEQUENCES SEQ
  WHERE SEQ.UID = U.ID AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
/

CREATE OR REPLACE VIEW ALL_SEQUENCES
(
  SEQUENCE_OWNER,
  SEQUENCE_NAME,
  MIN_VALUE,
  MAX_VALUE,
  INCREMENT_BY,
  CYCLE_FLAG,
  ORDER_FLAG,
  CACHE_SIZE,
  LAST_NUMBER
)
AS
  SELECT U.NAME, SEQ.NAME, SEQ.MINVAL, SEQ.MAXVAL, SEQ.STEP, SEQ.CYCLE_FLAG, SEQ.ORDER_FLAG, SEQ.CACHESIZE, SEQ.LAST_NUMBER
  FROM SYS.SYS_USERS U, SYS.SYS_SEQUENCES SEQ
  WHERE SEQ.UID = U.ID and
        (U.NAME = user or  
         user = 'SYS' or
         DBE_DIAGNOSE.has_obj_privs(user, U.NAME, '"'||SEQ.NAME||'"', 'SEQUENCE')) AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
/

CREATE OR REPLACE VIEW USER_SEQUENCES
(
  SEQUENCE_NAME,
  MIN_VALUE,
  MAX_VALUE,
  INCREMENT_BY,
  CYCLE_FLAG,
  ORDER_FLAG,
  CACHE_SIZE,
  LAST_NUMBER
)
AS
  SELECT SEQ.NAME, SEQ.MINVAL, SEQ.MAXVAL, SEQ.STEP, SEQ.CYCLE_FLAG, SEQ.ORDER_FLAG, SEQ.CACHESIZE, SEQ.LAST_NUMBER
  FROM SYS.DV_ME M, SYS.SYS_SEQUENCES SEQ
  WHERE SEQ.UID = M.USER_ID
/

CREATE OR REPLACE VIEW SYS.ALL_IND_COLUMNS
(
INDEX_OWNER,
INDEX_NAME,
TABLE_OWNER,
TABLE_NAME,
COLUMN_NAME,
COLUMN_POSITION,
COLUMN_LENGTH,
ID,
DEFAULT_TEXT
)
AS
 SELECT
    U.NAME,
    I.NAME,
    U.NAME,
    T.NAME,
    C.NAME,
    DBE_DIAGNOSE.DBA_IND_POS(I.COL_LIST::VARCHAR(128), C.ID::VARCHAR(128))::INTEGER,
    C.BYTES,
    C.ID,
    C.DEFAULT_TEXT
 FROM SYS.SYS_USERS U, SYS.SYS_INDEXES I, SYS.SYS_COLUMNS C, SYS.SYS_TABLES T
 WHERE
        I.USER# = U.ID
    AND T.USER# = U.ID
    AND C.USER# = U.ID
    AND C.TABLE# = I.TABLE#
    AND T.ID = I.TABLE#
    AND DBE_DIAGNOSE.DBA_IND_POS(I.COL_LIST::VARCHAR(128), C.ID::VARCHAR(128))::INTEGER > 0
    AND T.RECYCLED = 0
    AND (U.NAME = user or 
         user = 'SYS' or
         DBE_DIAGNOSE.has_obj_privs(user, U.NAME, '"'||T.NAME||'"', 'TABLE'))
    AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
/

CREATE OR REPLACE VIEW SYS.DBA_IND_COLUMNS
(
INDEX_OWNER,
INDEX_NAME,
TABLE_OWNER,
TABLE_NAME,
COLUMN_NAME,
COLUMN_POSITION,
COLUMN_LENGTH
)
AS
 SELECT
    U.NAME,
    I.NAME,
    U.NAME,
    T.NAME,
    C.NAME,
    DBE_DIAGNOSE.DBA_IND_POS(I.COL_LIST::VARCHAR(128), C.ID::VARCHAR(128))::INTEGER,
    C.BYTES
 FROM SYS.SYS_USERS U, SYS.SYS_INDEXES I, SYS.SYS_COLUMNS C, SYS.SYS_TABLES T
 WHERE
        I.USER# = U.ID
    AND T.USER# = U.ID
    AND C.USER# = U.ID
    AND C.TABLE# = I.TABLE#
    AND T.ID = I.TABLE#
    AND DBE_DIAGNOSE.DBA_IND_POS(I.COL_LIST::VARCHAR(128), C.ID::VARCHAR(128))::INTEGER > 0
    AND T.RECYCLED = 0
    AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
/

CREATE OR REPLACE VIEW SYS.USER_IND_COLUMNS
(
INDEX_NAME,
TABLE_NAME,
COLUMN_NAME,
COLUMN_POSITION,
COLUMN_LENGTH
)
AS
SELECT I.NAME,
       T.NAME,
       C.NAME,
       DBE_DIAGNOSE.DBA_IND_POS(I.COL_LIST::VARCHAR(128), C.ID::VARCHAR(128))::INTEGER,
       C.BYTES
  FROM SYS.DV_ME ME, SYS.SYS_INDEXES I, SYS.SYS_COLUMNS C, SYS.SYS_TABLES T
  WHERE
        I.USER# = ME.USER_ID
    AND T.USER# = ME.USER_ID
    AND C.USER# = ME.USER_ID
    AND I.TABLE# = T.ID
    AND C.TABLE# = T.ID
    AND DBE_DIAGNOSE.DBA_IND_POS(I.COL_LIST::VARCHAR(128), C.ID::VARCHAR(128))::INTEGER > 0
    AND T.RECYCLED = 0
/

CREATE OR REPLACE VIEW SYS.DBA_DATA_FILES
(
  FILE_NAME,
  FILE_ID,
  TABLESPACE_NAME,
  BYTES,
  BLOCKS,
  STATUS,
  RELATIVE_FNO,
  AUTOEXTENSIBLE,
  MAXBYTES,
  MAXBLOCKS,
  INCREMENT_BY,
  USER_BYTES,
  USER_BLOCKS,
  ONLINE_STATUS
)
AS
  SELECT D.FILE_NAME, D.ID, T.NAME, D.BYTES, (D.BYTES / (RTRIM(P.VALUE, 'Kk')::BINARY_INTEGER * 1024))::BINARY_BIGINT, 'VALID', D.ID, DECODE(D.AUTO_EXTEND, 'TRUE', 'YES', 'NO'),
  D.MAX_SIZE::BINARY_BIGINT,
  (D.MAX_SIZE / (RTRIM(P.VALUE, 'Kk')::BINARY_INTEGER * 1024))::BINARY_BIGINT,
  D.AUTO_EXTEND_SIZE,
  (D.BYTES - 20 * (D.BYTES / (RTRIM(P.VALUE, 'Kk')::BINARY_INTEGER * 1024)))::BINARY_BIGINT,
  ((D.BYTES - 20 * (D.BYTES / (RTRIM(P.VALUE, 'Kk')::BINARY_INTEGER * 1024))) / (RTRIM(P.VALUE, 'Kk')::BINARY_INTEGER * 1024))::BINARY_BIGINT,
  D.STATUS
  FROM SYS.DV_DATA_FILES D, SYS.DV_TABLESPACES T, SYS.DV_PARAMETERS P
  WHERE D.TABLESPACE_ID = T.ID AND P.NAME = 'PAGE_SIZE'
/

CREATE OR REPLACE VIEW SYS.DBA_TAB_MODIFICATIONS 
(
  TABLE_OWNER,
  TABLE_NAME,
  PARTITION_NAME,
  SUBPARTITION_NAME,
  INSERTS,
  UPDATES,
  DELETES,
  TIMESTAMP,   
  DROP_SEGMENTS
) AS	
   SELECT U.NAME, T.NAME, null::VARCHAR(64), null::VARCHAR(64), MO.INSERTS, MO.UPDATES, MO.DELETES, MO.MODIFY_TIME, MO.DROP_SEGMENTS 
   FROM SYS.SYS_USERS U JOIN SYS.SYS_TABLES T ON U.ID = T.USER# AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
   JOIN SYS.SYS_DML_STATS MO ON T.USER# = MO.USER# AND T.ID = MO.TABLE# WHERE MO.PARTED = 0 OR (MO.PARTED = 1 AND MO.PART#=-1)
UNION ALL
   SELECT U.NAME, T.NAME, TP.NAME, null::VARCHAR(64), MO.INSERTS, MO.UPDATES, MO.DELETES, MO.MODIFY_TIME, MO.DROP_SEGMENTS 
   FROM SYS.SYS_USERS U JOIN SYS.SYS_TABLES T ON U.ID = T.USER# AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
   JOIN SYS.SYS_TABLE_PARTS TP ON T.USER# = TP.USER# AND T.ID = TP.TABLE#
   JOIN SYS.SYS_DML_STATS MO ON T.USER# = MO.USER# AND T.ID = MO.TABLE# AND MO.PART# = TP.PART# 
   WHERE MO.PARTED = 1 AND MO.PART# <> -1
/

CREATE OR REPLACE VIEW SYS.ALL_TAB_MODIFICATIONS
(
  TABLE_OWNER,
  TABLE_NAME,
  PARTITION_NAME,
  SUBPARTITION_NAME,
  INSERTS,
  UPDATES,
  DELETES,
  TIMESTAMP,   
  DROP_SEGMENTS
) AS	
   SELECT U.NAME, T.NAME, null::VARCHAR(64), null::VARCHAR(64), MO.INSERTS, MO.UPDATES, MO.DELETES, MO.MODIFY_TIME, MO.DROP_SEGMENTS 
   FROM SYS.SYS_USERS U JOIN SYS.SYS_TABLES T ON U.ID = T.USER# AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
   JOIN SYS.SYS_DML_STATS MO ON T.USER# = MO.USER# AND T.ID = MO.TABLE# WHERE T.RECYCLED = 0 AND (MO.PARTED = 0 OR (MO.PARTED = 1 AND MO.PART#=-1)) AND 
       (U.NAME = user or 
       user = 'SYS' or
       DBE_DIAGNOSE.has_obj_privs(user, U.NAME, '"'||T.NAME||'"', 'TABLE'))
UNION ALL
   SELECT U.NAME, T.NAME, TP.NAME, null::VARCHAR(64), MO.INSERTS, MO.UPDATES, MO.DELETES, MO.MODIFY_TIME, MO.DROP_SEGMENTS 
   FROM SYS.SYS_USERS U JOIN SYS.SYS_TABLES T ON U.ID = T.USER# AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
   JOIN SYS.SYS_TABLE_PARTS TP ON T.USER# = TP.USER# AND T.ID = TP.TABLE#
   JOIN SYS.SYS_DML_STATS MO ON T.USER# = MO.USER# AND T.ID = MO.TABLE# AND MO.PART# = TP.PART# 
   WHERE T.RECYCLED = 0 AND MO.PARTED = 1 AND MO.PART# <> -1 AND 
       (U.NAME = user or 
       user = 'SYS' or
       DBE_DIAGNOSE.has_obj_privs(user, U.NAME, '"'||T.NAME||'"', 'TABLE')) 
/

CREATE OR REPLACE VIEW SYS.USER_TAB_MODIFICATIONS
(
   TABLE_NAME,
   PARTITION_NAME,
   SUBPARTITION_NAME,
   INSERTS,
   UPDATES,
   DELETES,
   TIMESTAMP,    
   DROP_SEGMENTS
) AS
   SELECT T.NAME, null::VARCHAR(64), null::VARCHAR(64), MO.INSERTS, MO.UPDATES, MO.DELETES, MO.MODIFY_TIME, MO.DROP_SEGMENTS 
   FROM SYS.DV_ME M JOIN SYS.SYS_TABLES T ON M.USER_ID = T.USER# 
   JOIN SYS.SYS_DML_STATS MO ON T.USER# = MO.USER# AND T.ID = MO.TABLE# WHERE MO.PARTED = 0 OR (MO.PARTED = 1 AND MO.PART#=-1)
UNION ALL
   SELECT T.NAME, TP.NAME, null::VARCHAR(64), MO.INSERTS, MO.UPDATES, MO.DELETES, MO.MODIFY_TIME, MO.DROP_SEGMENTS 
   FROM SYS.DV_ME M JOIN SYS.SYS_TABLES T ON M.USER_ID = T.USER# 
   JOIN SYS.SYS_TABLE_PARTS TP ON T.USER# = TP.USER# AND T.ID = TP.TABLE#
   JOIN SYS.SYS_DML_STATS MO ON T.USER# = MO.USER# AND T.ID = MO.TABLE#  AND MO.PART# = TP.PART#
   WHERE MO.PARTED = 1 AND MO.PART# <> -1
/

CREATE OR REPLACE PUBLIC SYNONYM  ALL_TAB_MODIFICATIONS      FOR SYS.ALL_TAB_MODIFICATIONS
/
CREATE OR REPLACE PUBLIC SYNONYM  USER_TAB_MODIFICATIONS      FOR SYS.USER_TAB_MODIFICATIONS
/
GRANT SELECT ON USER_TAB_MODIFICATIONS TO PUBLIC
/
CREATE OR REPLACE PUBLIC SYNONYM  DBA_TAB_MODIFICATIONS      FOR SYS.DBA_TAB_MODIFICATIONS
/


CREATE OR REPLACE VIEW USER_TAB_PARTITIONS AS
SELECT 
T.NAME AS TABLE_NAME,
DECODE(TP.FLAGS & 0x4, 0, 'NO', 'YES')::VARCHAR2(3) AS COMPOSITE,
TP.NAME AS PARTITION_NAME,
DECODE(TP.FLAGS & 0x4, 0, 0, TP.SUBPARTCNT)::NUMBER AS SUBPARTITION_COUNT,
TP.HIBOUNDVAL AS HIGH_VALUE,
HIBOUNDLEN::NUMBER AS HIGH_VALUE_LENGTH,
ROW_NUMBER() OVER (PARTITION BY T.NAME ORDER BY TP.PART#) AS PARTITION_POSITION,
TS.NAME AS TABLESPACE_NAME,
(CASE WHEN TP.PART# < 1073741824 THEN 'N' ELSE 'Y' END) AS INTERVAL,
TP.PCTFREE AS PCT_FREE,
NULL::NUMBER AS PCT_USED,
TP.INITRANS AS INI_TRANS,
NULL::NUMBER AS MAX_TRANS,
NULL::NUMBER AS INITIAL_EXTENT, 
NULL::NUMBER AS NEXT_EXTENT,    
NULL::NUMBER AS MIN_EXTENT,     
NULL::NUMBER AS MAX_EXTENT,     
NULL::NUMBER AS MAX_SIZE,       
NULL::NUMBER AS PCT_INCREASE,   
NULL::NUMBER AS FREELISTS,      
NULL::NUMBER AS FREELIST_GROUPS,
NULL::VARCHAR2(7) AS LOGGING,        
NULL::VARCHAR2(8) AS COMPRESSION,    
NULL::VARCHAR2(18) AS COMPRESS_FOR,
TP.ROWCNT AS NUM_ROWS,
TP.BLKCNT AS BLOCKS,
TP.EMPCNT AS EMPTY_BLOCKS, 
NULL::NUMBER AS   AVG_SPACE,
NULL::NUMBER AS   CHAIN_CNT,
TP.AVGRLN AS AVG_ROW_LEN,
TP.SAMPLESIZE AS SAMPLE_SIZE,
TP.ANALYZETIME AS LAST_ANALYZED,
NULL::VARCHAR2(7) AS BUFFER_POOL,
NULL::VARCHAR2(3) AS GLOBAL_STATS,
NULL::VARCHAR2(3)  AS USER_STATS,
DECODE(TP.FLAGS & 8, 8, 'CSF', 'ASF') AS ROW_FORMAT,
DECODE(TP.FLAGS & 16, 16, 'YES', 'NO') AS NOLOGGING_INSERT
FROM SYS.DV_ME M, SYS.SYS_TABLE_PARTS TP, SYS.SYS_TABLES T, SYS.DV_TABLESPACES TS
WHERE TP.TABLE#=T.ID AND TP.USER# = T.USER# AND TP.SPACE#=TS.ID AND TP.USER# = M.USER_ID
/

CREATE OR REPLACE VIEW DBA_TAB_PARTITIONS AS
SELECT 
U.NAME AS TABLE_OWNER,
T.NAME AS TABLE_NAME,
DECODE(TP.FLAGS & 0x4, 0, 'NO', 'YES')::VARCHAR2(3) AS COMPOSITE,
TP.NAME AS PARTITION_NAME,
DECODE(TP.FLAGS & 0x4, 0, 0, TP.SUBPARTCNT)::NUMBER AS SUBPARTITION_COUNT,
TP.HIBOUNDVAL AS HIGH_VALUE,
NULL::NUMBER AS HIGH_VALUE_LENGTH,
ROW_NUMBER() OVER (PARTITION BY U.NAME, T.NAME ORDER BY TP.PART#) AS PARTITION_POSITION,
TS.NAME AS TABLESPACE_NAME,
(CASE WHEN TP.PART# < 1073741824 THEN 'N' ELSE 'Y' END) AS INTERVAL,
TP.PCTFREE AS PCT_FREE,
NULL::NUMBER AS PCT_USED,
TP.INITRANS AS INI_TRANS,
NULL::NUMBER AS MAX_TRANS,
NULL::NUMBER AS INITIAL_EXTENT, 
NULL::NUMBER AS NEXT_EXTENT,    
NULL::NUMBER AS MIN_EXTENT,     
NULL::NUMBER AS MAX_EXTENT,     
NULL::NUMBER AS MAX_SIZE,       
NULL::NUMBER AS PCT_INCREASE,   
NULL::NUMBER AS FREELISTS,      
NULL::NUMBER AS FREELIST_GROUPS,
NULL::VARCHAR2(7) AS LOGGING,        
NULL::VARCHAR2(8) AS COMPRESSION,    
NULL::VARCHAR2(18) AS COMPRESS_FOR,
TP.ROWCNT AS NUM_ROWS,
TP.BLKCNT AS BLOCKS,
TP.EMPCNT AS EMPTY_BLOCKS, 
NULL::NUMBER AS   AVG_SPACE,
NULL::NUMBER AS   CHAIN_CNT,
TP.AVGRLN AS AVG_ROW_LEN,
TP.SAMPLESIZE AS SAMPLE_SIZE,
TP.ANALYZETIME AS LAST_ANALYZED,
NULL::VARCHAR2(7) AS BUFFER_POOL,
NULL::VARCHAR2(3) AS GLOBAL_STATS,
NULL::VARCHAR2(3)  AS USER_STATS,
DECODE(TP.FLAGS & 8, 8, 'CSF', 'ASF') AS ROW_FORMAT,
DECODE(TP.FLAGS & 16, 16, 'YES', 'NO') AS NOLOGGING_INSERT
FROM SYS.SYS_USERS U, SYS.SYS_TABLE_PARTS TP, SYS.SYS_TABLES T, SYS.DV_TABLESPACES TS
WHERE TP.USER# = U.ID AND TP.USER# = T.USER# AND TP.TABLE#=T.ID AND TP.SPACE#=TS.ID AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
/

CREATE OR REPLACE VIEW ALL_TAB_PARTITIONS AS
SELECT 
U.NAME AS TABLE_OWNER,
T.NAME AS TABLE_NAME,
DECODE(TP.FLAGS & 0x4, 0, 'NO', 'YES')::VARCHAR2(3) AS COMPOSITE,
TP.NAME AS PARTITION_NAME,
DECODE(TP.FLAGS & 0x4, 0, 0, TP.SUBPARTCNT)::NUMBER AS SUBPARTITION_COUNT,
TP.HIBOUNDVAL AS HIGH_VALUE,
NULL::NUMBER AS HIGH_VALUE_LENGTH,
ROW_NUMBER() OVER (PARTITION BY U.NAME, T.NAME ORDER BY TP.PART#) AS PARTITION_POSITION,
TS.NAME AS TABLESPACE_NAME,
(CASE WHEN TP.PART# < 1073741824 THEN 'N' ELSE 'Y' END) AS INTERVAL,
TP.PCTFREE AS PCT_FREE,
NULL::NUMBER AS PCT_USED,
TP.INITRANS AS INI_TRANS,
NULL::NUMBER AS MAX_TRANS,
NULL::NUMBER AS INITIAL_EXTENT, 
NULL::NUMBER AS NEXT_EXTENT,    
NULL::NUMBER AS MIN_EXTENT,     
NULL::NUMBER AS MAX_EXTENT,     
NULL::NUMBER AS MAX_SIZE,       
NULL::NUMBER AS PCT_INCREASE,   
NULL::NUMBER AS FREELISTS,      
NULL::NUMBER AS FREELIST_GROUPS,
NULL::VARCHAR2(7) AS LOGGING,        
NULL::VARCHAR2(8) AS COMPRESSION,    
NULL::VARCHAR2(18) AS COMPRESS_FOR,
TP.ROWCNT AS NUM_ROWS,
TP.BLKCNT AS BLOCKS,
TP.EMPCNT AS EMPTY_BLOCKS, 
NULL::NUMBER AS   AVG_SPACE,
NULL::NUMBER AS   CHAIN_CNT,
TP.AVGRLN AS AVG_ROW_LEN,
TP.SAMPLESIZE AS SAMPLE_SIZE,
TP.ANALYZETIME AS LAST_ANALYZED,
NULL::VARCHAR2(7) AS BUFFER_POOL,
NULL::VARCHAR2(3) AS GLOBAL_STATS,
NULL::VARCHAR2(3)  AS USER_STATS,
DECODE(TP.FLAGS & 8, 8, 'CSF', 'ASF') AS ROW_FORMAT,
DECODE(TP.FLAGS & 16, 16, 'YES', 'NO') AS NOLOGGING_INSERT
FROM SYS.SYS_USERS U, SYS.SYS_TABLE_PARTS TP, SYS.SYS_TABLES T, SYS.DV_TABLESPACES TS
WHERE TP.USER# = U.ID AND TP.USER# = T.USER# AND TP.TABLE#=T.ID AND TP.SPACE#=TS.ID
AND (U.NAME = user or 
     user = 'SYS' or 
     DBE_DIAGNOSE.has_obj_privs(user, U.NAME, '"'||T.NAME||'"', 'TABLE'))
/
 

CREATE OR REPLACE VIEW USER_PROCEDURES
(
  OBJECT_NAME,
  PROCEDURE_NAME,
  OBJECT_ID,
  SUBPROGRAM_ID,
  OVERLOAD,
  OBJECT_TYPE,
  AGGREGATE,
  PIPELINED,
  SOURCE,
  STATUS
)
AS
  SELECT P.NAME, NULL::VARCHAR(128), P.OBJ#, 1, NULL::VARCHAR2(40), DECODE(P.TYPE, 'T', 'TRIGGER', 'F', 'FUNCTION', 'P', 'PROCEDURE', 'S', 'PACKAGE SPEC', 'B', 'PACKAGE BODY', 'Y', 'TYPE SPEC', 'O', 'TYPE BODY', 'UNKNOWN'), 
  DECODE(P.AGGREGATE, 0, 'NO', 'YES')::VARCHAR2(3), DECODE(P.PIPELINED, 0, 'NO', 'YES')::VARCHAR2(3), P.SOURCE, DECODE(P.STATUS, 0, 'INVALID', 1, 'VALID', 'UNKNOWN')::VARCHAR2(7)
  FROM SYS.DV_ME ME, SYS.SYS_PROCS P WHERE P.USER# = ME.USER_ID
/

CREATE OR REPLACE VIEW DBA_PROCEDURES
(
  OWNER,
  OBJECT_NAME,
  PROCEDURE_NAME,
  OBJECT_ID,
  SUBPROGRAM_ID,
  OVERLOAD,
  OBJECT_TYPE,
  AGGREGATE,
  PIPELINED,
  SOURCE,
  STATUS
)
AS
  SELECT U.NAME, P.NAME, NULL::VARCHAR(128), P.OBJ#, 1, NULL::VARCHAR2(40), DECODE(P.TYPE, 'T', 'TRIGGER', 'F', 'FUNCTION', 'P', 'PROCEDURE', 'S', 'PACKAGE SPEC', 'B', 'PACKAGE BODY', 'Y', 'TYPE SPEC', 'O', 'TYPE BODY', 'UNKNOWN'), 
  DECODE(P.AGGREGATE, 0, 'NO', 'YES')::VARCHAR2(3), DECODE(P.PIPELINED, 0, 'NO', 'YES')::VARCHAR2(3), P.SOURCE, DECODE(P.STATUS, 0, 'INVALID', 1, 'VALID', 'UNKNOWN')::VARCHAR2(7)
  FROM SYS.SYS_USERS U, SYS.SYS_PROCS P WHERE P.USER# = U.ID AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
/ 

CREATE OR REPLACE VIEW ALL_PROCEDURES
(
  OWNER,
  OBJECT_NAME,
  PROCEDURE_NAME,
  OBJECT_ID,
  SUBPROGRAM_ID,
  OVERLOAD,
  OBJECT_TYPE,
  AGGREGATE,
  PIPELINED,
  SOURCE,
  STATUS
)
AS
  SELECT U.NAME, P.NAME, NULL::VARCHAR(128), P.OBJ#, 1, NULL::VARCHAR2(40), DECODE(P.TYPE, 'T', 'TRIGGER', 'F', 'FUNCTION', 'P', 'PROCEDURE', 'S', 'PACKAGE SPEC', 'B', 'PACKAGE BODY', 'Y', 'TYPE SPEC', 'O', 'TYPE BODY', 'UNKNOWN'), 
  DECODE(P.AGGREGATE, 0, 'NO', 'YES')::VARCHAR2(3), DECODE(P.PIPELINED, 0, 'NO', 'YES')::VARCHAR2(3), P.SOURCE, DECODE(P.STATUS, 0, 'INVALID', 1, 'VALID', 'UNKNOWN')::VARCHAR2(7)
  FROM SYS.SYS_USERS U, SYS.SYS_PROCS P 
  WHERE P.USER# = U.ID and    
        (U.NAME = user or 
         user = 'SYS' or
         DBE_DIAGNOSE.has_obj_privs(user, U.NAME, '"'||P.NAME||'"', P.TYPE)) AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
/

CREATE OR REPLACE VIEW SYS.DBA_USERS
(
  USERNAME,
  USER_ID,
  ACCOUNT_STATUS,
  LOCK_DATE,
  EXPIRY_DATE,
  DEFAULT_TABLESPACE,
  TEMPORARY_TABLESPACE,
  CREATED,
  PROFILE,
  INITIAL_RSRC_CONSUMER_GROUP,
  AUTHENTICATION_TYPE
)
AS
  SELECT DISTINCT U.NAME, U.ID,
  DECODE(U.ASTATUS,
  0, 'OPEN',
  1, 'EXPIRED',
  2, 'EXPIRED(GRACE)',
  4, 'LOCKED(TIMED)',
  5, 'EXPIRED & LOCKED(TIMED)',
  6, 'EXPIRED(GRACE) & LOCKED(TIMED)',
  8, 'LOCKED',
  9, 'EXPIRED & LOCKED',
  10, 'EXPIRED(GRACE) & LOCKED',
  16, 'PERMANENT',
  17, 'PERMANENT & EXPIRED',
  18, 'PERMANENT & EXPIRED(GRACE)',
  20, 'PERMANENT & LOCKED(TIMED)',
  21, 'PERMANENT & EXPIRED & LOCKED(TIMED)',
  22, 'PERMANENT & EXPIRED(GRACE) & LOCKED(TIMED)',
  24, 'PERMANENT & LOCKED',
  25, 'PERMANENT & EXPIRED & LOCKED',
  26, 'PERMANENT & EXPIRED(GRACE) & LOCKED', 'UNKNOWN'),
  U.LTIME, U.EXPTIME, S1.NAME, S2.NAME, U.CTIME, P.NAME, DECODE(U.ID, 0, 'SYS_GROUP', 'DEFAULT_CONSUMER_GROUP'), 'PASSWORD'
  FROM SYS.SYS_USERS U, SYS.SYS_PROFILE P, SYS.DV_TABLESPACES S1, SYS.DV_TABLESPACES S2
  WHERE U.DATA_SPACE# = S1.ID AND U.TEMP_SPACE# = S2.ID AND U.PROFILE# = P.PROFILE# AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
/

CREATE OR REPLACE VIEW SYS.USER_USERS
(
  USERNAME,
  USER_ID,
  ACCOUNT_STATUS,
  LOCK_DATE,
  EXPIRY_DATE,
  DEFAULT_TABLESPACE,
  TEMPORARY_TABLESPACE,
  CREATED,
  INITIAL_RSRC_CONSUMER_GROUP
)
AS
  SELECT U.NAME, U.ID,
  DECODE(U.ASTATUS,
  0, 'OPEN',
  1, 'EXPIRED',
  2, 'EXPIRED(GRACE)',
  4, 'LOCKED(TIMED)',
  5, 'EXPIRED & LOCKED(TIMED)',
  6, 'EXPIRED(GRACE) & LOCKED(TIMED)',
  8, 'LOCKED',
  9, 'EXPIRED & LOCKED',
  10, 'EXPIRED(GRACE) & LOCKED',
  16, 'PERMANENT',
  17, 'PERMANENT & EXPIRED',
  18, 'PERMANENT & EXPIRED(GRACE)',
  20, 'PERMANENT & LOCKED(TIMED)',
  21, 'PERMANENT & EXPIRED & LOCKED(TIMED)',
  22, 'PERMANENT & EXPIRED(GRACE) & LOCKED(TIMED)',
  24, 'PERMANENT & LOCKED',
  25, 'PERMANENT & EXPIRED & LOCKED',
  26, 'PERMANENT & EXPIRED(GRACE) & LOCKED', 'UNKNOWN'),
  U.LTIME, U.EXPTIME, S1.NAME, S2.NAME, U.CTIME, DECODE(U.ID, 0, 'SYS_GROUP', 'DEFAULT_CONSUMER_GROUP')
  FROM SYS.DV_ME M, SYS.SYS_USERS U, SYS.DV_TABLESPACES S1, SYS.DV_TABLESPACES S2
  WHERE U.DATA_SPACE# = S1.ID AND U.TEMP_SPACE# = S2.ID AND U.ID = M.USER_ID
/

CREATE OR REPLACE VIEW DBA_CONSTRAINTS
(
  OWNER,
  CONSTRAINT_NAME,
  CONSTRAINT_TYPE,
  TABLE_NAME,
  SEARCH_CONDITION,
  R_OWNER,
  R_TABLE_NAME,
  R_CONSTRAINT_NAME,
  DELETE_RULE,
  STATUS,
  DEFERRABLE,
  DEFERRED,
  VALIDATED,
  BAD,
  RELY,
  INDEX_OWNER,
  INDEX_NAME,
  INVALID,
  VIEW_RELATED,
  CONS_COLS,
  REF_COLS,
  SYS_GENERATE,
  IS_DUPLICATE
)
AS
  SELECT U1.NAME, C.CONS_NAME, 'R', T.NAME, C.COND_TEXT, U2.NAME, T3.NAME, I.NAME,
    DECODE(C.REFACT, 1, 'DELETE CASCADE', 2, 'SET NULL', 'NOT ALLOWED') DELETE_RULE, DECODE(C.FLAGS & 2, 2, 'ENABLED', 'DISABLED'), 'NOT DEFERRABLE', 'IMMEDIATE', DECODE(C.FLAGS & 4, 4, 'VALIDATED', 'NOT VALIDATED'), '', '', '', '', 'FALSE', '', 
    DBE_DIAGNOSE.DBA_LISTCOLS(U1.NAME, '"'||T.NAME||'"', C.COL_LIST) CONS_COLS, DBE_DIAGNOSE.DBA_LISTCOLS(U3.NAME, '"'||T3.NAME||'"', I.COL_LIST) REF_COLS, DECODE(C.FLAGS & 8, 8, 'Y', 'N') SYS_GENERATE, DECODE(C.FLAGS & 1024, 0, 'N', 'Y') IS_DUPLICATE
  FROM SYS.SYS_USERS U1, SYS.SYS_USERS U2, SYS.SYS_USERS U3, SYS.SYS_CONSTRAINT_DEFS C, SYS.SYS_TABLES T, SYS.SYS_INDEXES I, SYS.SYS_TABLES T3
  WHERE C.CONS_TYPE = 2 AND U1.ID = C.USER# AND (C.USER# = T.USER# AND T.ID = C.TABLE#) AND C.REF_USER# = I.USER# AND C.REF_TABLE# = I.TABLE# AND C.REF_CONS = I.ID AND C.REF_USER# = U2.ID AND T.RECYCLED = 0
    AND I.USER# = U3.ID AND I.TABLE# = T3.ID AND I.USER# = T3.USER# AND DBE_DIAGNOSE.TENANT_CHECK(0, U1.TENANT_ID)
  UNION ALL
  SELECT U1.NAME, C.CONS_NAME, DECODE(C.CONS_TYPE, 0, 'P', 1, 'U', ''), T.NAME, C.COND_TEXT, '', '', '',
    '', DECODE(C.FLAGS & 2, 2, 'ENABLED', 'DISABLED'), 'NOT DEFERRABLE', 'IMMEDIATE', DECODE(C.FLAGS & 4, 4, 'VALIDATED', 'NOT VALIDATED'), '', '', U1.NAME, I.NAME, 'FALSE', '', 
    DBE_DIAGNOSE.DBA_LISTCOLS(U1.NAME, '"'||T.NAME||'"', C.COL_LIST) CONS_COLS, '' REF_COLS, DECODE(C.FLAGS & 8, 8, 'Y', 'N') SYS_GENERATE, DECODE(C.FLAGS & 1024, 0, 'N', 'Y') IS_DUPLICATE 
  FROM SYS.SYS_USERS U1, SYS.SYS_CONSTRAINT_DEFS C, SYS.SYS_TABLES T, SYS.SYS_INDEXES I
  WHERE (C.CONS_TYPE = 0 OR C.CONS_TYPE = 1) AND U1.ID = C.USER# AND (C.USER# = T.USER# AND T.ID = C.TABLE#) 
    AND C.COL_LIST = I.COL_LIST AND C.USER# = I.USER# AND C.TABLE# = I.TABLE# AND T.RECYCLED = 0 AND DBE_DIAGNOSE.TENANT_CHECK(0, U1.TENANT_ID)
  UNION ALL
  SELECT U.NAME, C.CONS_NAME, 'C',  T.NAME, C.COND_TEXT, '', '', '',
    '', DECODE(C.FLAGS & 2, 2, 'ENABLED', 'DISABLED'), 'NOT DEFERRABLE', 'IMMEDIATE', DECODE(C.FLAGS & 4, 4, 'VALIDATED', 'NOT VALIDATED'), '', '', '', '', 'FALSE', '', DBE_DIAGNOSE.DBA_LISTCOLS(U.NAME, '"'||T.NAME||'"', C.COL_LIST) CONS_COLS, '' REF_COLS, DECODE(C.FLAGS & 8, 8, 'Y', 'N') SYS_GENERATE, DECODE(C.FLAGS & 1024, 0, 'N', 'Y') IS_DUPLICATE
  FROM SYS.SYS_USERS U, SYS.SYS_CONSTRAINT_DEFS C, SYS.SYS_TABLES T
  WHERE C.CONS_TYPE = 3 AND U.ID = C.USER# AND (C.USER# = T.USER# AND T.ID = C.TABLE# AND T.RECYCLED = 0) AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
/

CREATE OR REPLACE VIEW ALL_CONSTRAINTS
(
  OWNER,
  CONSTRAINT_NAME,
  CONSTRAINT_TYPE,
  TABLE_NAME,
  SEARCH_CONDITION,
  R_OWNER,
  R_TABLE_NAME,
  R_CONSTRAINT_NAME,
  DELETE_RULE,
  STATUS,
  DEFERRABLE,
  DEFERRED,
  VALIDATED,
  BAD,
  RELY,
  INDEX_OWNER,
  INDEX_NAME,
  INVALID,
  VIEW_RELATED,
  CONS_COLS,
  REF_COLS,
  SYS_GENERATE,
  IS_DUPLICATE
)
AS
  SELECT U1.NAME, C.CONS_NAME, 'R', T.NAME, C.COND_TEXT, U2.NAME, T3.NAME, I.NAME,
    DECODE(C.REFACT, 1, 'DELETE CASCADE', 2, 'SET NULL', 'NOT ALLOWED') DELETE_RULE, DECODE(C.FLAGS & 2, 2, 'ENABLED', 'DISABLED'), 'NOT DEFERRABLE', 'IMMEDIATE', DECODE(C.FLAGS & 4, 4, 'VALIDATED', 'NOT VALIDATED'), '', '', '', '', 'FALSE', '', 
    DBE_DIAGNOSE.DBA_LISTCOLS(U1.NAME, '"'||T.NAME||'"', C.COL_LIST) CONS_COLS, DBE_DIAGNOSE.DBA_LISTCOLS(U3.NAME, '"'||T3.NAME||'"', I.COL_LIST) REF_COLS, DECODE(C.FLAGS & 8, 8, 'Y', 'N') SYS_GENERATE, DECODE(C.FLAGS & 1024, 0, 'N', 'Y') IS_DUPLICATE 
  FROM SYS.SYS_USERS U1, SYS.SYS_USERS U2, SYS.SYS_CONSTRAINT_DEFS C, SYS.SYS_TABLES T, SYS.SYS_INDEXES I, SYS.SYS_USERS U3, SYS.SYS_TABLES T3
  WHERE C.USER# = U1.ID AND T.USER# = U1.ID AND T.ID = C.TABLE# AND C.REF_USER# = I.USER# AND C.REF_USER# = U2.ID AND C.REF_TABLE# = I.TABLE# AND C.REF_CONS = I.ID AND T.RECYCLED = 0
    AND I.USER# = U3.ID AND T3.USER# = U3.ID AND I.TABLE# = T3.ID AND C.CONS_TYPE = 2
    AND (U1.NAME = user or 
         user = 'SYS' or
         DBE_DIAGNOSE.has_obj_privs(user, U1.NAME, '"'||T.NAME||'"', 'TABLE')) AND DBE_DIAGNOSE.TENANT_CHECK(0, U1.TENANT_ID)
  UNION ALL
  SELECT U1.NAME, C.CONS_NAME, DECODE(C.CONS_TYPE, 0, 'P', 1, 'U', ''), T.NAME, C.COND_TEXT, '', '', '',
    '', DECODE(C.FLAGS & 2, 2, 'ENABLED', 'DISABLED'), 'NOT DEFERRABLE', 'IMMEDIATE', DECODE(C.FLAGS & 4, 4, 'VALIDATED', 'NOT VALIDATED'), '', '', U1.NAME, I.NAME, 'FALSE', '', 
    DBE_DIAGNOSE.DBA_LISTCOLS(U1.NAME, '"'||T.NAME||'"', C.COL_LIST) CONS_COLS, '' REF_COLS, DECODE(C.FLAGS & 8, 8, 'Y', 'N') SYS_GENERATE, DECODE(C.FLAGS & 1024, 0, 'N', 'Y') IS_DUPLICATE 
  FROM SYS.SYS_USERS U1, SYS.SYS_CONSTRAINT_DEFS C, SYS.SYS_TABLES T, SYS.SYS_INDEXES I
  WHERE C.USER# = U1.ID AND T.USER# = U1.ID AND T.ID = C.TABLE#
    AND C.COL_LIST = I.COL_LIST AND C.USER# = I.USER# AND C.TABLE# = I.TABLE# AND T.RECYCLED = 0 AND (C.CONS_TYPE = 0 OR C.CONS_TYPE = 1)
    AND (U1.NAME = user or 
         user = 'SYS' or
         DBE_DIAGNOSE.has_obj_privs(user, U1.NAME, '"'||T.NAME||'"', 'TABLE')) AND DBE_DIAGNOSE.TENANT_CHECK(0, U1.TENANT_ID)
  UNION ALL
  SELECT U.NAME, C.CONS_NAME, 'C',  T.NAME, C.COND_TEXT, '', '', '',
    '', DECODE(C.FLAGS & 2, 2, 'ENABLED', 'DISABLED'), 'NOT DEFERRABLE', 'IMMEDIATE', DECODE(C.FLAGS & 4, 4, 'VALIDATED', 'NOT VALIDATED'), '', '', '', '', 'FALSE', '', DBE_DIAGNOSE.DBA_LISTCOLS(U.NAME, '"'||T.NAME||'"', C.COL_LIST) CONS_COLS, '' REF_COLS, DECODE(C.FLAGS & 8, 8, 'Y', 'N') SYS_GENERATE, DECODE(C.FLAGS & 1024, 0, 'N', 'Y') IS_DUPLICATE 
  FROM SYS.SYS_USERS U, SYS.SYS_CONSTRAINT_DEFS C, SYS.SYS_TABLES T
  WHERE C.USER# = U.ID AND T.USER# = U.ID AND T.ID = C.TABLE# AND T.RECYCLED = 0 AND C.CONS_TYPE = 3
    AND (U.NAME = user or 
         user = 'SYS' or
         DBE_DIAGNOSE.has_obj_privs(user, U.NAME, '"'||T.NAME||'"', 'TABLE')) AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
/

CREATE OR REPLACE VIEW USER_CONSTRAINTS
(
  OWNER,
  CONSTRAINT_NAME,
  CONSTRAINT_TYPE,
  TABLE_NAME,
  SEARCH_CONDITION,
  R_OWNER,
  R_TABLE_NAME,
  R_CONSTRAINT_NAME,
  DELETE_RULE,
  STATUS,
  DEFERRABLE,
  DEFERRED,
  VALIDATED,
  BAD,
  RELY,
  INDEX_OWNER,
  INDEX_NAME,
  INVALID,
  VIEW_RELATED,
  CONS_COLS,
  REF_COLS,
  SYS_GENERATE,
  IS_DUPLICATE
)
AS
  SELECT M.USER_NAME, C.CONS_NAME, 'R', T.NAME, C.COND_TEXT, U.NAME, T2.NAME, I.NAME,
    DECODE(C.REFACT, 1, 'DELETE CASCADE', 2, 'SET NULL', 'NOT ALLOWED') DELETE_RULE, DECODE(C.FLAGS & 2, 2, 'ENABLED', 'DISABLED'), 'NOT DEFERRABLE', 'IMMEDIATE', DECODE(C.FLAGS & 4, 4, 'VALIDATED', 'NOT VALIDATED'), '', '', '', '', 'FALSE', '',
    DBE_DIAGNOSE.DBA_LISTCOLS(M.USER_NAME, '"'||T.NAME||'"', C.COL_LIST) CONS_COLS, DBE_DIAGNOSE.DBA_LISTCOLS(U2.NAME, '"'||T2.NAME||'"', I.COL_LIST) REF_COLS, DECODE(C.FLAGS & 8, 8, 'Y', 'N') SYS_GENERATE, DECODE(C.FLAGS & 1024, 0, 'N', 'Y') IS_DUPLICATE 
  FROM SYS.DV_ME M, SYS.SYS_USERS U, SYS.SYS_CONSTRAINT_DEFS C, SYS.SYS_TABLES T, SYS.SYS_INDEXES I, SYS.SYS_USERS U2, SYS.SYS_TABLES T2
  WHERE C.USER# = M.USER_ID AND T.USER# = M.USER_ID AND T.ID = C.TABLE# AND T.RECYCLED = 0 AND C.REF_USER# = I.USER# AND C.REF_TABLE# = I.TABLE# AND C.REF_CONS = I.ID AND C.REF_USER# = U.ID
    AND I.USER# = U2.ID AND I.TABLE# = T2.ID AND I.USER# = T2.USER# AND C.CONS_TYPE = 2
    AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
  UNION ALL
  SELECT M.USER_NAME, C.CONS_NAME, DECODE(C.CONS_TYPE, 0, 'P', 1, 'U', ''), T.NAME, C.COND_TEXT, '', '', '',
    '', DECODE(C.FLAGS & 2, 2, 'ENABLED', 'DISABLED'), 'NOT DEFERRABLE', 'IMMEDIATE', DECODE(C.FLAGS & 4, 4, 'VALIDATED', 'NOT VALIDATED'), '', '', M.USER_NAME, I.NAME, 'FALSE', '',
    DBE_DIAGNOSE.DBA_LISTCOLS(M.USER_NAME, '"'||T.NAME||'"', C.COL_LIST) CONS_COLS, '' REF_COLS, DECODE(C.FLAGS & 8, 8, 'Y', 'N') SYS_GENERATE, DECODE(C.FLAGS & 1024, 0, 'N', 'Y') IS_DUPLICATE 
  FROM SYS.DV_ME M, SYS.SYS_CONSTRAINT_DEFS C, SYS.SYS_TABLES T, SYS.SYS_INDEXES I
  WHERE C.USER# = M.USER_ID AND T.USER# = M.USER_ID AND T.ID = C.TABLE#
    AND C.COL_LIST = I.COL_LIST AND C.USER# = I.USER# AND C.TABLE# = I.TABLE# AND T.RECYCLED = 0 AND (C.CONS_TYPE = 0 OR C.CONS_TYPE = 1)
  UNION ALL
  SELECT M.USER_NAME, C.CONS_NAME, 'C',  T.NAME, C.COND_TEXT, '', '', '',
    '', DECODE(C.FLAGS & 2, 2, 'ENABLED', 'DISABLED'), 'NOT DEFERRABLE', 'IMMEDIATE', DECODE(C.FLAGS & 4, 4, 'VALIDATED', 'NOT VALIDATED'), '', '', '', '', 'FALSE', '', DBE_DIAGNOSE.DBA_LISTCOLS(M.USER_NAME, '"'||T.NAME||'"', C.COL_LIST) CONS_COLS,'' REF_COLS, DECODE(C.FLAGS & 8, 8, 'Y', 'N') SYS_GENERATE, DECODE(C.FLAGS & 1024, 0, 'N', 'Y') IS_DUPLICATE
  FROM SYS.DV_ME M, SYS.SYS_CONSTRAINT_DEFS C, SYS.SYS_TABLES T
  WHERE C.USER# = M.USER_ID AND T.USER# = M.USER_ID AND T.ID = C.TABLE# AND T.RECYCLED = 0 AND C.CONS_TYPE = 3
/

CREATE OR REPLACE VIEW USER_CONS_COLUMNS
(
  OWNER,
  CONSTRAINT_NAME,
  TABLE_NAME,
  COLUMN_NAME,
  POSITION
) 
AS 
  SELECT M.USER_NAME, CON.CONS_NAME, T.NAME, C.NAME, CEIL(LOCATE(C.ID, ','||CON.COL_LIST)/2) 
  FROM SYS.DV_ME M, SYS.SYS_TABLES T, SYS.SYS_COLUMNS C, SYS.SYS_CONSTRAINT_DEFS CON
  WHERE CON.USER# = M.USER_ID AND CON.USER# = C.USER# AND CON.USER# = T.USER# AND CON.TABLE# = C.TABLE#  AND CON.TABLE# = T.ID AND CON.TABLE# = C.TABLE# AND T.RECYCLED = 0 AND LOCATE(CONCAT(',',C.ID,','), CONCAT(',',CON.COL_LIST,',')) > 0
/

CREATE OR REPLACE VIEW ALL_CONS_COLUMNS
(
  OWNER,
  CONSTRAINT_NAME,
  TABLE_NAME,
  COLUMN_NAME,
  POSITION
) 
AS 
  SELECT U.NAME, CON.CONS_NAME, T.NAME, C.NAME, CEIL(LOCATE(C.ID, ','||CON.COL_LIST)/2) 
  FROM SYS.SYS_USERS U, SYS.SYS_TABLES T, SYS.SYS_COLUMNS C, SYS.SYS_CONSTRAINT_DEFS CON
  WHERE CON.USER# = U.ID AND CON.USER# = C.USER# AND CON.USER# = T.USER# AND CON.TABLE# = C.TABLE#  AND CON.TABLE# = T.ID AND CON.TABLE# = C.TABLE# AND T.RECYCLED = 0 AND LOCATE(CONCAT(',',C.ID,','), CONCAT(',',CON.COL_LIST,',')) > 0 and         
        (U.NAME = user or 
         user = 'SYS' or
         DBE_DIAGNOSE.has_obj_privs(user, U.NAME, '"'||T.NAME||'"', 'TABLE')) AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
/

CREATE OR REPLACE VIEW ALL_TRIGGERS
(
  OWNER,
  TRIGGER_NAME,
  TABLE_OWNER,
  TABLE_NAME,
  SOURCE,
  STATUS
)
AS
	SELECT U.NAME, P.NAME, P.TRIG_TABLE_USER, P.TRIG_TABLE, P.SOURCE, P.TRIG_STATUS FROM SYS.SYS_USERS U, SYS.SYS_PROCS P 
    WHERE P.TYPE = 'T' AND P.USER# = U.ID
        and (U.NAME = user or 
             user = 'SYS' or 
             DBE_DIAGNOSE.has_obj_privs(user, U.NAME, '"'||P.NAME||'"', P.TYPE))
        AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
/

CREATE OR REPLACE VIEW DBA_TRIGGERS
(
  OWNER,
  TRIGGER_NAME,
  TABLE_OWNER,
  TABLE_NAME,
  SOURCE,
  STATUS
)
AS
	SELECT U.NAME, P.NAME, P.TRIG_TABLE_USER, P.TRIG_TABLE, P.SOURCE, P.TRIG_STATUS FROM SYS.SYS_USERS U, SYS.SYS_PROCS P WHERE P.TYPE = 'T' AND P.USER# = U.ID AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
/

CREATE OR REPLACE VIEW USER_TRIGGERS
(
  TRIGGER_NAME,
  TABLE_OWNER,
  TABLE_NAME,
  SOURCE,
  STATUS
)
AS
	SELECT P.NAME, P.TRIG_TABLE_USER, P.TRIG_TABLE, P.SOURCE, P.TRIG_STATUS FROM SYS.DV_ME M, SYS.SYS_PROCS P WHERE P.TYPE = 'T' AND P.USER# = M.USER_ID
/

CREATE OR REPLACE VIEW DBA_ROLES
(
  ROLE,
  PASSWORD_REQUIRED,
  AUTHENTICATION_TYPE
)
AS
  SELECT R.NAME, 'NO', 'PASSWORD' FROM SYS.SYS_ROLES R
/

CREATE OR REPLACE VIEW DBA_ARGUMENTS
(
  OWNER,
  OBJECT_NAME,
  PACKAGE_NAME,
  OVERLOAD,
  SUBPROGRAM_ID,
  ARGUMENT_NAME,
  POSITION,
  SEQUENCE,
  DATA_LEVEL,
  DATA_TYPE,
  DEFAULTED,
  DEFAULT_VALUE,
  IN_OUT,
  DATA_LENGTH,
  DATA_PRECISION,
  DATA_SCALE
)
AS
  SELECT U.NAME, A.OBJECT_NAME, A.PACKAGE, DECODE(A.OVERLOAD, 0, NULL, TO_CHAR(A.OVERLOAD)),PROC_SEQ, 
         A.ARGUMENT_NAME, A.POSITION,A.SEQUENCE,A.DATA_LEVEL, 
         TYPE_ID2NAME(A.DATA_TYPE),
         DECODE(A.DEFAULTED, 0,'N', 1,'Y'),
         A.DEFAULT_VALUE,
         DECODE(A.IN_OUT, 2,'OUT',3,'IN OUT','IN'),
         A.DATA_LENGTH,
         A.DATA_PRECISION,
         A.DATA_SCALE FROM SYS.SYS_USERS U, SYS.SYS_PROC_ARGS A WHERE U.ID = A.USER# AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
/

CREATE OR REPLACE VIEW ALL_ARGUMENTS
(
  OWNER,
  OBJECT_NAME,
  PACKAGE_NAME,
  OVERLOAD,
  SUBPROGRAM_ID,
  ARGUMENT_NAME,
  POSITION,
  SEQUENCE,
  DATA_LEVEL,
  DATA_TYPE,
  DEFAULTED,
  DEFAULT_VALUE,
  IN_OUT,
  DATA_LENGTH,
  DATA_PRECISION,
  DATA_SCALE
)
AS
  SELECT U.NAME, A.OBJECT_NAME, A.PACKAGE, DECODE(A.OVERLOAD, 0, NULL, TO_CHAR(A.OVERLOAD)),PROC_SEQ, 
         A.ARGUMENT_NAME, A.POSITION,A.SEQUENCE,A.DATA_LEVEL, 
         TYPE_ID2NAME(A.DATA_TYPE),
         DECODE(A.DEFAULTED, 0,'N', 1,'Y'),
         A.DEFAULT_VALUE,
         DECODE(A.IN_OUT, 2,'OUT',3,'IN OUT','IN'),
         A.DATA_LENGTH,
         A.DATA_PRECISION,
         A.DATA_SCALE FROM SYS.SYS_USERS U, SYS.SYS_PROC_ARGS A, SYS.SYS_PROCS P 
  WHERE U.ID = A.USER# and 
        P.NAME = A.OBJECT_NAME and  
        (P.TYPE <> 'S' and P.TYPE <> 'B') and
        (U.NAME = user or 
         user = 'SYS' or
         DBE_DIAGNOSE.has_obj_privs(user, U.NAME, '"'||P.NAME||'"', P.TYPE)) AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
  UNION ALL  
  SELECT U.NAME, A.OBJECT_NAME, A.PACKAGE, DECODE(A.OVERLOAD, 0, NULL, TO_CHAR(A.OVERLOAD)),PROC_SEQ, 
         A.ARGUMENT_NAME, A.POSITION,A.SEQUENCE,A.DATA_LEVEL, 
         TYPE_ID2NAME(A.DATA_TYPE),
         DECODE(A.DEFAULTED, 0,'N', 1,'Y'),
         A.DEFAULT_VALUE,
         DECODE(A.IN_OUT, 2,'OUT',3,'IN OUT','IN'),
         A.DATA_LENGTH,
         A.DATA_PRECISION,
         A.DATA_SCALE FROM SYS.SYS_USERS U, SYS.SYS_PROC_ARGS A, SYS.SYS_PROCS P 
  WHERE U.ID = A.USER# and 
        P.NAME = A.PACKAGE and 
        P.USER# = A.USER# and        
        P.TYPE = 'S' and
        (U.NAME = user or 
         user = 'SYS' or
         DBE_DIAGNOSE.has_obj_privs(user, U.NAME, '"'||P.NAME||'"', 'PACKAGE')) AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
/

CREATE OR REPLACE VIEW USER_ARGUMENTS
(
  OBJECT_NAME,
  PACKAGE_NAME,
  OVERLOAD,
  SUBPROGRAM_ID,
  ARGUMENT_NAME,
  POSITION,
  SEQUENCE,
  DATA_LEVEL,
  DATA_TYPE,
  DEFAULTED,
  DEFAULT_VALUE,
  IN_OUT,
  DATA_LENGTH,
  DATA_PRECISION,
  DATA_SCALE
)
AS
  SELECT A.OBJECT_NAME, A.PACKAGE, DECODE(A.OVERLOAD, 0, NULL, TO_CHAR(A.OVERLOAD)),PROC_SEQ, 
         A.ARGUMENT_NAME, A.POSITION,A.SEQUENCE,A.DATA_LEVEL, 
         TYPE_ID2NAME(A.DATA_TYPE),
         DECODE(A.DEFAULTED, 0,'N', 1,'Y'),
         A.DEFAULT_VALUE,
         DECODE(A.IN_OUT, 2,'OUT',3,'IN OUT','IN'),
         A.DATA_LENGTH,
         A.DATA_PRECISION,
         A.DATA_SCALE FROM SYS.DV_ME M, SYS.SYS_PROC_ARGS A WHERE M.USER_ID = A.USER#
/

CREATE OR REPLACE VIEW ALL_TAB_STATISTICS
(
  OWNER,
  TABLE_NAME,
  PARTITION_NAME,
  PARTITION_POSITION,
  OBJECT_TYPE,
  NUM_ROWS,
  BLOCKS,
  EMPTY_BLOCKS,
  AVG_SPACE,
  CHAIN_CNT,
  AVG_ROW_LEN,
  AVG_SPACE_FREELIST_BLOCKS,
  NUM_FREELIST_BLOCKS,
  AVG_CACHED_BLOCKS,
  AVG_CACHE_HIT_RATIO,
  SAMPLE_SIZE,
  LAST_ANALYZED
)
AS
  SELECT U.NAME, T.NAME, NULL::VARCHAR(64), NULL::NUMBER, 
  'TABLE', T.NUM_ROWS, T.BLOCKS, T.EMPTY_BLOCKS,
  NULL::NUMBER, NULL::NUMBER, T.AVG_ROW_LEN, 
  NULL::NUMBER, NULL::NUMBER, NULL::NUMBER, NULL::NUMBER, T.SAMPLESIZE, T.ANALYZETIME
  FROM SYS.SYS_USERS U JOIN SYS.SYS_TABLES T ON T.USER# = U.ID AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
  where T.RECYCLED = 0 AND
       (U.NAME = user or 
        user = 'SYS' or 
        DBE_DIAGNOSE.has_obj_privs(user, U.NAME, '"'||T.NAME||'"', 'TABLE'))
  UNION ALL
  SELECT U.NAME, T.NAME, TP.NAME, ROW_NUMBER() OVER (PARTITION BY TP.USER#, TP.TABLE# ORDER BY TP.PART#), 
  'PARTITION', TP.ROWCNT, TP.BLKCNT, TP.EMPCNT,
  NULL::NUMBER, NULL::NUMBER, TP.AVGRLN,
  NULL::NUMBER, NULL::NUMBER, NULL::NUMBER, NULL::NUMBER, TP.SAMPLESIZE, TP.ANALYZETIME
  FROM SYS.SYS_USERS U JOIN SYS.SYS_TABLES T ON T.USER# = U.ID AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
  JOIN SYS.SYS_TABLE_PARTS TP ON T.USER# = TP.USER# AND T.ID = TP.TABLE#
  where T.RECYCLED = 0 AND
       (U.NAME = user or 
         user = 'SYS' or 
         DBE_DIAGNOSE.has_obj_privs(user, U.NAME, '"'||T.NAME||'"', 'TABLE'))
/

CREATE OR REPLACE VIEW DBA_TAB_STATISTICS
(
  OWNER,
  TABLE_NAME,
  PARTITION_NAME,
  PARTITION_POSITION,
  OBJECT_TYPE,
  NUM_ROWS,
  BLOCKS,
  EMPTY_BLOCKS,
  AVG_SPACE,
  CHAIN_CNT,
  AVG_ROW_LEN,
  AVG_SPACE_FREELIST_BLOCKS,
  NUM_FREELIST_BLOCKS,
  AVG_CACHED_BLOCKS,
  AVG_CACHE_HIT_RATIO,
  SAMPLE_SIZE,
  LAST_ANALYZED
)
AS
  SELECT * FROM SYS.ALL_TAB_STATISTICS
/

CREATE OR REPLACE VIEW USER_TAB_STATISTICS
(
  TABLE_NAME,
  PARTITION_NAME,
  PARTITION_POSITION,
  OBJECT_TYPE,
  NUM_ROWS,
  BLOCKS,
  EMPTY_BLOCKS,
  AVG_SPACE,
  CHAIN_CNT,
  AVG_ROW_LEN,
  AVG_SPACE_FREELIST_BLOCKS,
  NUM_FREELIST_BLOCKS,
  AVG_CACHED_BLOCKS,
  AVG_CACHE_HIT_RATIO,
  SAMPLE_SIZE,
  LAST_ANALYZED
)
AS
  SELECT T.NAME, NULL::VARCHAR(64), NULL::NUMBER, 
  'TABLE', T.NUM_ROWS, T.BLOCKS, T.EMPTY_BLOCKS,
  NULL::NUMBER, NULL::NUMBER, T.AVG_ROW_LEN, 
  NULL::NUMBER, NULL::NUMBER, NULL::NUMBER, NULL::NUMBER, T.SAMPLESIZE, T.ANALYZETIME
  FROM SYS.DV_ME M JOIN SYS.SYS_TABLES T ON T.USER# = M.USER_ID
  UNION ALL
  SELECT T.NAME, TP.NAME, ROW_NUMBER() OVER (PARTITION BY TP.USER#, TP.TABLE# ORDER BY TP.PART#), 
  'PARTITION', TP.ROWCNT, TP.BLKCNT, TP.EMPCNT,
  NULL::NUMBER, NULL::NUMBER, TP.AVGRLN,
  NULL::NUMBER, NULL::NUMBER, NULL::NUMBER, NULL::NUMBER, TP.SAMPLESIZE, TP.ANALYZETIME
  FROM SYS.DV_ME M JOIN SYS.SYS_TABLES T ON T.USER# = M.USER_ID
  JOIN SYS.SYS_TABLE_PARTS TP ON T.USER# = TP.USER# AND T.ID = TP.TABLE#
/

CREATE OR REPLACE PUBLIC SYNONYM  ALL_TAB_STATISTICS     FOR SYS.ALL_TAB_STATISTICS
/
GRANT SELECT ON ALL_TAB_STATISTICS TO PUBLIC
/
CREATE OR REPLACE PUBLIC SYNONYM  DBA_TAB_STATISTICS     FOR SYS.DBA_TAB_STATISTICS
/
CREATE OR REPLACE PUBLIC SYNONYM  USER_TAB_STATISTICS    FOR SYS.USER_TAB_STATISTICS
/
GRANT SELECT ON USER_TAB_STATISTICS TO PUBLIC
/


CREATE OR REPLACE VIEW ALL_IND_PARTITIONS
(
  INDEX_OWNER,
  INDEX_NAME,
  COMPOSITE,
  PARTITION_NAME,
  PARTITION_POSITION,
  STATUS,
  PCT_FREE,
  INI_TRANS,
  MAX_TRANS,
  BLEVEL,
  LEAF_BLOCKS,
  DISTINCT_KEYS,
  AVG_LEAF_BLOCKS_PER_KEY,
  AVG_DATA_BLOCKS_PER_KEY,
  CLUSTERING_FACTOR,
  NUM_ROWS,
  SAMPLE_SIZE,
  LAST_ANALYZED
)
AS
  SELECT U.NAME, I.NAME, 'NO', TP.NAME,
  ROW_NUMBER() OVER (PARTITION BY IP.USER#, IP.TABLE#, IP.INDEX# ORDER BY TP.PART#),
  DECODE(IP.FLAGS & 4, 0, 'VALID', 'INVALID'), IP.PCTFREE, IP.INITRANS, 255,
  IP.BLEVEL, IP.LEVEL_BLOCKS, IP.DISTKEY, IP.LBLKKEY, IP.DBLKKEY, IP.CLUFAC,
  TP.ROWCNT, IP.SAMPLESIZE, IP.ANALYZETIME
  FROM SYS.SYS_USERS U  
  JOIN SYS.SYS_TABLE_PARTS TP ON TP.USER# = U.ID AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
  JOIN SYS.SYS_TABLES T ON T.ID = TP.TABLE#  AND T.USER# = U.ID
  JOIN SYS.SYS_INDEX_PARTS IP ON TP.USER# = IP.USER# AND TP.TABLE# = IP.TABLE# AND TP.PART#=IP.PART#
  JOIN SYS.SYS_INDEXES I ON IP.USER# = I.USER# AND IP.TABLE# = I.TABLE# AND IP.INDEX# = I.ID
  where T.RECYCLED = 0 AND
       (U.NAME = user or 
         user = 'SYS' or
         DBE_DIAGNOSE.has_obj_privs(user, U.NAME, '"'||T.NAME||'"', 'TABLE'))
/

CREATE OR REPLACE VIEW DBA_IND_PARTITIONS
(
  INDEX_OWNER,
  INDEX_NAME,
  COMPOSITE,
  PARTITION_NAME,
  PARTITION_POSITION,
  STATUS,
  PCT_FREE,
  INI_TRANS,
  MAX_TRANS,
  BLEVEL,
  LEAF_BLOCKS,
  DISTINCT_KEYS,
  AVG_LEAF_BLOCKS_PER_KEY,
  AVG_DATA_BLOCKS_PER_KEY,
  CLUSTERING_FACTOR,
  NUM_ROWS,
  SAMPLE_SIZE,
  LAST_ANALYZED
)
AS
  SELECT U.NAME, I.NAME, 'NO', TP.NAME,
  ROW_NUMBER() OVER (PARTITION BY IP.USER#, IP.TABLE#, IP.INDEX# ORDER BY TP.PART#),
  DECODE(IP.FLAGS & 4, 0, 'VALID', 'INVALID'), IP.PCTFREE, IP.INITRANS, 255,
  IP.BLEVEL, IP.LEVEL_BLOCKS, IP.DISTKEY, IP.LBLKKEY, IP.DBLKKEY, IP.CLUFAC,
  TP.ROWCNT, IP.SAMPLESIZE, IP.ANALYZETIME
  FROM SYS.SYS_USERS U JOIN SYS.SYS_TABLE_PARTS TP ON TP.USER# = U.ID AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
  JOIN SYS.SYS_INDEX_PARTS IP ON TP.USER# = IP.USER# AND TP.TABLE# = IP.TABLE# AND TP.PART#=IP.PART#
  JOIN SYS.SYS_INDEXES I ON IP.USER# = I.USER# AND IP.TABLE# = I.TABLE# AND IP.INDEX# = I.ID
/

CREATE OR REPLACE VIEW USER_IND_PARTITIONS
(
  INDEX_NAME,
  COMPOSITE,
  PARTITION_NAME,
  PARTITION_POSITION,
  STATUS,
  PCT_FREE,
  INI_TRANS,
  MAX_TRANS,
  BLEVEL,
  LEAF_BLOCKS,
  DISTINCT_KEYS,
  AVG_LEAF_BLOCKS_PER_KEY,
  AVG_DATA_BLOCKS_PER_KEY,
  CLUSTERING_FACTOR,
  NUM_ROWS,
  SAMPLE_SIZE,
  LAST_ANALYZED
)
AS
  SELECT I.NAME, 'NO', TP.NAME,
  ROW_NUMBER() OVER (PARTITION BY IP.USER#, IP.TABLE#, IP.INDEX# ORDER BY TP.PART#),
  DECODE(IP.FLAGS & 4, 0, 'VALID', 'INVALID'), IP.PCTFREE, IP.INITRANS, 255,
  IP.BLEVEL, IP.LEVEL_BLOCKS, IP.DISTKEY, IP.LBLKKEY, IP.DBLKKEY, IP.CLUFAC,
  TP.ROWCNT, IP.SAMPLESIZE, IP.ANALYZETIME
  FROM SYS.DV_ME M JOIN SYS.SYS_TABLE_PARTS TP ON TP.USER# = M.USER_ID
  JOIN SYS.SYS_INDEX_PARTS IP ON TP.USER# = IP.USER# AND TP.TABLE# = IP.TABLE# AND TP.PART#=IP.PART#
  JOIN SYS.SYS_INDEXES I ON IP.USER# = I.USER# AND IP.TABLE# = I.TABLE# AND IP.INDEX# = I.ID
/

CREATE OR REPLACE PUBLIC SYNONYM  ALL_IND_PARTITIONS     FOR SYS.ALL_IND_PARTITIONS
/
GRANT SELECT ON ALL_IND_PARTITIONS TO PUBLIC
/
CREATE OR REPLACE PUBLIC SYNONYM  DBA_IND_PARTITIONS     FOR SYS.DBA_IND_PARTITIONS
/
CREATE OR REPLACE PUBLIC SYNONYM  USER_IND_PARTITIONS    FOR SYS.USER_IND_PARTITIONS
/
GRANT SELECT ON USER_IND_PARTITIONS TO PUBLIC
/

CREATE OR REPLACE VIEW ALL_IND_STATISTICS
(
  OWNER,
  INDEX_NAME,
  TABLE_OWNER,
  TABLE_NAME,
  PARTITION_NAME,
  PARTITION_POSITION,
  OBJECT_TYPE,
  BLEVEL,
  LEAF_BLOCKS,
  DISTINCT_KEYS,
  AVG_LEAF_BLOCKS_PER_KEY,
  AVG_DATA_BLOCKS_PER_KEY,
  CLUSTERING_FACTOR,
  NUM_ROWS,
  SAMPLE_SIZE,
  LAST_ANALYZED
)
AS
  SELECT U.NAME, I.NAME, U.NAME, T.NAME, NULL::VARCHAR(64), NULL::NUMBER,
         'INDEX', I.BLEVEL, I.LEVEL_BLOCKS, I.DISTINCT_KEYS, I.AVG_LEAF_BLOCKS_PER_KEY, I.AVG_DATA_BLOCKS_PER_KEY,
         I.CLUFAC, T.NUM_ROWS, I.SAMPLESIZE, I.ANALYZETIME
  FROM SYS.SYS_USERS U JOIN SYS.SYS_TABLES T ON T.USER# = U.ID AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
  JOIN SYS.SYS_INDEXES I ON T.USER# = I.USER# AND T.ID = I.TABLE# 
  where T.RECYCLED = 0 AND
       (U.NAME = user or 
         user = 'SYS' or
         DBE_DIAGNOSE.has_obj_privs(user, U.NAME, '"'||T.NAME||'"', 'TABLE'))
  UNION ALL
  SELECT U.NAME, I.NAME, U.NAME, T.NAME, TP.NAME,
         ROW_NUMBER() OVER (PARTITION BY TP.USER#, TP.TABLE# ORDER BY TP.PART#),
         'PARTITION', IP.BLEVEL, IP.LEVEL_BLOCKS, IP.DISTKEY, IP.LBLKKEY, IP.DBLKKEY,
         IP.CLUFAC, TP.ROWCNT, IP.SAMPLESIZE, IP.ANALYZETIME
  FROM SYS.SYS_USERS U JOIN SYS.SYS_TABLES T ON T.USER# = U.ID AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
  JOIN SYS.SYS_INDEXES I ON T.USER# = I.USER# AND T.ID = I.TABLE#
  JOIN SYS.SYS_TABLE_PARTS TP ON T.USER# = TP.USER# AND T.ID = TP.TABLE# 
  JOIN SYS.SYS_INDEX_PARTS IP ON I.USER# = IP.USER# AND I.TABLE# = IP.TABLE# AND I.ID = IP.INDEX# AND TP.PART# = IP.PART#
  where T.RECYCLED = 0 AND
       (U.NAME = user or 
         user = 'SYS' or
         DBE_DIAGNOSE.has_obj_privs(user, U.NAME, '"'||T.NAME||'"', 'TABLE'))
/

CREATE OR REPLACE VIEW DBA_IND_STATISTICS
(
  OWNER,
  INDEX_NAME,
  TABLE_OWNER,
  TABLE_NAME,
  PARTITION_NAME,
  PARTITION_POSITION,
  OBJECT_TYPE,
  BLEVEL,
  LEAF_BLOCKS,
  DISTINCT_KEYS,
  AVG_LEAF_BLOCKS_PER_KEY,
  AVG_DATA_BLOCKS_PER_KEY,
  CLUSTERING_FACTOR,
  NUM_ROWS,
  SAMPLE_SIZE,
  LAST_ANALYZED
)
AS
  SELECT U.NAME, I.NAME, U.NAME, T.NAME, NULL::VARCHAR(64), NULL::NUMBER,
         'INDEX', I.BLEVEL, I.LEVEL_BLOCKS, I.DISTINCT_KEYS, I.AVG_LEAF_BLOCKS_PER_KEY, I.AVG_DATA_BLOCKS_PER_KEY,
         I.CLUFAC, T.NUM_ROWS, I.SAMPLESIZE, I.ANALYZETIME
  FROM SYS.SYS_USERS U JOIN SYS.SYS_TABLES T ON T.USER# = U.ID AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
  JOIN SYS.SYS_INDEXES I ON T.USER# = I.USER# AND T.ID = I.TABLE# 
  UNION ALL
  SELECT U.NAME, I.NAME, U.NAME, T.NAME, TP.NAME,
         ROW_NUMBER() OVER (PARTITION BY TP.USER#, TP.TABLE# ORDER BY TP.PART#),
         'PARTITION', IP.BLEVEL, IP.LEVEL_BLOCKS, IP.DISTKEY, IP.LBLKKEY, IP.DBLKKEY,
         IP.CLUFAC, TP.ROWCNT, IP.SAMPLESIZE, IP.ANALYZETIME
  FROM SYS.SYS_USERS U JOIN SYS.SYS_TABLES T ON T.USER# = U.ID AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
  JOIN SYS.SYS_INDEXES I ON T.USER# = I.USER# AND T.ID = I.TABLE#
  JOIN SYS.SYS_TABLE_PARTS TP ON T.USER# = TP.USER# AND T.ID = TP.TABLE# 
  JOIN SYS.SYS_INDEX_PARTS IP ON I.USER# = IP.USER# AND I.TABLE# = IP.TABLE# AND I.ID = IP.INDEX# AND TP.PART# = IP.PART#
/

CREATE OR REPLACE VIEW USER_IND_STATISTICS
(
  INDEX_NAME,
  TABLE_OWNER,
  TABLE_NAME,
  PARTITION_NAME,
  PARTITION_POSITION,
  OBJECT_TYPE,
  BLEVEL,
  LEAF_BLOCKS,
  DISTINCT_KEYS,
  AVG_LEAF_BLOCKS_PER_KEY,
  AVG_DATA_BLOCKS_PER_KEY,
  CLUSTERING_FACTOR,
  NUM_ROWS,
  SAMPLE_SIZE,
  LAST_ANALYZED
)
AS
  SELECT I.NAME, M.USER_NAME, T.NAME, NULL::VARCHAR(64), NULL::NUMBER,
         'INDEX', I.BLEVEL, I.LEVEL_BLOCKS, I.DISTINCT_KEYS, I.AVG_LEAF_BLOCKS_PER_KEY, I.AVG_DATA_BLOCKS_PER_KEY,
         I.CLUFAC, T.NUM_ROWS, I.SAMPLESIZE, I.ANALYZETIME
  FROM SYS.DV_ME M JOIN SYS.SYS_TABLES T ON T.USER# = M.USER_ID
  JOIN SYS.SYS_INDEXES I ON T.USER# = I.USER# AND T.ID = I.TABLE#
  UNION ALL
  SELECT I.NAME, M.USER_NAME, T.NAME, TP.NAME,
         ROW_NUMBER() OVER (PARTITION BY TP.USER#, TP.TABLE# ORDER BY TP.PART#),
         'PARTITION', IP.BLEVEL, IP.LEVEL_BLOCKS, IP.DISTKEY, IP.LBLKKEY, IP.DBLKKEY,
         IP.CLUFAC, TP.ROWCNT, IP.SAMPLESIZE, IP.ANALYZETIME
  FROM SYS.DV_ME M JOIN SYS.SYS_TABLES T ON T.USER# = M.USER_ID
  JOIN SYS.SYS_INDEXES I ON T.USER# = I.USER# AND T.ID = I.TABLE#
  JOIN SYS.SYS_TABLE_PARTS TP ON T.USER# = TP.USER# AND T.ID = TP.TABLE# 
  JOIN SYS.SYS_INDEX_PARTS IP ON I.USER# = IP.USER# AND I.TABLE# = IP.TABLE# AND I.ID = IP.INDEX# AND TP.PART# = IP.PART#
/

CREATE OR REPLACE PUBLIC SYNONYM  ALL_IND_STATISTICS     FOR SYS.ALL_IND_STATISTICS
/
CREATE OR REPLACE PUBLIC SYNONYM  DBA_IND_STATISTICS     FOR SYS.DBA_IND_STATISTICS
/
CREATE OR REPLACE PUBLIC SYNONYM  USER_IND_STATISTICS    FOR SYS.USER_IND_STATISTICS
/
GRANT SELECT ON USER_IND_STATISTICS TO PUBLIC
/

CREATE OR REPLACE VIEW ALL_TAB_COL_STATISTICS
(
  OWNER,
  TABLE_NAME,
  COLUMN_NAME,
  NUM_DISTINCT,
  LOW_VALUE,
  HIGH_VALUE,
  DENSITY,
  NUM_NULLS,
  NUM_BUCKETS,
  SAMPLE_SIZE,
  LAST_ANALYZED,
  AVG_COL_LEN,
  HISTOGRAM
)
AS
  SELECT U.NAME, T.NAME, C.NAME, C.NUM_DISTINCT, C.LOW_VALUE, C.HIGH_VALUE, 
  HH.DENSITY, HH.NULL_NUM, HH.BUCKET_NUM, HH.SPARE3, HH.ANALYZE_TIME, NULL::NUMBER, C.HISTOGRAM
  FROM SYS.SYS_USERS U JOIN SYS.SYS_TABLES T ON T.USER# = U.ID AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
  JOIN SYS.SYS_COLUMNS C ON T.ID = C.TABLE# AND T.USER# = C.USER#
  LEFT JOIN SYS.SYS_HISTGRAM_ABSTR HH ON C.USER# = HH.USER# AND C.TABLE# = HH.TAB# AND C.ID = HH.COL#  AND (HH.SPARE1 IS NULL OR HH.SPARE1 = 4294967295)
  where T.RECYCLED = 0 AND
        (U.NAME = user or 
         user = 'SYS' or
         DBE_DIAGNOSE.has_obj_privs(user, U.NAME, '"'||T.NAME||'"', 'TABLE'))
/

CREATE OR REPLACE VIEW DBA_TAB_COL_STATISTICS
(
  OWNER,
  TABLE_NAME,
  COLUMN_NAME,
  NUM_DISTINCT,
  LOW_VALUE,
  HIGH_VALUE,
  DENSITY,
  NUM_NULLS,
  NUM_BUCKETS,
  SAMPLE_SIZE,
  LAST_ANALYZED,
  AVG_COL_LEN,
  HISTOGRAM
)
AS
  SELECT U.NAME, T.NAME, C.NAME, C.NUM_DISTINCT, C.LOW_VALUE, C.HIGH_VALUE, 
  HH.DENSITY, HH.NULL_NUM, HH.BUCKET_NUM, T.SAMPLESIZE, T.ANALYZETIME, NULL::NUMBER, C.HISTOGRAM
  FROM SYS.SYS_USERS U JOIN SYS.SYS_TABLES T ON T.USER# = U.ID AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
  JOIN SYS.SYS_COLUMNS C ON T.ID = C.TABLE# AND T.USER# = C.USER#
  LEFT JOIN SYS.SYS_HISTGRAM_ABSTR HH ON C.USER# = HH.USER# AND C.TABLE# = HH.TAB# AND C.ID = HH.COL#  AND (HH.SPARE1 IS NULL OR HH.SPARE1 = 4294967295)
/

CREATE OR REPLACE VIEW USER_TAB_COL_STATISTICS
(
  TABLE_NAME,
  COLUMN_NAME,
  NUM_DISTINCT,
  LOW_VALUE,
  HIGH_VALUE,
  DENSITY,
  NUM_NULLS,
  NUM_BUCKETS,
  SAMPLE_SIZE,
  LAST_ANALYZED,
  AVG_COL_LEN,
  HISTOGRAM
)
AS
  SELECT T.NAME, C.NAME, C.NUM_DISTINCT, C.LOW_VALUE, C.HIGH_VALUE, 
  HH.DENSITY, HH.NULL_NUM, HH.BUCKET_NUM, HH.SPARE3, HH.ANALYZE_TIME, NULL::NUMBER, C.HISTOGRAM
  FROM SYS.DV_ME M JOIN SYS.SYS_TABLES T ON T.USER# = M.USER_ID
  JOIN SYS.SYS_COLUMNS C ON T.ID = C.TABLE# AND T.USER# = C.USER#
  LEFT JOIN SYS.SYS_HISTGRAM_ABSTR HH ON C.USER# = HH.USER# AND C.TABLE# = HH.TAB# AND C.ID = HH.COL# AND (HH.SPARE1 IS NULL OR HH.SPARE1 = 4294967295)
/

CREATE OR REPLACE PUBLIC SYNONYM  ALL_TAB_COL_STATISTICS     FOR SYS.ALL_TAB_COL_STATISTICS
/
GRANT SELECT ON ALL_TAB_COL_STATISTICS TO PUBLIC
/
CREATE OR REPLACE PUBLIC SYNONYM  DBA_TAB_COL_STATISTICS     FOR SYS.DBA_TAB_COL_STATISTICS
/
CREATE OR REPLACE PUBLIC SYNONYM  USER_TAB_COL_STATISTICS    FOR SYS.USER_TAB_COL_STATISTICS
/
GRANT SELECT ON USER_TAB_COL_STATISTICS TO PUBLIC
/

CREATE OR REPLACE VIEW ALL_PART_COL_STATISTICS
(
  OWNER,
  TABLE_NAME,
  PARTITION_NAME,
  COLUMN_NAME,
  NUM_DISTINCT,
  LOW_VALUE,
  HIGH_VALUE,
  DENSITY,
  NUM_NULLS,
  NUM_BUCKETS,
  SAMPLE_SIZE,
  LAST_ANALYZED,
  AVG_COL_LEN,
  HISTOGRAM
)
AS
  SELECT U.NAME, T.NAME, TP.NAME, C.NAME, HH.DIST_NUM, HH.MINVALUE, HH.MAXVALUE,
  HH.DENSITY, HH.NULL_NUM, HH.BUCKET_NUM, HH.SPARE3, HH.ANALYZE_TIME, NULL::NUMBER, C.HISTOGRAM
  FROM SYS.SYS_USERS U JOIN SYS.SYS_TABLES T ON T.USER# = U.ID AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
  JOIN SYS.SYS_TABLE_PARTS TP ON T.USER# = TP.USER# AND T.ID = TP.TABLE#  
  JOIN SYS.SYS_COLUMNS C ON TP.USER# = C.USER# AND TP.TABLE# = C.TABLE# 
  LEFT JOIN SYS.SYS_HISTGRAM_ABSTR HH ON C.USER# = HH.USER# AND C.TABLE# = HH.TAB# AND C.ID = HH.COL# AND HH.SPARE1 = TP.PART#
  where T.RECYCLED = 0 AND
        (U.NAME = user or 
         user = 'SYS' or
         DBE_DIAGNOSE.has_obj_privs(user, U.NAME, '"'||T.NAME||'"', 'TABLE'))
/

CREATE OR REPLACE VIEW DBA_PART_COL_STATISTICS
(
  OWNER,
  TABLE_NAME,
  PARTITION_NAME,
  COLUMN_NAME,
  NUM_DISTINCT,
  LOW_VALUE,
  HIGH_VALUE,
  DENSITY,
  NUM_NULLS,
  NUM_BUCKETS,
  SAMPLE_SIZE,
  LAST_ANALYZED,
  AVG_COL_LEN,
  HISTOGRAM
)
AS
  SELECT U.NAME, T.NAME, TP.NAME, C.NAME, HH.DIST_NUM, HH.MINVALUE, HH.MAXVALUE, 
  HH.DENSITY, HH.NULL_NUM, HH.BUCKET_NUM, HH.SPARE3, HH.ANALYZE_TIME, NULL::NUMBER, C.HISTOGRAM
  FROM SYS.SYS_USERS U JOIN SYS.SYS_TABLES T ON T.USER# = U.ID AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
  JOIN SYS.SYS_TABLE_PARTS TP ON T.USER# = TP.USER# AND T.ID = TP.TABLE#  
  JOIN SYS.SYS_COLUMNS C ON TP.USER# = C.USER# AND TP.TABLE# = C.TABLE# 
  LEFT JOIN SYS.SYS_HISTGRAM_ABSTR HH ON C.USER# = HH.USER# AND C.TABLE# = HH.TAB# AND C.ID = HH.COL# AND HH.SPARE1 = TP.PART#
/

CREATE OR REPLACE VIEW USER_PART_COL_STATISTICS
(
  TABLE_NAME,
  PARTITION_NAME,
  COLUMN_NAME,
  NUM_DISTINCT,
  LOW_VALUE,
  HIGH_VALUE,
  DENSITY,
  NUM_NULLS,
  NUM_BUCKETS,
  SAMPLE_SIZE,
  LAST_ANALYZED,
  AVG_COL_LEN,
  HISTOGRAM
)
AS
  SELECT T.NAME, TP.NAME, C.NAME, HH.DIST_NUM, HH.MINVALUE, HH.MAXVALUE, 
  HH.DENSITY, HH.NULL_NUM, HH.BUCKET_NUM, HH.SPARE3, HH.ANALYZE_TIME, NULL::NUMBER, C.HISTOGRAM
  FROM SYS.DV_ME M JOIN SYS.SYS_TABLES T ON T.USER# = M.USER_ID
  JOIN SYS.SYS_TABLE_PARTS TP ON T.USER# = TP.USER# AND T.ID = TP.TABLE#  
  JOIN SYS.SYS_COLUMNS C ON TP.USER# = C.USER# AND TP.TABLE# = C.TABLE#
  LEFT JOIN SYS.SYS_HISTGRAM_ABSTR HH ON C.USER# = HH.USER# AND C.TABLE# = HH.TAB# AND C.ID = HH.COL# AND HH.SPARE1 = TP.PART#
/

CREATE OR REPLACE PUBLIC SYNONYM  ALL_PART_COL_STATISTICS     FOR SYS.ALL_PART_COL_STATISTICS
/
GRANT SELECT ON ALL_PART_COL_STATISTICS TO PUBLIC
/
CREATE OR REPLACE PUBLIC SYNONYM  DBA_PART_COL_STATISTICS     FOR SYS.DBA_PART_COL_STATISTICS
/
CREATE OR REPLACE PUBLIC SYNONYM  USER_PART_COL_STATISTICS    FOR SYS.USER_PART_COL_STATISTICS
/
GRANT SELECT ON USER_PART_COL_STATISTICS TO PUBLIC
/

CREATE OR REPLACE VIEW ALL_HISTOGRAMS
(
  OWNER,
  TABLE_NAME,
  COLUMN_NAME,
  ENDPOINT_NUMBER,
  ENDPOINT_VALUE,
  ENDPOINT_ACTUAL_VALUE
)
AS
  SELECT U.NAME, T.NAME, C.NAME, ROW_NUMBER() OVER (PARTITION BY T.NAME, C.NAME ORDER BY H.ENDPOINT), H.ENDPOINT, H.BUCKET
  FROM SYS.SYS_USERS U JOIN SYS.SYS_TABLES T ON T.USER# = U.ID AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
  JOIN SYS.SYS_COLUMNS C ON T.USER# = C.USER# AND T.ID = C.TABLE# 
  JOIN SYS.SYS_HISTGRAM H ON C.USER# = H.USER# AND C.TABLE# = H.TABLE# AND C.ID = H.COL# AND (H.PART# IS NULL OR H.PART# = -1)
  WHERE T.RECYCLED = 0 AND  
       (U.NAME = user OR 
         user = 'SYS' OR
         DBE_DIAGNOSE.has_obj_privs(user, U.NAME, '"'||T.NAME||'"', 'TABLE'))
/

CREATE OR REPLACE VIEW DBA_HISTOGRAMS
(
  OWNER,
  TABLE_NAME,
  COLUMN_NAME,
  ENDPOINT_NUMBER,
  ENDPOINT_VALUE,
  ENDPOINT_ACTUAL_VALUE
)
AS
  SELECT U.NAME, T.NAME, C.NAME, ROW_NUMBER() OVER (PARTITION BY T.NAME, C.NAME ORDER BY H.ENDPOINT), H.ENDPOINT, H.BUCKET
  FROM SYS.SYS_USERS U JOIN SYS.SYS_TABLES T ON T.USER# = U.ID AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
  JOIN SYS.SYS_COLUMNS C ON T.USER# = C.USER# AND T.ID = C.TABLE# 
  JOIN SYS.SYS_HISTGRAM H ON C.USER# = H.USER# AND C.TABLE# = H.TABLE# AND C.ID = H.COL# AND (H.PART# IS NULL OR H.PART# = -1)
/

CREATE OR REPLACE VIEW USER_HISTOGRAMS
(
  TABLE_NAME,
  COLUMN_NAME,
  ENDPOINT_NUMBER,
  ENDPOINT_VALUE,
  ENDPOINT_ACTUAL_VALUE
)
AS
  SELECT T.NAME, C.NAME, ROW_NUMBER() OVER (PARTITION BY T.NAME, C.NAME ORDER BY H.ENDPOINT), H.ENDPOINT, H.BUCKET
  FROM SYS.DV_ME M JOIN SYS.SYS_TABLES T ON T.USER# = M.USER_ID 
  JOIN SYS.SYS_COLUMNS C ON T.USER# = C.USER# AND T.ID = C.TABLE# 
  JOIN SYS.SYS_HISTGRAM H ON C.USER# = H.USER# AND C.TABLE# = H.TABLE# AND C.ID = H.COL# AND (H.PART# IS NULL OR H.PART# = -1)
/

CREATE OR REPLACE VIEW ALL_DB_LINKS
(
  OWNER,
  DB_LINK,
  USERNAME,
  HOST,
  CREATED
)
AS
  SELECT U.NAME, L.NAME, L.USERID, L.HOST, L.CTIME FROM SYS.SYS_LINKS L, SYS.SYS_USERS U WHERE L.OWNER# = U.ID AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
/ 


CREATE OR REPLACE VIEW SYS.ALL_JOBS AS
SELECT JOB, LOWNER LOG_USER, POWNER PRIV_USER, COWNER SCHEMA_USER,
    LAST_DATE, SUBSTR(TO_CHAR(LAST_DATE,'HH24:MI:SS'),1,8) LAST_SEC,
    THIS_DATE, SUBSTR(TO_CHAR(THIS_DATE,'HH24:MI:SS'),1,8) THIS_SEC,
    NEXT_DATE, SUBSTR(TO_CHAR(NEXT_DATE,'HH24:MI:SS'),1,8) NEXT_SEC,
    DECODE(MOD(BROKEN,2),1,'Y',0,'N','?') BROKEN,
    INTERVAL# INTERVAL_TIME, FAILURES,
	  WHAT, CREATE_DATE
  FROM SYS.SYS_JOBS J
/

CREATE OR REPLACE VIEW SYS.DBA_JOBS AS
SELECT JOB, LOWNER LOG_USER, POWNER PRIV_USER, COWNER SCHEMA_USER,
    LAST_DATE, SUBSTR(TO_CHAR(LAST_DATE,'HH24:MI:SS'),1,8) LAST_SEC,
    THIS_DATE, SUBSTR(TO_CHAR(THIS_DATE,'HH24:MI:SS'),1,8) THIS_SEC,
    NEXT_DATE, SUBSTR(TO_CHAR(NEXT_DATE,'HH24:MI:SS'),1,8) NEXT_SEC,
    DECODE(MOD(BROKEN,2),1,'Y',0,'N','?') BROKEN,
    INTERVAL# INTERVAL_TIME, FAILURES,
	WHAT, CREATE_DATE
  FROM SYS.SYS_JOBS J
/

CREATE OR REPLACE VIEW SYS.USER_JOBS AS
SELECT 
	J.JOB,J.LOG_USER,J.PRIV_USER,J.SCHEMA_USER,J.LAST_DATE,J.LAST_SEC,
	J.THIS_DATE,J.THIS_SEC,J.NEXT_DATE,J.NEXT_SEC,J.BROKEN,J.INTERVAL_TIME, FAILURES,
	J.WHAT,CREATE_DATE
FROM DBA_JOBS J, SYS.DV_ME M WHERE
J.LOG_USER = M.USER_NAME
/

CREATE OR REPLACE VIEW SYS.DBA_JOBS_RUNNING AS
SELECT V.JOBNO JOB, V.SESSION_ID SID, V.SERIAL_ID SERIAL#, J.FAILURES,
    J.LAST_DATE, SUBSTR(TO_CHAR(J.LAST_DATE,'HH24:MI:SS'),1,8) LAST_SEC,
    J.THIS_DATE, SUBSTR(TO_CHAR(J.THIS_DATE,'HH24:MI:SS'),1,8) THIS_SEC
  FROM SYS.DV_RUNNING_JOBS V LEFT JOIN SYS.SYS_JOBS J ON V.JOBNO = J.JOB
/

CREATE OR REPLACE PUBLIC SYNONYM  ALL_HISTOGRAMS     FOR SYS.ALL_HISTOGRAMS
/
GRANT SELECT ON ALL_HISTOGRAMS TO PUBLIC
/
CREATE OR REPLACE PUBLIC SYNONYM  DBA_HISTOGRAMS     FOR SYS.DBA_HISTOGRAMS
/
CREATE OR REPLACE PUBLIC SYNONYM  USER_HISTOGRAMS    FOR SYS.USER_HISTOGRAMS
/
GRANT SELECT ON USER_HISTOGRAMS TO PUBLIC
/


CREATE OR REPLACE VIEW SYS.ALL_DEPENDENCIES
(OWNER, NAME, TYPE, REFERENCED_OWNER, REFERENCED_NAME, REFERENCED_TYPE)
AS
SELECT DBE_DIAGNOSE.DBA_USER_NAME(D_OWNER#)::VARCHAR(64), D.D_NAME,
       DECODE(D.D_TYPE#, 0, 'TABLE', 1, 'VIEW', 2, 'SEQUENCE', 3, 'PROCEDURE',
                      7, 'SYNONYM', 8, 'FUNCTION', 9, 'TRIGGER', 10, 'INDEX',
                      11, 'DYNAMIC VIEW',15,'SYNONYM', 16, 'PACKAGE', 17 , 'PACKAGE BODY', 'UNDEFINED'),
       DBE_DIAGNOSE.DBA_USER_NAME(P_OWNER#)::VARCHAR(64), D.P_NAME,
       DECODE(D.P_TYPE#, 0, 'TABLE', 1, 'VIEW', 2, 'SEQUENCE', 3, 'PROCEDURE',
                      7, 'SYNONYM', 8, 'FUNCTION', 9, 'TRIGGER', 10, 'INDEX',
                      11, 'DYNAMIC VIEW', 15, 'SYNONYM', 16, 'PACKAGE', 17 , 'PACKAGE BODY', 'UNDEFINED')
FROM SYS.SYS_DEPENDENCIES D where DBE_DIAGNOSE.DBA_USER_NAME(D_OWNER#)::VARCHAR(64) = user or user = 'SYS' 
    or exists (select 1 from SYS.SYS_USER_ROLES S, SYS.DV_ME V where S.GRANTEE_ID = V.USER_ID and S.GRANTEE_TYPE = 0 and S.GRANTED_ROLE_ID = 0)
/

CREATE OR REPLACE VIEW SYS.DBA_DEPENDENCIES
(OWNER, NAME, TYPE, REFERENCED_OWNER, REFERENCED_NAME, REFERENCED_TYPE)
AS
SELECT DBE_DIAGNOSE.DBA_USER_NAME(D_OWNER#)::VARCHAR(64) as OWNER, D.D_NAME,
       DECODE(D.D_TYPE#, 0, 'TABLE', 1, 'VIEW', 2, 'SEQUENCE', 3, 'PROCEDURE',
                      7, 'SYNONYM', 8, 'FUNCTION', 9, 'TRIGGER', 10, 'INDEX',
                      11, 'DYNAMIC VIEW', 15, 'SYNONYM' ,16, 'PACKAGE', 17 , 'PACKAGE BODY', 'UNDEFINED'),
       DBE_DIAGNOSE.DBA_USER_NAME(P_OWNER#)::VARCHAR(64), D.P_NAME,
       DECODE(D.P_TYPE#, 0, 'TABLE', 1, 'VIEW', 2, 'SEQUENCE', 3, 'PROCEDURE',
                      7, 'SYNONYM', 8, 'FUNCTION', 9, 'TRIGGER', 10, 'INDEX',
                      11, 'DYNAMIC VIEW', 15, 'SYNONYM' ,16, 'PACKAGE', 17 , 'PACKAGE BODY', 'UNDEFINED')
FROM SYS.SYS_DEPENDENCIES D
/	

CREATE OR REPLACE VIEW SYS.USER_DEPENDENCIES
(OWNER, NAME, TYPE, REFERENCED_OWNER, REFERENCED_NAME, REFERENCED_TYPE)
AS
SELECT DBE_DIAGNOSE.DBA_USER_NAME(D.D_OWNER#)::VARCHAR(64), D.D_NAME,
       DECODE(D.D_TYPE#, 0, 'TABLE', 1, 'VIEW', 2, 'SEQUENCE', 3, 'PROCEDURE',
                      7, 'SYNONYM', 8, 'FUNCTION', 9, 'TRIGGER', 10, 'INDEX',
                      11, 'DYNAMIC VIEW', 15, 'SYNONYM' ,16, 'PACKAGE', 17 , 'PACKAGE BODY', 'UNDEFINED'),
       DBE_DIAGNOSE.DBA_USER_NAME(D.P_OWNER#)::VARCHAR(64), D.P_NAME,
       DECODE(D.P_TYPE#, 0, 'TABLE', 1, 'VIEW', 2, 'SEQUENCE', 3, 'PROCEDURE',
                      7, 'SYNONYM', 8, 'FUNCTION', 9, 'TRIGGER', 10, 'INDEX',
                      11, 'DYNAMIC VIEW', 15, 'SYNONYM' ,16, 'PACKAGE', 17 , 'PACKAGE BODY', 'UNDEFINED')
FROM SYS.SYS_DEPENDENCIES D, SYS.DV_ME M
WHERE D.D_OWNER# = M.USER_ID
/

CREATE OR REPLACE VIEW SYS.ALL_DIRECTORIES
(
  USER#,
  DIRECTORY_NAME,
  DIRECTORY_PATH
)
AS
  SELECT D.* FROM SYS.SYS_USERS U, SYS.SYS_DIRECTORIES D
    WHERE U.ID = D.USER# and 
          (U.NAME = user or 
           user = 'SYS' or 
           DBE_DIAGNOSE.has_obj_privs(user, U.NAME, '"'||D.DIRECTORY_NAME||'"', 'DIRECTORY')) AND DBE_DIAGNOSE.TENANT_CHECK(0, U.TENANT_ID)
/
CREATE OR REPLACE PUBLIC SYNONYM  ALL_DIRECTORIES FOR SYS.ALL_DIRECTORIES
/
GRANT SELECT ON ALL_DIRECTORIES TO PUBLIC
/
CREATE OR REPLACE PUBLIC SYNONYM  USER_SEGMENTS      FOR SYS.USER_SEGMENTS 
/
GRANT SELECT ON USER_SEGMENTS TO PUBLIC
/
CREATE OR REPLACE PUBLIC SYNONYM  DBA_SEGMENTS       FOR SYS.DBA_SEGMENTS 
/
CREATE OR REPLACE PUBLIC SYNONYM  ALL_TABLES         FOR SYS.ALL_TABLES 
/
CREATE OR REPLACE PUBLIC SYNONYM  DBA_TABLES         FOR SYS.DBA_TABLES 
/
GRANT SELECT ON ALL_TABLES TO PUBLIC
/
CREATE OR REPLACE PUBLIC SYNONYM  ALL_DBLINK_TABLES         FOR SYS.ALL_DBLINK_TABLES 
/
GRANT SELECT ON ALL_DBLINK_TABLES TO PUBLIC
/
CREATE OR REPLACE PUBLIC SYNONYM  DBA_DBLINK_TABLES  FOR SYS.DBA_DBLINK_TABLES 
/
CREATE OR REPLACE PUBLIC SYNONYM  USER_TABLES        FOR SYS.USER_TABLES 
/
GRANT SELECT ON USER_TABLES TO PUBLIC
/
CREATE OR REPLACE PUBLIC SYNONYM  ALL_TAB_COLS       FOR SYS.ALL_TAB_COLS 
/
GRANT SELECT ON ALL_TAB_COLS TO PUBLIC
/

CREATE OR REPLACE PUBLIC SYNONYM  DBA_PART_TABLES       FOR SYS.DBA_PART_TABLES 
/
CREATE OR REPLACE PUBLIC SYNONYM  ALL_PART_TABLES       FOR SYS.ALL_PART_TABLES
/
GRANT SELECT ON ALL_PART_TABLES TO PUBLIC
/
CREATE OR REPLACE PUBLIC SYNONYM  USER_PART_TABLES       FOR SYS.USER_PART_TABLES
/
GRANT SELECT ON USER_PART_TABLES TO PUBLIC
/

CREATE OR REPLACE PUBLIC SYNONYM  DBA_PART_STORE       FOR SYS.DBA_PART_STORE 
/
CREATE OR REPLACE PUBLIC SYNONYM  ALL_PART_STORE       FOR SYS.ALL_PART_STORE
/
GRANT SELECT ON ALL_PART_STORE TO PUBLIC
/
CREATE OR REPLACE PUBLIC SYNONYM  USER_PART_STORE       FOR SYS.USER_PART_STORE
/
GRANT SELECT ON USER_PART_STORE TO PUBLIC
/

CREATE OR REPLACE PUBLIC SYNONYM  DBA_PART_KEY_COLUMNS       FOR SYS.DBA_PART_KEY_COLUMNS 
/
CREATE OR REPLACE PUBLIC SYNONYM  ALL_PART_KEY_COLUMNS       FOR SYS.ALL_PART_KEY_COLUMNS 
/
GRANT SELECT ON ALL_PART_KEY_COLUMNS TO PUBLIC
/
CREATE OR REPLACE PUBLIC SYNONYM  USER_PART_KEY_COLUMNS       FOR SYS.USER_PART_KEY_COLUMNS 
/
GRANT SELECT ON USER_PART_KEY_COLUMNS TO PUBLIC
/

CREATE OR REPLACE PUBLIC SYNONYM  USER_TAB_COLS      FOR SYS.USER_TAB_COLS
/
GRANT SELECT ON USER_TAB_COLS TO PUBLIC
/
CREATE OR REPLACE PUBLIC SYNONYM  ALL_TAB_COLUMNS      FOR SYS.ALL_TAB_COLUMNS
/
GRANT SELECT ON ALL_TAB_COLUMNS TO PUBLIC
/
CREATE OR REPLACE PUBLIC SYNONYM  DBA_DBLINK_TAB_COLUMNS      FOR SYS.DBA_DBLINK_TAB_COLUMNS
/
CREATE OR REPLACE PUBLIC SYNONYM  ALL_DBLINK_TAB_COLUMNS      FOR SYS.ALL_DBLINK_TAB_COLUMNS
/
GRANT SELECT ON ALL_DBLINK_TAB_COLUMNS TO PUBLIC
/
CREATE OR REPLACE PUBLIC SYNONYM  USER_TAB_COLUMNS      FOR SYS.USER_TAB_COLUMNS
/
GRANT SELECT ON USER_TAB_COLUMNS TO PUBLIC
/
CREATE OR REPLACE PUBLIC SYNONYM  DBA_TAB_COLUMNS      FOR SYS.DBA_TAB_COLUMNS
/
CREATE OR REPLACE PUBLIC SYNONYM  ALL_VIEWS          FOR SYS.ALL_VIEWS 
/
GRANT SELECT ON ALL_VIEWS TO PUBLIC
/
CREATE OR REPLACE PUBLIC SYNONYM  DBA_VIEWS          FOR SYS.DBA_VIEWS 
/
CREATE OR REPLACE PUBLIC SYNONYM  USER_VIEWS         FOR SYS.USER_VIEWS 
/
GRANT SELECT ON USER_VIEWS TO PUBLIC
/
CREATE OR REPLACE PUBLIC SYNONYM  ALL_VIEW_COLUMNS   FOR SYS.ALL_VIEW_COLUMNS 
/
GRANT SELECT ON ALL_VIEW_COLUMNS TO PUBLIC
/
CREATE OR REPLACE PUBLIC SYNONYM  USER_VIEW_COLUMNS  FOR SYS.USER_VIEW_COLUMNS 
/
GRANT SELECT ON USER_VIEW_COLUMNS TO PUBLIC
/
CREATE OR REPLACE PUBLIC SYNONYM  ALL_INDEXES        FOR SYS.ALL_INDEXES 
/
GRANT SELECT ON ALL_INDEXES TO PUBLIC
/
CREATE OR REPLACE PUBLIC SYNONYM  DBA_INDEXES        FOR SYS.DBA_INDEXES 
/
CREATE OR REPLACE PUBLIC SYNONYM  USER_INDEXES       FOR SYS.USER_INDEXES 
/
GRANT SELECT ON USER_INDEXES TO PUBLIC
/
CREATE OR REPLACE PUBLIC SYNONYM  ALL_OBJECTS        FOR SYS.ALL_OBJECTS 
/
GRANT SELECT ON ALL_OBJECTS TO PUBLIC
/
CREATE OR REPLACE PUBLIC SYNONYM  USER_OBJECTS       FOR SYS.USER_OBJECTS 
/
GRANT SELECT ON USER_OBJECTS TO PUBLIC
/
CREATE OR REPLACE PUBLIC SYNONYM  DBA_TABLESPACES    FOR SYS.DBA_TABLESPACES 
/
CREATE OR REPLACE PUBLIC SYNONYM  USER_SYNONYMS      FOR SYS.USER_SYNONYMS 
/
GRANT SELECT ON USER_SYNONYMS TO PUBLIC
/
CREATE OR REPLACE PUBLIC SYNONYM  DBA_SYNONYMS       FOR SYS.DBA_SYNONYMS 
/
CREATE OR REPLACE PUBLIC SYNONYM  ALL_SYNONYMS       FOR SYS.ALL_SYNONYMS 
/
GRANT SELECT ON ALL_SYNONYMS TO PUBLIC
/
CREATE OR REPLACE PUBLIC SYNONYM  USER_TAB_COMMENTS  FOR SYS.USER_TAB_COMMENTS 
/
CREATE OR REPLACE PUBLIC SYNONYM  ALL_TAB_COMMENTS  FOR SYS.ALL_TAB_COMMENTS 
/
GRANT SELECT ON USER_TAB_COMMENTS TO PUBLIC
/
GRANT SELECT ON ALL_TAB_COMMENTS TO PUBLIC
/
CREATE OR REPLACE PUBLIC SYNONYM  DBA_TAB_COMMENTS   FOR SYS.DBA_TAB_COMMENTS 
/
CREATE OR REPLACE PUBLIC SYNONYM  USER_COL_COMMENTS  FOR SYS.USER_COL_COMMENTS 
/
CREATE OR REPLACE PUBLIC SYNONYM  ALL_COL_COMMENTS  FOR SYS.ALL_COL_COMMENTS 
/
GRANT SELECT ON USER_COL_COMMENTS TO PUBLIC
/
GRANT SELECT ON ALL_COL_COMMENTS TO PUBLIC
/
CREATE OR REPLACE PUBLIC SYNONYM  DBA_COL_COMMENTS   FOR SYS.DBA_COL_COMMENTS 
/
CREATE OR REPLACE PUBLIC SYNONYM  ALL_USERS          FOR SYS.ALL_USERS 
/
CREATE OR REPLACE PUBLIC SYNONYM  DBA_PROFILES       FOR SYS.DBA_PROFILES 
/
CREATE OR REPLACE PUBLIC SYNONYM  ALL_USER_SYS_PRIVS FOR SYS.ALL_USER_SYS_PRIVS
/

CREATE OR REPLACE PUBLIC SYNONYM  DBA_SYS_PRIVS      FOR SYS.DBA_SYS_PRIVS
/
CREATE OR REPLACE PUBLIC SYNONYM  USER_SYS_PRIVS     FOR SYS.USER_SYS_PRIVS
/
GRANT SELECT ON USER_SYS_PRIVS TO PUBLIC
/
CREATE OR REPLACE PUBLIC SYNONYM  DBA_ROLE_PRIVS     FOR SYS.DBA_ROLE_PRIVS
/
CREATE OR REPLACE PUBLIC SYNONYM  USER_ROLE_PRIVS    FOR SYS.USER_ROLE_PRIVS
/
GRANT SELECT ON USER_ROLE_PRIVS TO PUBLIC
/
CREATE OR REPLACE PUBLIC SYNONYM  DBA_TAB_PRIVS   FOR SYS.DBA_TAB_PRIVS
/
CREATE OR REPLACE PUBLIC SYNONYM USER_TAB_PRIVS   FOR SYS.USER_TAB_PRIVS
/
GRANT SELECT ON USER_TAB_PRIVS TO PUBLIC
/

CREATE OR REPLACE PUBLIC SYNONYM  ALL_SEQUENCES      FOR SYS.ALL_SEQUENCES
/
GRANT SELECT ON ALL_SEQUENCES TO PUBLIC
/
CREATE OR REPLACE PUBLIC SYNONYM  USER_SEQUENCES     FOR SYS.USER_SEQUENCES
/
GRANT SELECT ON USER_SEQUENCES TO PUBLIC
/
CREATE OR REPLACE PUBLIC SYNONYM  DBA_TAB_PARTITIONS FOR SYS.DBA_TAB_PARTITIONS
/
CREATE OR REPLACE PUBLIC SYNONYM  ALL_TAB_PARTITIONS FOR SYS.ALL_TAB_PARTITIONS
/
GRANT SELECT ON ALL_TAB_PARTITIONS TO PUBLIC
/
CREATE OR REPLACE PUBLIC SYNONYM USER_TAB_PARTITIONS FOR SYS.USER_TAB_PARTITIONS
/
GRANT SELECT ON USER_TAB_PARTITIONS TO PUBLIC
/
CREATE OR REPLACE PUBLIC SYNONYM  DBA_IND_COLUMNS    FOR SYS.DBA_IND_COLUMNS
/
CREATE OR REPLACE PUBLIC SYNONYM  ALL_IND_COLUMNS    FOR SYS.ALL_IND_COLUMNS
/
CREATE OR REPLACE PUBLIC SYNONYM  USER_IND_COLUMNS   FOR SYS.USER_IND_COLUMNS
/
GRANT SELECT ON ALL_IND_COLUMNS TO PUBLIC
/
GRANT SELECT ON USER_IND_COLUMNS TO PUBLIC
/
CREATE OR REPLACE PUBLIC SYNONYM USER_USERS FOR SYS.USER_USERS
/
GRANT SELECT ON USER_USERS TO PUBLIC
/
CREATE OR REPLACE PUBLIC SYNONYM USER_CONSTRAINTS FOR SYS.USER_CONSTRAINTS
/
GRANT SELECT ON USER_CONSTRAINTS TO PUBLIC
/
CREATE OR REPLACE PUBLIC SYNONYM ALL_CONSTRAINTS FOR SYS.ALL_CONSTRAINTS
/
GRANT SELECT ON ALL_CONSTRAINTS TO PUBLIC
/
CREATE OR REPLACE PUBLIC SYNONYM DBA_CONSTRAINTS FOR SYS.DBA_CONSTRAINTS
/
CREATE OR REPLACE PUBLIC SYNONYM  DBA_SOURCE         FOR SYS.DBA_SOURCE 
/
CREATE OR REPLACE PUBLIC SYNONYM  USER_SOURCE        FOR SYS.USER_SOURCE 
/
CREATE OR REPLACE PUBLIC SYNONYM  ALL_SOURCE         FOR SYS.ALL_SOURCE 
/
GRANT SELECT ON USER_SOURCE TO PUBLIC
/
GRANT SELECT ON ALL_SOURCE TO PUBLIC
/
CREATE OR REPLACE PUBLIC SYNONYM  DBA_PROCEDURES    FOR SYS.DBA_PROCEDURES 
/
CREATE OR REPLACE PUBLIC SYNONYM  ALL_PROCEDURES    FOR SYS.ALL_PROCEDURES 
/
GRANT SELECT ON ALL_PROCEDURES TO PUBLIC
/
CREATE OR REPLACE PUBLIC SYNONYM  DBA_TRIGGERS      FOR SYS.DBA_TRIGGERS
/
CREATE OR REPLACE PUBLIC SYNONYM  USER_TRIGGERS     FOR SYS.USER_TRIGGERS
/
GRANT SELECT ON USER_TRIGGERS TO PUBLIC
/
CREATE OR REPLACE PUBLIC SYNONYM  USER_CONS_COLUMNS        FOR SYS.USER_CONS_COLUMNS 
/
GRANT SELECT ON USER_CONS_COLUMNS TO PUBLIC
/
CREATE OR REPLACE PUBLIC SYNONYM  ALL_TRIGGERS     FOR SYS.ALL_TRIGGERS
/
GRANT SELECT ON ALL_TRIGGERS TO PUBLIC
/
CREATE OR REPLACE PUBLIC SYNONYM DBA_BACKUP_SET FOR SYS.DBA_BACKUP_SET
/
CREATE OR REPLACE PUBLIC SYNONYM DBA_OBJECTS FOR SYS.DBA_OBJECTS
/
CREATE OR REPLACE PUBLIC SYNONYM DBA_ROLES FOR SYS.DBA_ROLES
/
CREATE OR REPLACE PUBLIC SYNONYM DBA_DATA_FILES FOR SYS.DBA_DATA_FILES
/
CREATE OR REPLACE PUBLIC SYNONYM DBA_USERS FOR SYS.DBA_USERS
/
CREATE OR REPLACE PUBLIC SYNONYM  DBA_ARGUMENTS      FOR SYS.DBA_ARGUMENTS
/
CREATE OR REPLACE PUBLIC SYNONYM  USER_ARGUMENTS     FOR SYS.USER_ARGUMENTS
/
GRANT SELECT ON USER_ARGUMENTS TO PUBLIC
/
CREATE OR REPLACE PUBLIC SYNONYM  ALL_ARGUMENTS     FOR SYS.ALL_ARGUMENTS
/
GRANT SELECT ON ALL_ARGUMENTS TO PUBLIC
/
CREATE OR REPLACE PUBLIC SYNONYM DBA_FREE_SPACE FOR SYS.DBA_FREE_SPACE
/
CREATE OR REPLACE PUBLIC SYNONYM USER_FREE_SPACE FOR SYS.USER_FREE_SPACE
/
GRANT SELECT ON USER_FREE_SPACE TO PUBLIC
/
CREATE OR REPLACE PUBLIC SYNONYM  ALL_DEPENDENCIES       FOR SYS.ALL_DEPENDENCIES 
/
GRANT SELECT ON ALL_DEPENDENCIES TO PUBLIC
/
CREATE OR REPLACE PUBLIC SYNONYM  DBA_DEPENDENCIES       FOR SYS.DBA_DEPENDENCIES 
/
CREATE OR REPLACE PUBLIC SYNONYM  USER_DEPENDENCIES       FOR SYS.USER_DEPENDENCIES 
/
GRANT SELECT ON USER_DEPENDENCIES TO PUBLIC
/
CREATE OR REPLACE PUBLIC SYNONYM  USER_PROCEDURES       FOR SYS.USER_PROCEDURES 
/
GRANT SELECT ON USER_PROCEDURES TO PUBLIC
/  
CREATE OR REPLACE PUBLIC SYNONYM  DBA_JOBS        FOR SYS.DBA_JOBS 
/
CREATE OR REPLACE PUBLIC SYNONYM  ALL_JOBS        FOR SYS.ALL_JOBS 
/
CREATE OR REPLACE PUBLIC SYNONYM  USER_JOBS        FOR SYS.USER_JOBS 
/
CREATE OR REPLACE PUBLIC SYNONYM  DBA_JOBS_RUNNING FOR SYS.DBA_JOBS_RUNNING
/
CREATE OR REPLACE PUBLIC SYNONYM  DBA_PROCEDURES   FOR SYS.DBA_PROCEDURES
/
CREATE OR REPLACE PUBLIC SYNONYM  DBA_SEQUENCES    FOR SYS.DBA_SEQUENCES
/
CREATE OR REPLACE PUBLIC SYNONYM  DBA_SOURCE       FOR SYS.DBA_SOURCE
/
CREATE OR REPLACE PUBLIC SYNONYM  DBA_TAB_COLS     FOR SYS.DBA_TAB_COLS
/
CREATE OR REPLACE PUBLIC SYNONYM  DBA_VIEW_COLUMNS FOR SYS.DBA_VIEW_COLUMNS
/
CREATE OR REPLACE PUBLIC SYNONYM WSR$SQL_LIST_PLAN  FOR SYS.WSR_SQL_LIST_PLAN
/
CREATE OR REPLACE PUBLIC SYNONYM WSR$SQL_LIST       FOR SYS.WSR_SQL_LIST
/
CREATE OR REPLACE PUBLIC SYNONYM WSR$_WAITSTAT      FOR SYS.WSR_WAITSTAT
/
CREATE OR REPLACE PUBLIC SYNONYM WSR$_SEGMENT       FOR SYS.WSR_SEGMENT
/
CREATE OR REPLACE PUBLIC SYNONYM WSR$_SLOWSQL       FOR SYS.WSR_SLOWSQL
/
CREATE OR REPLACE PUBLIC SYNONYM WSR$_LIBRARYCACHE  FOR SYS.WSR_LIBRARYCACHE
/ 
CREATE OR REPLACE PUBLIC SYNONYM WSR$_LATCH         FOR SYS.WSR_LATCH
/
CREATE OR REPLACE PUBLIC SYNONYM WSR$_DBA_SEGMENTS  FOR SYS.WSR_DBA_SEGMENTS
/
CREATE OR REPLACE PUBLIC SYNONYM WRM$_WR_CONTROL    FOR SYS.WSR_CONTROL
/
CREATE OR REPLACE PUBLIC SYNONYM WRM$_SNAPSHOT      FOR SYS.WSR_SNAPSHOT
/
CREATE OR REPLACE PUBLIC SYNONYM WRH$_SYSTEM_EVENT  FOR SYS.WSR_SYSTEM_EVENT
/
CREATE OR REPLACE PUBLIC SYNONYM WRH$_SYSTEM        FOR SYS.WSR_SYSTEM
/
CREATE OR REPLACE PUBLIC SYNONYM WRH$_SYSSTAT       FOR SYS.WSR_SYS_STAT
/
CREATE OR REPLACE PUBLIC SYNONYM WRH$_SQLAREA       FOR SYS.WSR_SQLAREA
/
CREATE OR REPLACE PUBLIC SYNONYM WRH$_PARAMETER     FOR SYS.WSR_PARAMETER
/ 
CREATE OR REPLACE PUBLIC SYNONYM DBA_HIST_WR_CONTROL   FOR SYS.ADM_HIST_WR_CONTROL
/    
CREATE OR REPLACE PUBLIC SYNONYM DBA_HIST_SNAPSHOT     FOR SYS.ADM_HIST_SNAPSHOT
/ 
CREATE OR REPLACE PUBLIC SYNONYM DBA_HIST_SYSSTAT      FOR SYS.ADM_HIST_SYSSTAT
/
CREATE OR REPLACE PUBLIC SYNONYM DBA_HIST_SYSTEM       FOR SYS.ADM_HIST_SYSTEM
/     
CREATE OR REPLACE PUBLIC SYNONYM DBA_HIST_SYSTEM_EVENT FOR SYS.ADM_HIST_SYSTEM_EVENT
/ 
CREATE OR REPLACE PUBLIC SYNONYM DBA_HIST_SQLAREA      FOR SYS.ADM_HIST_SQLAREA
/        
CREATE OR REPLACE PUBLIC SYNONYM DBA_HIST_PARAMETER    FOR SYS.ADM_HIST_PARAMETER
/       
CREATE OR REPLACE PUBLIC SYNONYM DBA_HIST_WAITSTAT     FOR SYS.ADM_HIST_WAITSTAT
/         
CREATE OR REPLACE PUBLIC SYNONYM DBA_HIST_LATCH        FOR SYS.ADM_HIST_LATCH
/         
CREATE OR REPLACE PUBLIC SYNONYM DBA_HIST_LIBRARYCACHE FOR SYS.ADM_HIST_LIBRARYCACHE
/           
CREATE OR REPLACE PUBLIC SYNONYM DBA_HIST_SEGMENT      FOR SYS.ADM_HIST_SEGMENT
/        
CREATE OR REPLACE PUBLIC SYNONYM DBA_HIST_DBASEGMENTS  FOR SYS.ADM_HIST_DBASEGMENTS
/      
CREATE OR REPLACE PUBLIC SYNONYM DBA_HIST_SLOWSQL      FOR SYS.ADM_HIST_SLOWSQL
/    
GRANT SELECT ON USER_JOBS TO PUBLIC
/
CREATE OR REPLACE SYNONYM SYS.BACKUP_SET$                FOR SYS.SYS_BACKUP_SETS
/
CREATE OR REPLACE SYNONYM SYS.COLUMN$                    FOR SYS.SYS_COLUMNS
/
CREATE OR REPLACE SYNONYM SYS.COMMENT$                   FOR SYS.SYS_COMMENTS
/
CREATE OR REPLACE SYNONYM SYS.CONSDEF$                   FOR SYS.SYS_CONSTRAINT_DEFS
/
CREATE OR REPLACE SYNONYM SYS.DATA_NODES$                FOR SYS.SYS_DATA_NODES
/
CREATE OR REPLACE SYNONYM SYS.DBA_EXP$TBL_ORDER          FOR SYS.EXP_TAB_ORDERS
/
CREATE OR REPLACE SYNONYM SYS.DBA_EXP$TBL_RELATIONS      FOR SYS.EXP_TAB_RELATIONS
/
CREATE OR REPLACE SYNONYM SYS.DEPENDENCY$                FOR SYS.SYS_DEPENDENCIES
/
CREATE OR REPLACE SYNONYM SYS.DUAL                       FOR SYS.SYS_DUMMY
/
CREATE OR REPLACE SYNONYM SYS.EXTERNAL$                  FOR SYS.SYS_EXTERNAL_TABLES
/
CREATE OR REPLACE SYNONYM SYS.GARBAGE_SEGMENT$           FOR SYS.SYS_GARBAGE_SEGMENTS
/
CREATE OR REPLACE SYNONYM SYS.HIST_HEAD$                 FOR SYS.SYS_HISTGRAM_ABSTR
/
CREATE OR REPLACE SYNONYM SYS.HISTGRAM$                  FOR SYS.SYS_HISTGRAM
/
CREATE OR REPLACE SYNONYM SYS.INDEX$                     FOR SYS.SYS_INDEXES
/
CREATE OR REPLACE SYNONYM SYS.INDEXPART$                 FOR SYS.SYS_INDEX_PARTS
/
CREATE OR REPLACE SYNONYM SYS.JOB$                       FOR SYS.SYS_JOBS
/
CREATE OR REPLACE SYNONYM SYS.LINK$                      FOR SYS.SYS_LINKS
/
CREATE OR REPLACE SYNONYM SYS.LOB$                       FOR SYS.SYS_LOBS
/
CREATE OR REPLACE SYNONYM SYS.LOBPART$                   FOR SYS.SYS_LOB_PARTS
/
CREATE OR REPLACE SYNONYM SYS.LOGIC_REP$                 FOR SYS.SYS_LOGIC_REPL
/
CREATE OR REPLACE SYNONYM SYS.MON_MODS_ALL$              FOR SYS.SYS_DML_STATS
/
CREATE OR REPLACE SYNONYM SYS.OBJECT_PRIVS$              FOR SYS.SYS_OBJECT_PRIVS
/
CREATE OR REPLACE SYNONYM SYS.PARTCOLUMN$                FOR SYS.SYS_PART_COLUMNS
/
CREATE OR REPLACE SYNONYM SYS.PARTOBJECT$                FOR SYS.SYS_PART_OBJECTS
/
CREATE OR REPLACE SYNONYM SYS.PARTSTORE$                 FOR SYS.SYS_PART_STORES
/
CREATE OR REPLACE SYNONYM SYS.PENDING_TRANS$             FOR SYS.SYS_PENDING_TRANS
/
CREATE OR REPLACE SYNONYM SYS.PROC$                      FOR SYS.SYS_PROCS
/
CREATE OR REPLACE SYNONYM SYS.PROC_ARGS$                 FOR SYS.SYS_PROC_ARGS
/
CREATE OR REPLACE SYNONYM SYS.PROFILE$                   FOR SYS.SYS_PROFILE
/
CREATE OR REPLACE SYNONYM SYS.RECYCLEBIN$                FOR SYS.SYS_RECYCLEBIN
/
CREATE OR REPLACE SYNONYM SYS.ROLES$                     FOR SYS.SYS_ROLES
/
CREATE OR REPLACE SYNONYM SYS.SEQUENCE$                  FOR SYS.SYS_SEQUENCES
/
CREATE OR REPLACE SYNONYM SYS.SHADOW_INDEX$              FOR SYS.SYS_SHADOW_INDEXES
/
CREATE OR REPLACE SYNONYM SYS.SHADOW_INDEXPART$          FOR SYS.SYS_SHADOW_INDEX_PARTS
/
CREATE OR REPLACE SYNONYM SYS.SYNONYM$                   FOR SYS.SYS_SYNONYMS
/
CREATE OR REPLACE SYNONYM SYS.SYS_PRIVS$                 FOR SYS.SYS_PRIVS
/
CREATE OR REPLACE SYNONYM SYS.TABLE$                     FOR SYS.SYS_TABLES
/
CREATE OR REPLACE SYNONYM SYS.TABLEPART$                 FOR SYS.SYS_TABLE_PARTS
/
CREATE OR REPLACE SYNONYM SYS.TMP_SEG_STAT$              FOR SYS.SYS_TMP_SEG_STATS
/
CREATE OR REPLACE SYNONYM SYS.USER$                      FOR SYS.SYS_USERS
/
CREATE OR REPLACE SYNONYM SYS.USER_HISTORY$              FOR SYS.SYS_USER_HISTORY
/
CREATE OR REPLACE SYNONYM SYS.USER_ROLES$                FOR SYS.SYS_USER_ROLES
/
CREATE OR REPLACE SYNONYM SYS.VIEW$                      FOR SYS.SYS_VIEWS
/
CREATE OR REPLACE SYNONYM SYS.VIEWCOL$                   FOR SYS.SYS_VIEW_COLS
/
CREATE OR REPLACE SYNONYM SYS.SQL_MAP$                   FOR SYS.SYS_SQL_MAPS
/
CREATE OR REPLACE SYNONYM SYS.AUD$                     FOR SYS.SYS_AUDIT
/
CREATE OR REPLACE PUBLIC SYNONYM  ALL_CONS_COLUMNS      FOR SYS.ALL_CONS_COLUMNS
/
GRANT SELECT ON ALL_CONS_COLUMNS TO PUBLIC
/
CREATE OR REPLACE PUBLIC SYNONYM  DBA_RSRC_PLANS           FOR SYS.ADM_RSRC_PLANS
/
CREATE OR REPLACE PUBLIC SYNONYM  DBA_RSRC_CONSUMER_GROUPS FOR SYS.ADM_RSRC_CONTROL_GROUPS
/
CREATE OR REPLACE PUBLIC SYNONYM  DBA_RSRC_GROUP_MAPPINGS  FOR SYS.ADM_RSRC_GROUP_MAPPINGS
/
CREATE OR REPLACE PUBLIC SYNONYM  DBA_RSRC_PLAN_DIRECTIVES FOR SYS.ADM_RSRC_PLAN_RULES
/
CREATE OR REPLACE PUBLIC SYNONYM  V$RSRC_CONSUMER_GROUP    FOR SYS.DV_RSRC_CONTROL_GROUP
/
CREATE OR REPLACE SYNONYM SYS.DIRECTORY$                      FOR SYS.SYS_DIRECTORIES
/
CREATE OR REPLACE PUBLIC SYNONYM USER_POLICIES FOR SYS.USER_POLICIES
/
GRANT SELECT ON USER_POLICIES TO PUBLIC
/
CREATE OR REPLACE PUBLIC SYNONYM DBA_POLICIES  FOR SYS.DBA_POLICIES
/
CREATE OR REPLACE PUBLIC SYNONYM  DBA_REDACTION_POLICIES   FOR SYS.DBA_REDACTION_POLICIES 
/
CREATE OR REPLACE PUBLIC SYNONYM  USER_REDACTION_POLICIES    FOR SYS.USER_REDACTION_POLICIES
/

COMMIT
/