Object Dependencies Cross-Reference (dxref.sql)
What This Script Does
Section titled “What This Script Does”This script analyzes object dependencies by:
- Showing which objects depend on other objects
- Displaying both the dependent object and referenced object
- Supporting filtering by owner, object type, and name
- Providing a cross-reference view of database relationships
- Helping understand object interconnections
Script
Section titled “Script”rem dxref.sqlremset linesize 132remttitle 'Object Dependencies by Owner Object'remcol owner format a8 heading 'OWNER'col type format a12 heading 'TYPE'col name format a30 heading 'NAME'col referenced_owner format a8 heading 'XREF|OWNER'col referenced_type format a12 heading 'XREF TYPE'col referenced_name format a30 heading 'XREF NAME'remselect owner, type, name, referenced_owner, referenced_type, referenced_name from sys.dba_dependencies where owner like upper('&owner') and type like upper('&type') and name like upper('&name') order by owner, name, referenced_name;remset linesize 80
SQL> @dxref.sqlEnter value for owner: HREnter value for type: VIEWEnter value for name: %
Parameters
Section titled “Parameters”- owner: Object owner pattern to filter (use % for all)
- type: Object type pattern to filter (use % for all)
- name: Object name pattern to filter (use % for all)
Required Privileges
Section titled “Required Privileges”- SELECT on SYS.DBA_DEPENDENCIES
Sample Output
Section titled “Sample Output”Object Dependencies by Owner Object
OWNER TYPE NAME XREF XREF TYPE XREF NAME OWNER-------- ------------ ------------------------------ -------- ------------ ------------------------------HR VIEW EMP_DETAILS_VIEW HR TABLE EMPLOYEESHR VIEW EMP_DETAILS_VIEW HR TABLE DEPARTMENTSHR VIEW EMP_DETAILS_VIEW HR TABLE JOBS
HR PROCEDURE UPDATE_SALARY HR TABLE EMPLOYEESHR PROCEDURE UPDATE_SALARY HR TABLE SALARY_HISTORYHR PROCEDURE UPDATE_SALARY SYS PACKAGE DBMS_OUTPUT
HR PACKAGE BODY HR_UTILS HR PACKAGE HR_UTILSHR PACKAGE BODY HR_UTILS HR TABLE EMPLOYEESHR PACKAGE BODY HR_UTILS HR PROCEDURE UPDATE_SALARY
SCOTT TRIGGER EMP_AUDIT_TRG SCOTT TABLE EMPSCOTT TRIGGER EMP_AUDIT_TRG SCOTT TABLE EMP_AUDIT
Key Output Columns
Section titled “Key Output Columns”- OWNER: Schema that owns the dependent object
- TYPE: Type of the dependent object (VIEW, PROCEDURE, etc.)
- NAME: Name of the dependent object
- XREF OWNER: Schema that owns the referenced object
- XREF TYPE: Type of the referenced object
- XREF NAME: Name of the referenced object
Understanding Object Dependencies
Section titled “Understanding Object Dependencies”Common Dependency Types
Section titled “Common Dependency Types”Tables → Objects
Section titled “Tables → Objects”- Views: Built on tables
- Triggers: Attached to tables
- Procedures: Access table data
- Functions: Query tables
Packages → Objects
Section titled “Packages → Objects”- Package Bodies: Depend on package specs
- Procedures: Call package functions
- Views: Use package functions
System Dependencies
Section titled “System Dependencies”- SYS objects: Standard Oracle packages
- Built-in functions: SQL and PL/SQL functions
- Data types: User-defined types
Common Use Cases
Section titled “Common Use Cases”-
Impact Analysis
- Assess changes before implementation
- Identify affected objects
- Plan deployment order
-
Documentation
- Create system architecture diagrams
- Document data flows
- Map application components
-
Maintenance Planning
- Plan object modifications
- Identify compilation order
- Schedule maintenance windows
-
Troubleshooting
- Find broken dependencies
- Resolve invalid objects
- Debug compilation errors
Advanced Analysis
Section titled “Advanced Analysis”Find objects with no dependencies:
Section titled “Find objects with no dependencies:”SELECT owner, object_name, object_typeFROM dba_objectsWHERE (owner, object_name) NOT IN ( SELECT owner, name FROM dba_dependencies)AND owner NOT IN ('SYS','SYSTEM')AND object_type IN ('TABLE','VIEW','PROCEDURE','FUNCTION')ORDER BY owner, object_name;
Show dependency hierarchy:
Section titled “Show dependency hierarchy:”-- Find all objects that depend on EMPLOYEES tableSELECT LEVEL, LPAD(' ', (LEVEL-1)*2) || owner||'.'||name dependency_chainFROM dba_dependenciesSTART WITH referenced_owner = 'HR' AND referenced_name = 'EMPLOYEES'CONNECT BY PRIOR owner = referenced_owner AND PRIOR name = referenced_nameORDER SIBLINGS BY owner, name;
Count dependencies by object:
Section titled “Count dependencies by object:”SELECT referenced_owner, referenced_name, referenced_type, COUNT(*) dependent_countFROM dba_dependenciesWHERE referenced_owner NOT IN ('SYS','SYSTEM')GROUP BY referenced_owner, referenced_name, referenced_typeHAVING COUNT(*) > 5ORDER BY dependent_count DESC;
Dependency Management
Section titled “Dependency Management”Compilation Order
Section titled “Compilation Order”When recompiling objects, compile in dependency order:
- Tables (base objects)
- Types and Type Bodies
- Package Specs
- Package Bodies
- Procedures/Functions
- Views
- Triggers
Safe Modification Process
Section titled “Safe Modification Process”-- 1. Identify dependenciesSELECT owner, name, typeFROM dba_dependenciesWHERE referenced_owner = 'HR'AND referenced_name = 'EMPLOYEES';
-- 2. Plan modification impact-- 3. Modify base object-- 4. Recompile dependent objects
Breaking Dependencies
Section titled “Breaking Dependencies”Drop Cascade Options
Section titled “Drop Cascade Options”-- Drop table and dependent objectsDROP TABLE hr.employees CASCADE CONSTRAINTS;
-- Drop with dependency checkingSELECT 'Cannot drop - dependencies exist'FROM dba_dependenciesWHERE referenced_owner = 'HR'AND referenced_name = 'EMPLOYEES'AND ROWNUM = 1;
Handling Invalid Objects
Section titled “Handling Invalid Objects”-- Find invalid objectsSELECT owner, object_name, object_typeFROM dba_objectsWHERE status = 'INVALID'ORDER BY owner, object_type, object_name;
-- Recompile invalid objectsEXEC DBMS_UTILITY.COMPILE_SCHEMA('HR');
Performance Considerations
Section titled “Performance Considerations”- DBA_DEPENDENCIES can be large in complex systems
- Use filters to limit result sets
- Index on owner/name columns helps performance
- Consider using tools for complex dependency analysis