11 11 Verwaltung von Abhängigkeiten
ZieleAm Ende dieser Lektion verfügen Sie über die Am Ende dieser Lektion verfügen Sie über die folgenden Kenntnisse:folgenden Kenntnisse:• Überwachen prozeduraler Abhängigkeiten• Effekte von Änderungen eines DB-Objekts auf
gespeicherte Prozeduren und Funktionen• Verwaltung prozeduraler Abhängigkeiten
Verständnis der Abhängigkeiten
View
Procedure
Function
Package Specification
Package Body
Database Trigger
Table
View
Sequence
Synonym
Procedure
Function
Package Specification
Referenzierte ObjekteReferenzierte ObjekteAbhängige ObjekteAbhängige Objekte
Abhängigkeiten
AbhängigesAbhängigesObjektObjekt
xxxxxxxxxxxxxxvvvvvvvvvvvvvvxxxxxxxxxxxxxxvvvvvvvvvvvvvvxxxxxxxxxxxxxxvvvvvvvvvvvvvvxxxxxxxxxxxxxxvvvvvvvvvvvvvvxxxxxxxxxxxxxxvvvvvvvvvvvvvv
ProzedurProzedurView/View/
ProzedurProzedur
DirekteDirekteAbhängigkeitAbhängigkeit
Abhängiges undAbhängiges undreferenziertesreferenziertes
ObjektObjekt
ReferenziertesReferenziertesObjektObjekt
TabelleTabelle
DirekteDirekteAbhängigkeitAbhängigkeit
IndirekteIndirekteAbhängigkeitAbhängigkeit
Lokale Abhängigkeiten
xxxxxxxxxxxxxxvvvvvvvvvvvvvvxxxxxxxxxxxxxxvvvvvvvvvvvvvvxxxxxxxxxxxxxxvvvvvvvvvvvvvvxxxxxxxxxxxxxxvvvvvvvvvvvvvvxxxxxxxxxxxxxxvvvvvvvvvvvvvv
ProzedurProzedur ViewView
INVALIDINVALID INVALIDINVALID INVALIDINVALID
Lokale ReferenzLokale ReferenzDefinition geändertDefinition geändert
ProzedurProzedur TabelleTabelle
vvvvvvvvvvvvvvxxxxxxxxxxxxxxvvvvvvvvvvvvvvxxxxxxxxxxxxxxvvvvvvvvvvvvvvxxxxxxxxxxxxxxvvvvvvvvvvvvvv
xxxxxxxxxxxxxxvvvvvvvvvvvvvvxxxxxxxxxxxxxxvvvvvvvvvvvvvvxxxxxxxxxxxxxxvvvvvvvvvvvvvvxxxxxxxxxxxxxxvvvvvvvvvvvvvvxxxxxxxxxxxxxxvvvvvvvvvvvvvv
ProzedurProzedur ViewView
VALIDVALID INVALIDINVALID INVALIDINVALID
Fern-ReferenzFern-Referenz
Definition geändertDefinition geändert
ProzedurProzedur TabelleTabelle
vvvvvvvvvvvvvvxxxxxxxxxxxxxxvvvvvvvvvvvvvvxxxxxxxxxxxxxxvvvvvvvvvvvvvvxxxxxxxxxxxxxxvvvvvvvvvvvvvv
NetzwerkNetzwerk
Abhängigkeiten von Ferndatenbanken
xxxxxxxxxxxxxxxxxxxxxvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxvvvvvvvvvvvvvvvvvvvvv
xxxxxxxxxxxxxxxxxxxxxvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxvvvvvvvvvvvvvvvvvvvvv
ProzedurProzedurADD_EMP ADD_EMP
ProzedurProzedurQUERY_EMPQUERY_EMP
Tabelle EMPTabelle EMP
View NEW_EMPView NEW_EMPEMPNO ENAME 7839 KING 7698 BLAKE 7782 CLARK 7566 JONES
EMPNO ENAME HIREDATE JOB 7839 KING 17-NOV-81 PRESIDENT 7698 BLAKE 01-MAY-81 MANAGER 7782 CLARK 09-JUN-81 MANAGER 7566 JONES 02-APR-81 MANAGER
Szenario lokaler Abhängigkeiten
SQL> SELECT name, type, referenced_name, referenced_type 2 FROM user_dependencies 3 WHERE referenced_name IN ('EMP' , 'NEW_EMP' );
NAME TYPE REFERENCED_NAME REFERENCED_TYPE--------- ---------- --------------- ---------------QUERY_EMP PROCEDURE EMP TABLEADD_EMP PROCEDURE NEW_EMP VIEWNEW_EMP VIEW EMP TABLE
Anzeige direkter Abhängigkeiten aus USER_DEPENDENCIES
SQL> @UTLDTREE
Anzeige direkter und indirekter Abhängigkeiten
SQL> EXECUTE deptree_fill (‘TABLE’, ‘SCOTT’, ‘EMP’) PL/SQL procedure successfully completed.PL/SQL procedure successfully completed.
1. Ausführen des Skripts UTLDTREE.SQL1. Ausführen des Skripts UTLDTREE.SQL
2. Ausführen der Prozedur DEPTREE_FILL2. Ausführen der Prozedur DEPTREE_FILL
SQL> SELECT nested_level, type, name 2 FROM deptree 3 ORDER BY seq#;
NESTED_LEVEL TYPE NAME ------------ --------- ----
0 TABLE EMP1 VIEW NEW_EMP2 PROCEDURE ADD_EMP1 PROCEDURE QUERY_EMP
SQL> SELECT * 2 FROM ideptree;
DEPENDENCIES----------------------------------------------------TABLE SCOTT:EMP VIEW SCOTT.NEW_EMP PROCEDURE SCOTT.ADD_EMP PROCEDURE SCOTT.QUERY_EMP
Views DEPTREE und IDEPTREE
Tabelle EMPTabelle EMP
Prozedur Prozedur REDUCE_SALREDUCE_SAL
Prozedur Prozedur RAISE_SALRAISE_SAL
Ein weiteres Szenario lokaler Abhängigkeiten
EMPNO ENAME HIREDATE JOB 7839 KING 07-NOV-81 PRESIDENT 7698 BLAKE 01-MAY-81 MANAGER 7782 CLARK 09-JUN-81 MANAGER 7566 JONES 02-APR-81 MANAGER
xxxxxxxxxxxxxxxxxxxxxvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxvvvvvvvvvvvvvvvvvvvvv
xxxxxxxxxxxxxxxxxxxxxvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxvvvvvvvvvvvvvvvvvvvvv
TabelleTabelleEMPEMP
ProzedurProzedurQUERY_EMPQUERY_EMP
Public Synonym EMPPublic Synonym EMP
XX
Ein Szenario lokaler Namensabhängigkeiten
EMPNO ENAME HIREDATE JOB 7839 KING 17-NOV-81 PRESIDENT 7698 BLAKE 01-MAY-81 MANAGER 7782 CLARK 09-JUN-81 MANAGER 7566 JONES 02-APR-81 MANAGER
EMPNO ENAME HIREDATE JOB 7839 KING 17-NOV-81 PRESIDENT 7698 BLAKE 01-MAY-81 MANAGER 7782 CLARK 09-JUN-81 MANAGER 7566 JONES 02-APR-81 MANAGER
xxxxxxxxxxxxxxxxxxxxxvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxvvvvvvvvvvvvvvvvvvvvv
Abhängigkeiten von Ferndatenbanken
Definition geändertDefinition geändertNetzwerkNetzwerk
xxxxxxxxxxxxxxvvvvvvvvvvvvvvxxxxxxxxxxxxxxvvvvvvvvvvvvvvxxxxxxxxxxxxxxvvvvvvvvvvvvvvxxxxxxxxxxxxxxvvvvvvvvvvvvvvxxxxxxxxxxxxxxvvvvvvvvvvvvvv
ProzedurProzedur ViewView
VALIDVALID INVALIDINVALID INVALIDINVALID
Fern-ReferenzFern-Referenz
ProzedurProzedur TabelleTabelle
vvvvvvvvvvvvvvxxxxxxxxxxxxxxvvvvvvvvvvvvvvxxxxxxxxxxxxxxvvvvvvvvvvvvvvxxxxxxxxxxxxxxvvvvvvvvvvvvvv
Konzepte der Abhängigkeiten von Ferndatenbanken
Fern-Abhängigkeiten werden durch den Fern-Abhängigkeiten werden durch den vom Benutzer gewählten Modus geregelt:vom Benutzer gewählten Modus geregelt:• TIMESTAMP-Prüfungoderoder• SIGNATURE-Prüfung
Parameter für den Modus der Abhängigkeiten von Ferndatenbanken
• Als init.ora-ParameterREMOTE_DEPENDENCIES_MODE = wert• Auf Systemebene
ALTER SYSTEM SET REMOTE_DEPENDENCIES_MODE = wert• Auf Sitzungsebene
ALTER SESSION SET REMOTE_DEPENDENCIES_MODE = wert
xxxxxxxxxxxxxxvvvvvvvvvvvvvvxxxxxxxxxxxxxxvvvvvvvvvvvvvvxxxxxxxxxxxxxxvvvvvvvvvvvvvvxxxxxxxxxxxxxxvvvvvvvvvvvvvvxxxxxxxxxxxxxxvvvvvvvvvvvvvv
ProzedurProzedur ViewView
VALIDVALID INVALIDINVALID INVALIDINVALID
Definition geändertDefinition geändert
ProzedurProzedur TabelleTabelle
vvvvvvvvvvvvvvxxxxxxxxxxxxxxvvvvvvvvvvvvvvxxxxxxxxxxxxxxvvvvvvvvvvvvvvxxxxxxxxxxxxxxvvvvvvvvvvvvvv
NetzwerkNetzwerk
1 2
Abhängigkeiten von Ferndatenbanken und Timestamp-Modus: Szenario
Lokale Prozedur A kompiliert um 9:00
Lokale Prozedur ALokale Prozedur A
VALIDVALID
Fern-Prozedur BFern-Prozedur B
kompiliertkompiliertVALIDVALID
A kompiliertA kompiliert B kompiliertB kompiliert
Prozedur A wird aufgerufen um 10:00 (Prozedur B wurde nicht rekompiliert seit 8:00)
Lokale Prozedur ALokale Prozedur A
VALIDVALID
Fern-Prozedur BFern-Prozedur B
kompiliertkompiliertVALIDVALID
A kompiliertA kompiliert B kompiliertB kompiliert
Zeitstempel-Zeitstempel-vergleichvergleich
Lokale Prozedur ALokale Prozedur A
VALIDVALID
Fern-Prozedur BFern-Prozedur B
kompiliertkompiliertINVALID zur StartzeitINVALID zur Startzeit
A kompiliertA kompiliert B kompiliertB kompiliert
...paßt ...paßt nichtnicht
Zeitstempel-Zeitstempel-vergleich...vergleich...
Prozedur A wird aufgerufen um 12:00(Prozedur B wurde rekompiliert um 11:00 (Lokalzeit) )
Signature Modus
Die Signatur einer Prozedur beinhaltet:Die Signatur einer Prozedur beinhaltet:• den Namen der Prozedur• die Datentypen der Parameter• die Modi der Parameter
Rekompilieren einer PL/SQL-Programmeinheit
• Implizit durch automatische Rekompilierung zur Laufzeit• Explizit durch Rekompilierung mit der
Anweisung ALTERALTER PROCEDURE [SCHEMA.] prozedur_name COMPILEALTER FUNCTION [SCHEMA.] funktions_name COMPILE
ALTER PACKAGE [SCHEMA.] package_name COMPILE [PACKAGE]ALTER PACKAGE [SCHEMA.] package_name COMPILE SPECIFICATIONALTER PACKAGE [SCHEMA.] package_name COMPILE BODY
ALTER TRIGGER trigger_name [ENABLE|DISABLE|COMPILE]
Rekompilieren von ProzedurenRekompilierung abhängiger Prozeduren rozeduren und Funktionen wird erfolglos sein, wenn: und Funktionen wird erfolglos sein, wenn: • Das referenzierte Objekt gelöscht oder
umbenannt wurde• Der Datentyp der referenzierten Spalte
geändert wurde• Die referenzierte Spalte gelöscht wurde• Ein referenzierter View durch einen mit
unterschiedlichen Spalten ersetzt wurde• Die Parameterliste einer referenzierten
Prozedur modifiziert wurde
Rekompilieren von Prozeduren
Rekompilierung abhängiger Prozeduren rozeduren und Funktionen wird erfolgreich sein, wenn: und Funktionen wird erfolgreich sein, wenn: • Die referenzierte Tabelle neue Spalten hat• Der Datentyp referenzierter Spalten nicht
geändert wurde• Der PL/SQL-Body einer referenzierten
Prozedur modifiziert und erfolgreich rekompiliert wurde
Rekompilieren von Prozeduren
Minimieren von Abhängigkeitsfehlern durch:Minimieren von Abhängigkeitsfehlern durch:• Record-Deklaration mit dem
Attribut %ROWTYPE• Variablen-Deklaration mit dem
Attribut %TYPE• Abfragen mit der Notation SELECT *• Verwendung einer Spaltenliste bei
INSERT-Anweisungen
Packages und Abhängigkeiten
Prozedur AProzedur Adeklarationdeklaration
Package-SpezifikationPackage-Spezifikation
Package-BodyPackage-Body
Prozedur AProzedur Adefinitiondefinition
Standalone-Standalone-
ProzedurProzedur
VALID
VALID
Definition geändertDefinition geändert
Packages und Abhängigkeiten
Prozedur AProzedur Adeklarationdeklaration
Package-SpezifikationPackage-Spezifikation
Package-BodyPackage-Body
Prozedur AProzedur AdefinitiondefinitionStandalone-Standalone-
ProzedurProzedur
INVALID
VALID
Definition Definition geändertgeändert
Zusammenfassung
Vermeidung von Produktionsstörungen durch:Vermeidung von Produktionsstörungen durch:• Überblick über prozedurale Abhängigkeiten• Manuelle Rekompilierung, sobald die
Definition von Datenbankobjekten geändert wurde