Bei der Arbeit mit einer Oracle-Datenbank treten manchmal Situationen auf, in denen Datenbankobjekte nicht validiert werden. Dies kann aus verschiedenen Gründen auftreten, z. B. einer Änderung der Datenbankstruktur, einer Aktualisierung der Oracle-Version oder einem fehlerhaften Abschluss von Vorgängen. Wenn ein Objekt nicht validiert wird, bedeutet dies, dass sein Code nicht ausgeführt und in SQL-Anweisungen verwendet werden kann.
Es ist wichtig, nicht validierte Objekte neu kompilieren zu können, um sie wieder in einen funktionierenden Zustand zu versetzen. Dazu bietet Oracle mehrere Methoden an. Eine davon besteht darin, den Befehl "ALTER OBJECT" zu verwenden, um ein bestimmtes Objekt neu zu kompilieren. Eine andere Methode besteht darin, die Prozedur "UTL_RECOMP" zu verwenden, um alle nicht validierten Objekte in der Datenbank neu zu kompilieren.
Es sollte auch beachtet werden, dass das Neukompilieren von nicht validierten Objekten ein wichtiger Teil des Datenbankaktualisierungsprozesses sein kann. Wenn Sie eine Oracle-Version aktualisieren, werden möglicherweise neue Funktionen oder Änderungen angezeigt, die Objekte nicht validieren können. Daher ist es wichtig zu wissen, wie Sie diese Objekte neu kompilieren können, um sicherzustellen, dass das System ordnungsgemäß funktioniert.
Das Herunterladen der erforderlichen Pakete, die Überprüfung auf nicht validierte Objekte und die Neukompilierung sind wesentliche Schritte beim Arbeiten mit nicht validierten Objekten in Oracle. Wenn Sie diese Schritte befolgen, können Sie die Aufgabe effizient und sicher abschließen.
Vorbereiten der Neukompilierung
Bevor Sie mit der Neukompilierung eines nicht validierten Objekts in Oracle beginnen, müssen Sie einige vorbereitende Schritte ausführen. Dies hilft, mögliche Fehler zu vermeiden und den Aktualisierungsprozess zu vereinfachen.
1. Aktivieren Sie den Überwachungsmodus. Wenn Sie den Datenbanküberwachungsmodus noch nicht aktiviert haben, müssen Sie diesen Schritt ausführen. Mit dem Überwachungsmodus können Sie falsch kompilierte Objekte und ihre Abhängigkeiten nachverfolgen.
2. Identifizieren Sie nicht validierte Objekte. Anhand der folgenden Abfrage können Sie herausfinden, welche Objekte in der Datenbank nicht validiert sind:
SELECT owner, object_name, object_type FROM all_objects WHERE status = 'INVALID';
3. Speichern Sie die abhängigen Objekte. Stellen Sie sicher, dass alle Abhängigkeiten des nicht validierten Objekts beibehalten werden, bevor Sie mit der Neukompilierung beginnen. Dies wird dazu beitragen, Datenverlust zu vermeiden und die Integrität der Datenbank zu erhalten.
4. Verwenden Sie Skripts zum Neukompilieren. Oracle stellt Skripts bereit, die nicht validierte Objekte automatisch neu kompilieren. Verwenden Sie diese Skripts, um die Objekte neu zu kompilieren.
5. Überprüfen Sie die Ergebnisse. Überprüfen Sie nach Abschluss der Neukompilierung die Ergebnisse. Stellen Sie sicher, dass sich nicht valide Objekte in valide Objekte verwandeln und keine neuen Fehler auftreten.
Nach diesen Schritten können Sie die nicht validierten Objekte in Oracle erfolgreich neu kompilieren und die Datenbank wiederherstellen.
Oracle: vorbereiten eines nicht validierten Objekts für die Neukompilierung
Gelegentlich treten in Oracle Situationen auf, in denen Objekte in einer Datenbank aus verschiedenen Gründen nicht validiert werden, wie zum Beispiel das Ändern der Tabellenstruktur, das Löschen oder Ändern von verwendeten Objekten, das Ändern von Zugriffsrechten und so weiter. In solchen Fällen müssen Sie die Objekte neu kompilieren, um den Gültigkeitsstatus für sie zurückzugeben.
Bevor Sie das Objekt explizit neu kompilieren, können Sie mehrere Schritte unternehmen, um das Objekt auf den Neukompilierungsprozess vorzubereiten:
- Abhängigkeitsprüfung: Es ist wichtig sicherzustellen, dass ein Objekt, das nicht validiert wurde, nicht von anderen nicht validierten oder nicht vorhandenen Objekten abhängt. Dazu können Sie SQL-Abfragen verwenden, z. B. SELECT * FROM ALL_DEPENDENCIES WHERE REFERENCED_NAME = 'Objektname'; und SELECT * FROM ALL_OBJECTS WHERE OBJECT_NAME = 'Objektname'; . Wenn Abhängigkeiten von anderen nicht validierten Objekten gefunden werden, sollten Sie diese ebenfalls neu kompilieren.
- Fehleranalyse: Wenn das Objekt aufgrund von Syntaxfehlern oder logischen Fehlern nicht mehr gültig ist, müssen Sie es vor der Neukompilierung korrigieren. Dazu können Sie Oracle-Entwicklungstools wie SQL Developer oder SQL*Plus verwenden, um spezifische Fehler und deren Speicherort zu ermitteln.
- Optimieren des Codes: Es kann nützlich sein, den Code eines Objekts auf unnötige oder ineffiziente Operationen zu überprüfen. Sie können beispielsweise SQL-Abfragen verwenden, um statische SQL-Abfragen zu identifizieren, die optimiert oder durch die Verwendung von View-Klauseln oder gespeicherten Prozeduren ersetzt werden können.
Nachdem Sie alle erforderlichen Vorarbeiten durchgeführt haben, können Sie mit der Neukompilierung des nicht validierten Objekts beginnen. Dazu können Sie den Befehl ALTER verwenden. COMPILE; oder spezielle Prozeduren und Funktionen wie DBMS_UTILITY.COMPILE_SCHEMA oder DBMS_DDL.ALTER_COMPILE . Wenn das Objekt erfolgreich neu kompiliert wird, muss sich sein Status in einen gültigen Status ändern.
Beachten Sie, dass die Neukompilierung von Objekten einige Zeit in Anspruch nehmen kann, insbesondere wenn viele abhängige Objekte vorhanden sind. Daher ist es ratsam, vor der Neukompilierung eine Sicherungskopie der Datenbank zu erstellen und den Prozess außerhalb der Spitzenzeiten durchzuführen, um die nachteiligen Auswirkungen auf das System zu minimieren.
Überprüfen des Status eines Objekts
Bevor Sie ein nicht validiertes Oracle-Objekt neu kompilieren, ist es wichtig, seinen aktuellen Status zu überprüfen. Auf diese Weise können Sie feststellen, ob eine Neukompilierung erforderlich ist, und Sie können auch herausfinden, warum das Objekt nicht korrekt ist.
Sie können die folgende SQL-Abfrage verwenden, um den Status eines Objekts zu überprüfen:
SELECT object_name, object_type, statusFROM user_objectsWHERE object_name = 'имя_объекта';
In dieser Abfrage müssen Sie 'Objektname' durch den Namen des bestimmten Objekts ersetzen, dessen Status überprüft werden soll. Die Abfrage gibt Informationen über den Namen des Objekts, seinen Typ und den aktuellen Status zurück.
Mögliche Werte für den Objektstatus:
| Status | Die Beschreibung |
|---|---|
| VALID | Das Objekt ist valid und erfordert keine Neukompilierung. |
| INVALID | Das Objekt ist nicht validiert und muss neu kompiliert werden. |
| ERROR | Das Objekt enthält Fehler und muss vor der Neukompilierung repariert werden. |
| N/A | Der Status ist nicht verfügbar oder gilt nicht für diesen Objekttyp. |
Nachdem Sie den Status eines Objekts überprüft haben, können Sie mit der Neukompilierung oder Korrektur von Fehlern beginnen, abhängig vom erhaltenen Status.
Wie finde ich heraus, dass ein Oracle-Objekt nicht validiert ist
In Oracle müssen Datenbankobjekte wie Tabellen, Sichten, Funktionen und Prozeduren gültig sein, um für die Verwendung verfügbar zu sein. Ein nicht validiertes Objekt kann aufgrund von Fehlern im Code, einer Änderung der Datenbankstruktur oder aufgrund von Zugriffsrechten auftreten. Um herauszufinden, dass ein Objekt nicht kalibriert ist, können Sie auf die folgenden Methoden zurückgreifen:
1. Fordern Sie SYS an.OBJ$
Mit dieser Abfrage können Sie eine Liste nicht validierter Objekte in einer Oracle-Datenbank abrufen:
SELECT * FROM SYS.OBJ$ WHERE STATUS <> 'VALID';
2. DBA_OBJECTS-Abfrage
Verwenden Sie die folgende Abfrage, um eine Liste der nicht validierten Objekte abzurufen, die für den aktuellen Benutzer verfügbar sind:
SELECT OWNER, OBJECT_NAME, OBJECT_TYPE, STATUS FROM DBA_OBJECTS WHERE STATUS <> 'VALID' AND OWNER = 'Benutzername';
3. USER_OBJECTS-Ansicht
Führen Sie die folgende Abfrage aus, um eine Liste der nicht validierten Objekte zu erhalten, die einem bestimmten Benutzer gehören:
SELECT OBJECT_NAME, OBJECT_TYPE, STATUS FROM USER_OBJECTS WHERE STATUS <> 'VALID';
4. SQL*Plus-Befehl
Stellen Sie über den SQL*Plus-Befehl eine Verbindung mit der Oracle-Datenbank her, und führen Sie den Befehl DESCRIBE aus, um den Status des Objekts zu überprüfen:
5. Fehlerprotokoll
Das Oracle-Fehlerprotokoll enthält möglicherweise Informationen zu nicht validierten Objekten, die beim Kompilieren Fehler verursacht haben:
SELECT * FROM USER_ERRORS;
Wenn Sie den Status von Objekten in Oracle überprüfen, können Sie nicht validierte Objekte erkennen und die erforderlichen Maßnahmen ergreifen, um sie neu zu kompilieren oder Fehler zu beheben, um sie wieder in einen funktionierenden Zustand zu versetzen.
Neukompilieren eines Objekts
Eine Neukompilierung ist möglicherweise erforderlich, wenn Sie Probleme mit der fehlerhaften Funktion des Objekts haben oder wenn das Objekt einen nicht korrekten Zustand in der Datenbank darstellt. In solchen Fällen kann die Neukompilierung helfen, die Funktionsfähigkeit des Objekts wiederherzustellen und Fehler zu beheben.
Das Hauptwerkzeug zum Neukompilieren eines Objekts in Oracle ist das Paket DBMS_UTILITY. Es gibt ein Verfahren in diesem Paket COMPILE_SCHEMA Damit können Sie alle Objekte in einem bestimmten Schema neu kompilieren. Sie können diese Prozedur für ein bestimmtes Schema mit der folgenden SQL-Abfrage aufrufen:
Wenn Sie ein Problem mit einem bestimmten Objekt haben, können Sie das Verfahren verwenden COMPILE_OBJECT aus dem Paket DBMS_UTILITY. Mit dieser Prozedur können Sie ein bestimmtes Objekt nach Name und Typ neu kompilieren. Um beispielsweise eine gespeicherte Prozedur mit dem Namen "my_procedure" neu zu kompilieren, können Sie die folgende SQL-Abfrage verwenden:
EXEC DBMS_UTILITY.COMPILE_OBJECT('PROCEDURE', 'Schaltplanname.my_procedure');
Nachdem Sie das Objekt neu kompiliert haben, müssen Sie möglicherweise den Status des Objekts überprüfen, um sicherzustellen, dass es gültig ist. Dazu können Sie die folgende SQL-Abfrage verwenden:
SELECT status, object_type FROM all_objects WHERE object_name = 'Objektname' AND owner = 'Schaltplanname';
Wenn die Spalte "STATUS" auf "VALID" festgelegt ist, bedeutet dies, dass das Objekt erfolgreich neu kompiliert und validiert wurde.
Die Neukompilierung von Objekten kann ein nützliches Werkzeug sein, um Probleme mit der fehlerhaften Funktion von Oracle-Datenbankobjekten zu lösen. Es wird jedoch empfohlen, vor der Neukompilierung eine Sicherungskopie der Datenbank zu erstellen und die möglichen Auswirkungen dieser Aktion vollständig zu verstehen.