Welche Situationen führen dazu, dass Oracle-Pakete ungültig werden?

8

Das Szenario, das diese Frage erstellt hat:

Wir haben ein Paket, das eine Abhängigkeit von einem anderen Paket darstellt. Manchmal bewirkt das Ändern des Pakets "parent", dass das abhängige Paket ungültig wird, manchmal jedoch auch nicht.

Es hat uns schon einmal überrascht.

Es wäre sehr nützlich, einfach zu verstehen, was die Invalidierung verursacht, damit ich es vorhersagen / planen kann.

    
Jeff 09.03.2009, 13:37
quelle

6 Antworten

12
___ qstnhdr ___ Welche Situationen führen dazu, dass Oracle-Pakete ungültig werden? ___ answer1096550 ___

Oder Sie können die folgende Tabelle abfragen, um zu sehen, welche Abhängigkeiten Sie haben

%Vor%

Dies zeigt alle Abhängigkeiten an. Für Ihre Objekte fragen Sie user_dependencies ab.

    
___ qstntxt ___

Das Szenario, das diese Frage erstellt hat:

Wir haben ein Paket, das eine Abhängigkeit von einem anderen Paket darstellt. Manchmal bewirkt das Ändern des Pakets "parent", dass das abhängige Paket ungültig wird, manchmal jedoch auch nicht.

Es hat uns schon einmal überrascht.

Es wäre sehr nützlich, einfach zu verstehen, was die Invalidierung verursacht, damit ich es vorhersagen / planen kann.

    
___ answer626658 ___

Übrigens, wenn ich mich völlig in der Situation irre ... Entschuldigung im Voraus

Von Überraschung überrascht?

Nicht sicher, was die Implikationen davon sind ...

Hat etwas in der Produktion gebrochen?

Was genau ist passiert?

Der Grund, warum ich frage, ist, weil es viel schwieriger ist, die Auswirkungen aller möglichen Veränderungen zu verstehen, als mit dem Ergebnis umzugehen. Warum wird die Annullierung zu einem Problem? Meine Vermutung ist, weil Sie einen Fehler "Existierender Zustand des Pakets wurde verworfen" in Ihrer Anwendung haben. Ist das das REAL Problem?

Ich vermute wieder, dass es das ist, und wenn es so ist, lassen Sie uns das nur anstellen statt der Liste der Änderungen, die, wie ich in einen Kommentar einfüge, versionsspezifisch sind. (11g verfolgt die Abhängigkeit bis hinunter zu der Spalte einer Tabelle anstelle der Tabelle als Ganzes).

Dies scheint Ihnen nicht wichtig zu sein wenn Sie den Paketstatus nicht verwenden. Wenn Sie dies wären, wäre dies ein wichtiger Fehler und Sie wären nicht überrascht gewesen, also ich vermute, Sie sind nicht.

Da du nicht dieser Fehler bist ist es in Ordnung zu ignorieren. Da Sie sie ignorieren können, können Sie Ihre Clientanwendung so programmieren, dass sie diesen Fehler ignoriert und Ihren Anruf erneut versucht, da Oracle Ihr Paket für Sie neu kompilieren wird, wie andere bereits erwähnt haben. Dies ist eine lohnende Übung. Denn anstatt jede mögliche Sache zu kennen, um die du dich sorgen musst, wenn du eine Veränderung machst, und dann im Notfall reparierst du eine davon, wird deine App einfach damit umgehen und ohne Sorgen weitergehen.

    
___ answer627898 ___

Ich stimme Thomas Jones-Low zu, aber es gibt ein paar weitere Probleme mit langen Sitzungen und Neukompilierung.

Wenn Sie ein Paket in einer Sitzung referenzieren und dieses Paket (oder ein abhängiges Paket) während derselben Sitzung neu kompiliert wird, erhalten Sie den Oracle-Fehler "ORA-06508: PL / SQL: Programmeinheit konnte nicht gefunden werden"

Nachdem Sie das Paket in einer Sitzung referenziert haben, können Sie das Paket im Allgemeinen nicht ändern, ohne es für diese Sitzung ungültig zu machen. Dies ist ein besonderes Problem für Entwicklungsumgebungen, in denen Pakete häufig geändert werden, aber auch ein Problem für Produktionsumgebungen, in denen Sie einen kleinen Patch ausführen möchten, ohne die gesamte Umgebung zu beeinträchtigen. Beachten Sie, dass dieser Fehler auch dann auftritt, wenn die geänderten Pakete keine Fehler enthalten.

    
___ tag123plsql ___ PL / SQL (prozedurale Sprache / strukturierte Abfragesprache) ist die prozedurale Spracherweiterung der Oracle Corporation für SQL. Fragen zu PL / SQL sollten auch mit "oracle" getaggt werden. Fragen mit regulären DML- oder DDL-Anweisungen sollten mit "sql" und "oracle", NICHT mit "plsql" markiert werden. ___ tag123package ___ Das Paket bezieht sich allgemein auf zwei Dinge: 1) eine verwendbare Einheit / Komponente der eingebauten / kompilierten Software oder 2) eine Partition des globalen Namensraums (Java). ___ answer62631 ___

Zusätzlich zur Antwort von Thomas Jones-Low wird ein abhängiges Objekt möglicherweise nicht als ungültig markiert, wenn Sie nur das Paket BODY ändern.

Sobald Sie jedoch die Paketspezifikation ändern, wird dies zwangsläufig passieren.

    
___ tag123abhängigkeiten ___ Eine Abhängigkeit besteht zwischen zwei Elementen, wenn Änderungen an der Definition eines Elements zu Änderungen am anderen Element führen können. ___ tag123oracle ___ Oracle Database ist ein Datenbankmanagementsystem mit mehreren Modellen, das von Oracle Corporation erstellt wurde. Verwenden Sie dieses Tag NICHT für andere Produkte von Oracle wie Java und MySQL. ___ answer626455 ___

Wenn Sie versuchen, ein ungültiges Oracle-Paket auszuführen, versucht Oracle, es zu kompilieren. Nur wenn es nach dem Kompilieren von Oracle ungültig bleibt, wird eine Ausnahme ausgelöst.

    
___ answer62613 ___

Wenn Sie ein beliebiges Objekt ändern, auf das ein Paket angewiesen ist (z. B. Tabellen, Ansichten, Trigger, andere Pakete), wird das Paket automatisch als ungültig markiert. Wie oben bereits erwähnt, ist Oracle schlau genug, das Paket neu zu kompilieren, wenn es zum ersten Mal verwendet wird.

Wenn Sie sich darüber Gedanken machen, führen Sie jedes Mal, wenn Sie Schemaänderungen vornehmen (z. B. Tabellen, Sichten, Trigger, Prozeduren), ein DBMS_UTILITY.compile_schema aus (oder lassen Sie dies von Ihrem Datenbankadministrator tun). Dies wird zwingen, alle Pakete zu kompilieren und Sie wissen zu lassen, wo oder ob es Fehler gibt, bevor Sie sie auf die harte Tour finden.

    
___
Thomas Jones-Low 09.03.2009, 14:46
quelle
5

Oder Sie können die folgende Tabelle abfragen, um zu sehen, welche Abhängigkeiten Sie haben

%Vor%

Dies zeigt alle Abhängigkeiten an. Für Ihre Objekte fragen Sie user_dependencies ab.

    
Guru 17.09.2015 22:58
quelle
3

Übrigens, wenn ich mich völlig in der Situation irre ... Entschuldigung im Voraus

Von Überraschung überrascht?

Nicht sicher, was die Implikationen davon sind ...

Hat etwas in der Produktion gebrochen?

Was genau ist passiert?

Der Grund, warum ich frage, ist, weil es viel schwieriger ist, die Auswirkungen aller möglichen Veränderungen zu verstehen, als mit dem Ergebnis umzugehen. Warum wird die Annullierung zu einem Problem? Meine Vermutung ist, weil Sie einen Fehler "Existierender Zustand des Pakets wurde verworfen" in Ihrer Anwendung haben. Ist das das REAL Problem?

Ich vermute wieder, dass es das ist, und wenn es so ist, lassen Sie uns das nur anstellen statt der Liste der Änderungen, die, wie ich in einen Kommentar einfüge, versionsspezifisch sind. (11g verfolgt die Abhängigkeit bis hinunter zu der Spalte einer Tabelle anstelle der Tabelle als Ganzes).

Dies scheint Ihnen nicht wichtig zu sein wenn Sie den Paketstatus nicht verwenden. Wenn Sie dies wären, wäre dies ein wichtiger Fehler und Sie wären nicht überrascht gewesen, also ich vermute, Sie sind nicht.

Da du nicht dieser Fehler bist ist es in Ordnung zu ignorieren. Da Sie sie ignorieren können, können Sie Ihre Clientanwendung so programmieren, dass sie diesen Fehler ignoriert und Ihren Anruf erneut versucht, da Oracle Ihr Paket für Sie neu kompilieren wird, wie andere bereits erwähnt haben. Dies ist eine lohnende Übung. Denn anstatt jede mögliche Sache zu kennen, um die du dich sorgen musst, wenn du eine Veränderung machst, und dann im Notfall reparierst du eine davon, wird deine App einfach damit umgehen und ohne Sorgen weitergehen.

    
Mark Brady 09.03.2009 15:20
quelle
3

Ich stimme Thomas Jones-Low zu, aber es gibt ein paar weitere Probleme mit langen Sitzungen und Neukompilierung.

Wenn Sie ein Paket in einer Sitzung referenzieren und dieses Paket (oder ein abhängiges Paket) während derselben Sitzung neu kompiliert wird, erhalten Sie den Oracle-Fehler "ORA-06508: PL / SQL: Programmeinheit konnte nicht gefunden werden"

Nachdem Sie das Paket in einer Sitzung referenziert haben, können Sie das Paket im Allgemeinen nicht ändern, ohne es für diese Sitzung ungültig zu machen. Dies ist ein besonderes Problem für Entwicklungsumgebungen, in denen Pakete häufig geändert werden, aber auch ein Problem für Produktionsumgebungen, in denen Sie einen kleinen Patch ausführen möchten, ohne die gesamte Umgebung zu beeinträchtigen. Beachten Sie, dass dieser Fehler auch dann auftritt, wenn die geänderten Pakete keine Fehler enthalten.

    
darreljnz 09.03.2009 20:29
quelle
2
___ qstnhdr ___ Welche Situationen führen dazu, dass Oracle-Pakete ungültig werden? ___ answer1096550 ___

Oder Sie können die folgende Tabelle abfragen, um zu sehen, welche Abhängigkeiten Sie haben

%Vor%

Dies zeigt alle Abhängigkeiten an. Für Ihre Objekte fragen Sie user_dependencies ab.

    
___ qstntxt ___

Das Szenario, das diese Frage erstellt hat:

Wir haben ein Paket, das eine Abhängigkeit von einem anderen Paket darstellt. Manchmal bewirkt das Ändern des Pakets "parent", dass das abhängige Paket ungültig wird, manchmal jedoch auch nicht.

Es hat uns schon einmal überrascht.

Es wäre sehr nützlich, einfach zu verstehen, was die Invalidierung verursacht, damit ich es vorhersagen / planen kann.

    
___ answer626658 ___

Übrigens, wenn ich mich völlig in der Situation irre ... Entschuldigung im Voraus

Von Überraschung überrascht?

Nicht sicher, was die Implikationen davon sind ...

Hat etwas in der Produktion gebrochen?

Was genau ist passiert?

Der Grund, warum ich frage, ist, weil es viel schwieriger ist, die Auswirkungen aller möglichen Veränderungen zu verstehen, als mit dem Ergebnis umzugehen. Warum wird die Annullierung zu einem Problem? Meine Vermutung ist, weil Sie einen Fehler "Existierender Zustand des Pakets wurde verworfen" in Ihrer Anwendung haben. Ist das das REAL Problem?

Ich vermute wieder, dass es das ist, und wenn es so ist, lassen Sie uns das nur anstellen statt der Liste der Änderungen, die, wie ich in einen Kommentar einfüge, versionsspezifisch sind. (11g verfolgt die Abhängigkeit bis hinunter zu der Spalte einer Tabelle anstelle der Tabelle als Ganzes).

Dies scheint Ihnen nicht wichtig zu sein wenn Sie den Paketstatus nicht verwenden. Wenn Sie dies wären, wäre dies ein wichtiger Fehler und Sie wären nicht überrascht gewesen, also ich vermute, Sie sind nicht.

Da du nicht dieser Fehler bist ist es in Ordnung zu ignorieren. Da Sie sie ignorieren können, können Sie Ihre Clientanwendung so programmieren, dass sie diesen Fehler ignoriert und Ihren Anruf erneut versucht, da Oracle Ihr Paket für Sie neu kompilieren wird, wie andere bereits erwähnt haben. Dies ist eine lohnende Übung. Denn anstatt jede mögliche Sache zu kennen, um die du dich sorgen musst, wenn du eine Veränderung machst, und dann im Notfall reparierst du eine davon, wird deine App einfach damit umgehen und ohne Sorgen weitergehen.

    
___ answer627898 ___

Ich stimme Thomas Jones-Low zu, aber es gibt ein paar weitere Probleme mit langen Sitzungen und Neukompilierung.

Wenn Sie ein Paket in einer Sitzung referenzieren und dieses Paket (oder ein abhängiges Paket) während derselben Sitzung neu kompiliert wird, erhalten Sie den Oracle-Fehler "ORA-06508: PL / SQL: Programmeinheit konnte nicht gefunden werden"

Nachdem Sie das Paket in einer Sitzung referenziert haben, können Sie das Paket im Allgemeinen nicht ändern, ohne es für diese Sitzung ungültig zu machen. Dies ist ein besonderes Problem für Entwicklungsumgebungen, in denen Pakete häufig geändert werden, aber auch ein Problem für Produktionsumgebungen, in denen Sie einen kleinen Patch ausführen möchten, ohne die gesamte Umgebung zu beeinträchtigen. Beachten Sie, dass dieser Fehler auch dann auftritt, wenn die geänderten Pakete keine Fehler enthalten.

    
___ tag123plsql ___ PL / SQL (prozedurale Sprache / strukturierte Abfragesprache) ist die prozedurale Spracherweiterung der Oracle Corporation für SQL. Fragen zu PL / SQL sollten auch mit "oracle" getaggt werden. Fragen mit regulären DML- oder DDL-Anweisungen sollten mit "sql" und "oracle", NICHT mit "plsql" markiert werden. ___ tag123package ___ Das Paket bezieht sich allgemein auf zwei Dinge: 1) eine verwendbare Einheit / Komponente der eingebauten / kompilierten Software oder 2) eine Partition des globalen Namensraums (Java). ___ answer62631 ___

Zusätzlich zur Antwort von Thomas Jones-Low wird ein abhängiges Objekt möglicherweise nicht als ungültig markiert, wenn Sie nur das Paket BODY ändern.

Sobald Sie jedoch die Paketspezifikation ändern, wird dies zwangsläufig passieren.

    
___ tag123abhängigkeiten ___ Eine Abhängigkeit besteht zwischen zwei Elementen, wenn Änderungen an der Definition eines Elements zu Änderungen am anderen Element führen können. ___ tag123oracle ___ Oracle Database ist ein Datenbankmanagementsystem mit mehreren Modellen, das von Oracle Corporation erstellt wurde. Verwenden Sie dieses Tag NICHT für andere Produkte von Oracle wie Java und MySQL. ___ answer626455 ___

Wenn Sie versuchen, ein ungültiges Oracle-Paket auszuführen, versucht Oracle, es zu kompilieren. Nur wenn es nach dem Kompilieren von Oracle ungültig bleibt, wird eine Ausnahme ausgelöst.

    
___ answer62613 ___

Wenn Sie ein beliebiges Objekt ändern, auf das ein Paket angewiesen ist (z. B. Tabellen, Ansichten, Trigger, andere Pakete), wird das Paket automatisch als ungültig markiert. Wie oben bereits erwähnt, ist Oracle schlau genug, das Paket neu zu kompilieren, wenn es zum ersten Mal verwendet wird.

Wenn Sie sich darüber Gedanken machen, führen Sie jedes Mal, wenn Sie Schemaänderungen vornehmen (z. B. Tabellen, Sichten, Trigger, Prozeduren), ein %code% aus (oder lassen Sie dies von Ihrem Datenbankadministrator tun). Dies wird zwingen, alle Pakete zu kompilieren und Sie wissen zu lassen, wo oder ob es Fehler gibt, bevor Sie sie auf die harte Tour finden.

    
___
Brummo 09.03.2009 14:50
quelle
1

Wenn Sie versuchen, ein ungültiges Oracle-Paket auszuführen, versucht Oracle, es zu kompilieren. Nur wenn es nach dem Kompilieren von Oracle ungültig bleibt, wird eine Ausnahme ausgelöst.

    
tuinstoel 09.03.2009 14:28
quelle

Tags und Links