Häufige Fehler in Oracle ORA-04068: bestehende Zustand der Pakete wurde verworfen
Bekommen wir diesen Fehler einmal am Tag auf ein script, welches alle zwei Stunden, aber zu verschiedenen Zeiten des Tages.
ERROR at line 1:
ORA-04068: existing state of packages has been discarded
ORA-04061: existing state of package body "PACKAGE.NAME" has been
invalidated
ORA-06508: PL/SQL: could not find program unit being called:
"PACKAGE.NAME"
ORA-06512: at line 1
Könnte mir jemand auflisten, was Bedingungen, die diesen Fehler verursachen können, so dass wir untersuchen?
Dank.
UPDATE:
Würde die Ausführung 'ALTER SESSION CLOSE DATABASE LINK DBLINK'
erlöschen einen Zustand des Pakets?
- Nur als ein weiteres Stück von Informationen, bei der Erstellung der Paket Körper nicht machen, die Berufung Pakete "gehen Sie unwirksam", d.h. der data dictionary, wird immer noch alle Pakete und Trigger und was auch immer als "GÜLTIG". Die Sache, die geht ungültig ist jeder Benutzer der PGA. Also, wenn es zehn Nutzern über das Paket, wie es kompiliert dann wird jeder hit in diesem problem wiederum der nächsten Zeit, auf die Sie verweisen, dass Paket.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Paket hat, der öffentlichen oder privaten Variablen. (Richtig?) Diese Variablen bilden den Status, der für ein Paket. Wenn Sie, kompilieren Sie das Paket in der 3. Sitzung. Der nächste Zugriff auf dieses Paket werfen den ORA-04068.
Den build-Zeitstempel eines Pakets muss älter sein als das Paket session state.
Wenn der Paket-Status ist nicht notwendig für das Skript ausgeführt wird, wird der Anruf
DBMS_SESSION.RESET_PACKAGE
am Anfang Ihres Skripts. Dieser reinigt alle Paket-Status der Sitzung.Diese one-liner eigentlich alles gelöst:
Sicher sein, dass deine globalen Variablen sind staatenlos um Probleme zu vermeiden.
Können Sie auch überprüfen
dba_dependencies
oderuser_dependencies
.Dies wird Ihnen die Objekte, die Ihr Paket abhängig ist. Schauen Sie, was passiert dort.
Wir haben diese Themen für die paar mal und Zeit, wir waren zusammenstellen-schema um dieses Problem zu beheben zeitweise. Über ein paar Tage wir waren auf der Suche für die permanente Auflösung.
Fanden wir folgenden Abfrage, die zeigten, Zeitstempel Unterschied in unserer synonym. wir kompiliert synonym und Es hat funktioniert !!! Es ist schon fast eine Woche und bisher haben wir keine Probleme. Hier ist die Abfrage, half in unserem Fall.
**
**
Ich hoffe, das hilft jemandem, der sich mit diesem Thema.
Scheint es, dass Sie änderungen an Ihren Objekten andere Objekte ungültig. Droping ein index zum Beispiel können in einem ungültigen Zustand alle Pakete, die dependes in der Tabelle. Es kann eine Kaskade aus. Wenn das Paket ungültig ist, wird die funciton, dass hängt von der Verpackung und der Ansicht verwendet, kann die Funktion unwirksam. Versuchen Sie, kompilieren Sie alle Objekte nach jedem DDL-Abfrage.