Frage

Das Szenario, das diese Frage erstellt:

Wir haben ein Paket, das eine Abhängigkeit von einem anderen Paket, manchmal Änderungen an das „Eltern“ Paket macht bewirkt, dass das abhängige Paket ungültig werden, aber manchmal ist es nicht.

Es überrascht uns, bevor gefangen hat.

Es wäre sehr nützlich, einfach zu verstehen, was Ungültigkeits verursacht, so konnte ich vorhersagen / Plan für sie.

War es hilfreich?

Lösung

etwas Objekt ändern, dass ein Paket beruht auf (zum Beispiel Tabellen, Views, Trigger, andere Pakete) aktiviert automatisch das Paket als ungültig. Wie tuinstoel oben bemerkt, ist Oracle intelligent genug, um das Paket neu kompiliert werden, wenn sie zum ersten Mal verwendet wird.

Wenn Sie besorgt darüber sind, jedes Mal, wenn Schemaänderungen (zum Beispiel Tabellen, Views, Trigger, Prozeduren) machen, einen DBMS_UTILITY.compile_schema laufen (oder Ihr DBA tun es). Dies zwingt alle Pakete zusammenstellen und lassen Sie wissen, wo, oder wenn es Fehler gibt, bevor Sie sie auf die harte Tour zu finden.

Andere Tipps

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

   select *
   from dba_dependencies
   where name = 'YOUR_PACKAGE'
   and referenced_owner = 'ANYUSER' --- Comment this out if you are looking for yourself
   and owner = USER --- Or can be set to any user

Damit werden alle Abhängigkeiten zeigen. Für Ihre Objekte abfragen USER_DEPENDENCIES.

BTW, wenn ich über die Situation völlig falsch bin ... Entschuldigungen im Voraus

überrascht?

Nicht sicher, welche Auswirkungen die sind ...

Hat etwas Pause in der Produktion?

Was genau ist passiert?

Der Grund, warum ich frage ist, weil das Verständnis Verzweigungen jeder mögliche Änderung der ist viel schwieriger als mit dem Ergebnis zu tun. Warum die Ungültigkeits ein Problem werden? Meine Vermutung ist, dass Sie ein erhielt Fehler in der Anwendung „Bestehende Zustand Paket wurde verworfen“. Ist das das REAL Problem?

Auch hier vermute ich, dass es ist, und wenn ja, lassen Sie sich einfach mit, dass an Stelle der Liste der Änderungen befassen, die, wie ich in einem Kommentar setzen ist Version spezifisch. (11g Track Abhängigkeit bis in die Spalte einer Tabelle anstelle der Tabelle als Ganze zum Beispiel).

Das kann nicht wie ein wichtiger Fehler scheinen Sie , wenn Sie sind nicht Paketstatus verwenden. Wenn Sie dies sind, wäre ein wichtiger Fehler, und Sie würden nicht überrascht gewesen, so vermute ich, du bist nicht.

Da Sie sind nicht dieser Fehler ok ist zu ignorieren. Da Sie sicher ignorieren können, können Sie Ihre Client-Anwendung Code, um diese Fehler zu ignorieren und Ihren Anruf wiederholen, weil, wie andere haben darauf hingewiesen, Oracle Ihr Paket für Sie neu kompilieren. Dies ist eine sinnvolle Übung. Denn anstatt jede mögliche Sache zu wissen, was Sie über sich Sorgen zu machen, wenn Sie eine Änderung vornehmen, und dann im Notfall fix Sie einer von denen vergessen, Ihre App wird es einfach handhaben und weitermachen, ohne Sorgen.

ich mit Thomas Jones-Low stimmen aber es gibt noch ein paar Probleme mit langen Sitzungen zu tun und Neuübersetzung.

Wenn Sie ein Paket in einer Sitzung und das Paket (oder ein abhängiges Paket) Referenz während derselben Sitzung neu kompiliert wird dann werden Sie Orakel Fehler „ORA-06508: PL / SQL: konnte nicht gefunden Programmeinheit wird als“

Wenn Sie das Paket in einer Sitzung verwiesen haben, können Sie in der Regel nicht das Paket, ohne es für diese Sitzung ungültig zu machen ändern. Dies ist ein besonderes Problem für die Entwicklungsumgebungen, in denen Pakete häufig ändern, sondern auch ein Problem für Produktionsumgebungen, wo Sie einen kleinen Patch tun wollen, ohne nach unten der ganzen Umwelt. Beachten Sie, dass dieser Fehler auftritt, selbst wenn es keine Fehler in den geändertenen Paketen sind.

Neben Thomas Jones-Low Antwort, wenn Sie das Paket KöRPER ändern, um ein abhängiges Objekt möglicherweise nicht als ungültig markiert werden.

Doch sobald Sie das Paket Spezifikation ändern, dass gebunden ist geschehen.

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top