Skip to content

Instantly share code, notes, and snippets.

@peterneubauer
Last active August 29, 2015 13:55
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save peterneubauer/8730566 to your computer and use it in GitHub Desktop.
Save peterneubauer/8730566 to your computer and use it in GitHub Desktop.

This gist is a small subset of objects in the the Oracle database, and their dependencies on the object, SYS.DBA_OBJECTS.

When database objects are created, they create a tree structure. It’s possible to have many root nodes to a single child node, such as a stored procedure that reads six or more tables.

When creating objects such as functions or procedures, all the parent objects must first be created and valid. If a single object become invalidated, all child objects also become invalidated.

Queries to the data dictionary view, DBA_OBJECTS, will show dependencies, however, the dependencies are only shown only one level up or down. Another problem with such queries, is that it’s often possible to see the same object listed many times in the output. An example could be an error handling procedure that is called by all other procedures.

Thus, determining some things is problematic. One is determining the order of operations to create the objects. Another question, if this object is invalid, what are all generations of its parent objects, in order to revalidat them all. And, if we were to drop this object, what are all generations its child objects that would become invalid?

The underlying issue is that output from SQL shows rows and columns. However, the actual structure of the objects is a tree, exactly the structure that a graph database models.

Setup

A gist of a small subset of objects in the the Oracle database. Database objects are created one by one in a tree structure, exactly what a graph database models. Useful to determine impacts of the loss of one object. And the order of operations to create the objects.

CREATE ( _3192{owner : 'SYS' , object_name : 'DBA_OBJECTS' , object_type :  'VIEW' , object_id   :  3192 })
CREATE ( _19 {owner : 'SYS' , object_name : 'IND$' , object_type :  'TABLE' , object_id   :  19 })
CREATE ( _22 {owner : 'SYS' , object_name : 'USER$' , object_type :  'TABLE' , object_id   :  22 })
CREATE ( _134 {owner : 'SYS' , object_name : 'LINK$' , object_type :  'TABLE' , object_id   :  134 })
CREATE ( _951 {owner : 'SYS' , object_name : 'SUM$' , object_type :  'TABLE' , object_id   :  951 })
CREATE ( _3070 {owner : 'SYS' , object_name : '_CURRENT_EDITION_OBJ' , object_type :  'VIEW' , object_id        :  3070 })

CREATE ( _71903 {   owner : 'APEX_030200' , object_name : 'WWV_FLOW_BUILDER' , object_type :       'PACKAGE BODY' , object_id   :       71903 })
CREATE ( _71931 {   owner : 'APEX_030200' , object_name : 'WWV_FLOW_CUSTOM_AUTH_STD' , object_type :       'PACKAGE BODY' , object_id   :       71931 })
CREATE ( _71939 {   owner : 'APEX_030200' , object_name : 'WWV_FLOW_HINT' , object_type :  'PACKAGE BODY' , object_id   :  71939 })
CREATE ( _73104 {   owner : 'APEX_030200' , object_name : 'WWV_FLOW_INSTALL_WIZARD' , object_type :  'PACKAGE BODY' , object_id   :  73104 })
CREATE ( _73081 {   owner : 'APEX_030200' , object_name : 'WWV_FLOW_LOAD_EXCEL_DATA' , object_type :       'PACKAGE BODY' , object_id   :       73081 })
CREATE ( _73078 {   owner : 'APEX_030200' , object_name : 'WWV_FLOW_QUERY_BUILDER' , object_type :  'PACKAGE BODY' , object_id   :  73078 })
CREATE ( _71932 {   owner : 'APEX_030200' , object_name : 'WWV_FLOW_SW_API' , object_type :  'PACKAGE BODY' , object_id   :  71932 })
CREATE ( _73079 {   owner : 'APEX_030200' , object_name : 'WWV_FLOW_SW_OBJECT_FEED' , object_type :  'PACKAGE BODY' , object_id   :  73079 })
CREATE ( _71895 {   owner : 'APEX_030200' , object_name : 'WWV_FLOW_SW_UTIL' , object_type :       'PACKAGE BODY' , object_id   :       71895 })
CREATE ( _73086 {   owner : 'APEX_030200' , object_name : 'WWV_FLOW_TABLE_DRILL' , object_type :  'PACKAGE BODY' , object_id        :  73086 })
CREATE ( _71200 {   owner : 'APEX_030200' , object_name : 'WWV_FLOW_UPGRADE' , object_type :       'PACKAGE BODY' , object_id   :       71200 })
CREATE ( _71927 {   owner : 'APEX_030200' , object_name : 'WWV_FLOW_UPGRADE_REPORT' , object_type :  'PACKAGE BODY' , object_id   :  71927 })
CREATE ( _71917 {   owner : 'APEX_030200' , object_name : 'WWV_FLOW_WIZARD_API' , object_type :  'PACKAGE BODY' , object_id       :  71917 })
CREATE ( _73098 {   owner : 'APEX_030200' , object_name : 'WWV_FLOW_WIZ_CONFIRM' , object_type :  'PACKAGE BODY' , object_id        :  73098 })
CREATE ( _73029 {   owner : 'APEX_030200' , object_name : 'WWV_MIG_FRM_UTILITIES' , object_type :  'PACKAGE BODY' , object_id   :  73029 })

CREATE ( _55732 {   owner : 'CTXSYS' , object_name : 'DRIACC' , object_type :  'PACKAGE BODY' , object_id   :  55732 })
CREATE ( _55733 {   owner : 'CTXSYS' , object_name : 'DRICON' , object_type :  'PACKAGE BODY' , object_id   :  55733 })
CREATE ( _55758 {   owner : 'CTXSYS' , object_name : 'DRIUTL' , object_type :  'PACKAGE BODY' , object_id   :  55758 })
CREATE ( _65353 {   owner : 'OLAPSYS' , object_name : 'CWM2_OLAP_UTILITY' , object_type :  'PACKAGE BODY' , object_id   :  65353 })
CREATE ( _3193 {   owner : 'PUBLIC' , object_name : 'DBA_OBJECTS' , object_type :  'SYNONYM' , object_id   :  3193 })

CREATE ( _64023 {   owner : 'SYS' , object_name : 'APS_VALIDATE' , object_type :  'PROCEDURE' , object_id   :  64023 })
CREATE ( _3194 {   owner : 'SYS' , object_name : 'DBA_INVALID_OBJECTS' , object_type :  'VIEW' , object_id       :  3194 })
CREATE ( _11860 {   owner : 'SYS' , object_name : 'DBMSOBJG' , object_type :       'PACKAGE BODY' , object_id   :       11860 })
CREATE ( _11657 {   owner : 'SYS' , object_name : 'DBMS_AQADM_SYS' , object_type :  'PACKAGE BODY' , object_id   :  11567 })
CREATE ( _11544 {   owner : 'SYS' , object_name : 'DBMS_AQ_SYS_EXP_INTERNAL' , object_type :       'PACKAGE BODY' , object_id   :       11544 })
CREATE ( _11562 {   owner : 'SYS' , object_name : 'DBMS_AQ_SYS_IMP_INTERNAL' , object_type :       'PACKAGE BODY' , object_id   :       11562 })
CREATE ( _11964 {   owner : 'SYS' , object_name : 'DBMS_CAPTURE_ADM_INTERNAL' , object_type :  'PACKAGE BODY' , object_id   :  11964 })
CREATE ( _12130 {   owner : 'SYS' , object_name : 'DBMS_COMPRESSION' , object_type :       'PACKAGE BODY' , object_id   :       12130 })
CREATE ( _8575 {   owner : 'SYS' , object_name : 'DBMS_COMPRESSION' , object_type :       'PACKAGE' , object_id       :  8575 })
CREATE ( _64100 {   owner : 'SYS' , object_name : 'DBMS_CUBE_ADVISE_SEC' , object_type :  'PACKAGE BODY' , object_id        :  64100 })
CREATE ( _11839 {   owner : 'SYS' , object_name : 'DBMS_DEFERGEN_UTIL' , object_type :  'PACKAGE BODY' , object_id   :  11839 })
CREATE ( _51774 {   owner : 'SYS' , object_name : 'DBMS_JAVA' , object_type :  'PACKAGE BODY' , object_id   :  51774 })
CREATE ( _11975 {   owner : 'SYS' , object_name : 'DBMS_LOGREP_EXP' , object_type :  'PACKAGE BODY' , object_id   :  11975 })
CREATE ( _11548 {   owner : 'SYS' , object_name : 'DBMS_PRVTAQIM' , object_type :  'PACKAGE BODY' , object_id   :  11548 })
CREATE ( _11547 {   owner : 'SYS' , object_name : 'DBMS_PRVTAQIS' , object_type :  'PACKAGE BODY' , object_id   :  11547 })
CREATE ( _57060 {   owner : 'SYS' , object_name : 'DBMS_REGXDB' , object_type :  'PACKAGE BODY' , object_id       :  57060 })
CREATE ( _11869 {   owner : 'SYS' , object_name : 'DBMS_REPCAT_COMMON_UTL' , object_type :  'PACKAGE BODY' , object_id   :  11869 })
CREATE ( _11909 {   owner : 'SYS' , object_name : 'DBMS_REPCAT_MIG_INTERNAL' , object_type :       'PACKAGE BODY' , object_id   :       11909 })
CREATE ( _11865 {   owner : 'SYS' , object_name : 'DBMS_REPCAT_OUTPUT' , object_type :  'PACKAGE BODY' , object_id   :  11865 })
CREATE ( _11915 {   owner : 'SYS' , object_name : 'DBMS_REPCAT_UTL' , object_type :  'PACKAGE BODY' , object_id   :  11915 })
CREATE ( _11905 {   owner : 'SYS' , object_name : 'DBMS_REPCAT_UTL3' , object_type :       'PACKAGE BODY' , object_id   :       11905 })
CREATE ( _11881 {   owner : 'SYS' , object_name : 'DBMS_SNAPSHOT_UTL' , object_type :  'PACKAGE BODY' , object_id   :  11881 })
CREATE ( _11885 {   owner : 'SYS' , object_name : 'DBMS_SNAP_INTERNAL' , object_type :  'PACKAGE BODY' , object_id   :  11885 })
CREATE ( _12025 {   owner : 'SYS' , object_name : 'DBMS_SPACE' , object_type :  'PACKAGE BODY' , object_id   :  12025 })
CREATE ( _12129 {   owner : 'SYS' , object_name : 'PRVT_COMPRESSION' , object_type :       'PACKAGE BODY' , object_id   :       12129 })
CREATE ( _5075 {   owner : 'SYS' , object_name : 'SM_$VERSION' , object_type :  'VIEW' , object_id       :  5075 })
CREATE ( _64645 {   owner : 'SYS' , object_name : 'XOQ_VALIDATE' , object_type :  'PROCEDURE' , object_id   :  64645 })


CREATE ( _13458 {   owner : 'WMSYS' , object_name : 'LTDTRG' , object_type :       'PACKAGE BODY' , object_id   :       13458 })
CREATE ( _13453 {   owner : 'WMSYS' , object_name : 'LTUTIL' , object_type :       'PACKAGE BODY' , object_id   :       13453 })
CREATE ( _13460 {   owner : 'WMSYS' , object_name : 'WM_DDL_UTIL' , object_type :  'PACKAGE BODY' , object_id   :  13460 })


CREATE UNIQUE (_3192)- [ :PARENT_OF  ]-> (_3193)
CREATE UNIQUE (_3192)- [ :PARENT_OF  ]-> (_3194)
CREATE UNIQUE (_3192)- [ :PARENT_OF  ]-> (_5075)
CREATE UNIQUE (_3192)- [ :PARENT_OF  ]-> (_8575)
CREATE UNIQUE (_3192)- [ :PARENT_OF  ]-> (_11544)
CREATE UNIQUE (_3192)- [ :PARENT_OF  ]-> (_11548)
CREATE UNIQUE (_3192)- [ :PARENT_OF  ]-> (_11562)
CREATE UNIQUE (_3192)- [ :PARENT_OF  ]-> (_11567)
CREATE UNIQUE (_3192)- [ :PARENT_OF  ]-> (_11839)
CREATE UNIQUE (_3192)- [ :PARENT_OF  ]-> (_11860)
CREATE UNIQUE (_3192)- [ :PARENT_OF  ]-> (_11865)
CREATE UNIQUE (_3192)- [ :PARENT_OF  ]-> (_11869)
CREATE UNIQUE (_3192)- [ :PARENT_OF  ]-> (_11881)
CREATE UNIQUE (_3192)- [ :PARENT_OF  ]-> (_11885)
CREATE UNIQUE (_3192)- [ :PARENT_OF  ]-> (_11905)
CREATE UNIQUE (_3192)- [ :PARENT_OF  ]-> (_11909)
CREATE UNIQUE (_3192)- [ :PARENT_OF  ]-> (_11915)
CREATE UNIQUE (_3192)- [ :PARENT_OF  ]-> (_11964)
CREATE UNIQUE (_3192)- [ :PARENT_OF  ]-> (_11975)
CREATE UNIQUE (_3192)- [ :PARENT_OF  ]-> (_12025)
CREATE UNIQUE (_3192)- [ :PARENT_OF  ]-> (_12129)
CREATE UNIQUE (_3192)- [ :PARENT_OF  ]-> (_12130)
CREATE UNIQUE (_3192)- [ :PARENT_OF  ]-> (_51774)
CREATE UNIQUE (_3192)- [ :PARENT_OF  ]-> (_55732)
CREATE UNIQUE (_3192)- [ :PARENT_OF  ]-> (_57060)
CREATE UNIQUE (_3192)- [ :PARENT_OF  ]-> (_64023)
CREATE UNIQUE (_3192)- [ :PARENT_OF  ]-> (_64100)
CREATE UNIQUE (_3192)- [ :PARENT_OF  ]-> (_64645)
CREATE UNIQUE (_3192)- [ :PARENT_OF  ]-> (_71200)
CREATE UNIQUE (_3192)- [ :PARENT_OF  ]-> (_71895)
CREATE UNIQUE (_3192)- [ :PARENT_OF  ]-> (_71903)
CREATE UNIQUE (_3192)- [ :PARENT_OF  ]-> (_71917)
CREATE UNIQUE (_3192)- [ :PARENT_OF  ]-> (_71927)
CREATE UNIQUE (_3192)- [ :PARENT_OF  ]-> (_71931)
CREATE UNIQUE (_3192)- [ :PARENT_OF  ]-> (_71932)
CREATE UNIQUE (_3192)- [ :PARENT_OF  ]-> (_71939)
CREATE UNIQUE (_3192)- [ :PARENT_OF  ]-> (_73029)

CREATE UNIQUE (_3192)- [ :PARENT_OF  ]-> (_73078)
CREATE UNIQUE (_3192)- [ :PARENT_OF  ]-> (_73079)
CREATE UNIQUE (_3192)- [ :PARENT_OF  ]-> (_73081)
CREATE UNIQUE (_3192)- [ :PARENT_OF  ]-> (_73086)
CREATE UNIQUE (_3192)- [ :PARENT_OF  ]-> (_73104)
CREATE UNIQUE (_3192)- [ :PARENT_OF  ]-> (_13453)
CREATE UNIQUE (_3192)- [ :PARENT_OF  ]-> (_13458)
CREATE UNIQUE (_3192)- [ :PARENT_OF  ]-> (_13460)
CREATE UNIQUE (_3192)- [ :PARENT_OF  ]-> (_55733)
CREATE UNIQUE (_3192)- [ :PARENT_OF  ]-> (_55758)
CREATE UNIQUE (_3192)- [ :PARENT_OF  ]-> (_65353)

CREATE UNIQUE (_19)- [ :PARENT_OF  ]-> (_3192)
CREATE UNIQUE (_22)- [ :PARENT_OF  ]-> (_3192)
CREATE UNIQUE (_134)- [ :PARENT_OF  ]-> (_3192)
CREATE UNIQUE (_951)- [ :PARENT_OF  ]-> (_3192)
CREATE UNIQUE (_3070)- [ :PARENT_OF  ]-> (_3192)
CREATE UNIQUE (_3192)- [ :PARENT_OF  ]-> (_3193)

Find all the children of SYS.DBA_OBJECTS

MATCH path =  p - [ :PARENT_OF* ] -> c
where    has ( p.object_name )
and p.object_name = 'DBA_OBJECTS'
and p.owner = 'SYS'
return  c

Find all the parents of SYS.DBA_OBJECTS:

MATCH path =  p - [ :PARENT_OF* ] -> c
where    has ( p.object_name )
and c.object_name = 'DBA_OBJECTS'
return   p
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment