Oracle: Referenzen zwischen Objekten finden
Wer kennt das nicht? Bei der Entwicklung neuer Funktionalitäten innerhalb einer Datenbank oder beim Refactoring stößt man auf Code, den man schon eine Weile nicht mehr angefasst hat. So fragt man sich dann zum Beispiel wo dieser eine View noch verwendet wird, oder welchen Zweck ein Package erfüllt.
Normalerweise sollte sämtlicher Code, auch Datenbankskripte, kommentiert sein und darüber Aufschluss geben wofür die programmierten Objekte dienen. Doch es kommt in der Praxis allzu häufig vor, dass man vor “fremdem” Code sitzt oder eine alte Software übernehmen oder analysieren muss.
In diesen Situationen, wenn die Kommentare mal wieder dürftig oder nicht vorhanden sind, hilft bei Oracle Datenbanken die tabelle
user_dependencies
. Dort findet man Informationen über die Beziehungen zwischen allen Datenbankobjekten, also welche Objekte werden von welchen anderen Objekten verwendet.
Beispiele zur Verwendung der Tabelle user_dependencies
– Zeige alle Beziehungen zwischen allen Datenbank-Objekten (Packages, Views, Tables, etc.).
SELECT *
FROM user_dependencies
;
– Wenn man an einer Tabelle Änderungen vorgenommen hat und dann alle davon betroffenen Views und/oder Packages ermitteln will, hilft diese Abfrage.
SELECT *
FROM user_dependencies
WHERE UPPER(referenced_name) LIKE UPPER('Tabellenname')
;
– Zeige alle Packages die auf eine bestimmte Tabelle zugreifen (und dort evtl. Daten verändern)
SELECT *
FROM user_dependencies
WHERE
UPPER(referenced_name) LIKE UPPER('Tabellenname')
AND type = 'PACKAGE BODY'
;
– Zeige alle Views, die wiederum auf andere Views verweisen
SELECT *
FROM user_dependencies
WHERE referenced_type = 'VIEW'
ORDER BY name
;
– Zeige alle Referenzen zwischen allen Views. Falls es bei diesem Select zu einem Fehler kommt, gibt es vermutlich Endlosschleifen durch Kreisverweise.
SELECT name || SYS_CONNECT_BY_PATH(referenced_name, ' / ') "ABHAENGIGKEITS_PFAD", dep.*
FROM user_dependencies dep WHERE referenced_type = 'VIEW'
START WITH type = 'VIEW'
CONNECT BY PRIOR referenced_name = name
ORDER BY name
;
Autorin: Friederike
Tags: Datenbanken