Was tun bei manuell gelöschten Archivelogs?

von Reno Föllmer

 

Vollgelaufene Archivelog Verzeichnisse – eine Vielzahl von Datenbankverantwortlichen hat schon vor dieser Situation gestanden. Die Auswirkungen: Die Datenbank scheint zu stehen, Transaktionen können nicht mehr ausgeführt werden, Benutzer melden, dass die Anwendung nicht mehr verfügbar ist.

 

Sollten die unter LOG_ARCHIVE_DEST_n eingestellten Verzeichnisse nicht mehr beschreibbar sein und die Datenbankinstanz keine Online Redo Logs nach deren Füllung mehr archivieren können, können neue Redo Informationen nicht mehr geschrieben werden – schreibende Transaktionen sind nicht mehr möglich. Letztlich bedeutet das auch, dass Anmeldungen oder schon das Aufrufen des Enterprise Managers (DBControl) fehlschlagen.

 

In der Regel kann das Problem sehr schnell eingegrenzt werden – die Einträge im ALERT.LOG sind sehr deutlich. Schnell wird dann oft auch herangegangen und die jeweiligen Daten aus dem Archivierungsverzeichnis gelöscht. Das Resultat: die Datenbankinstanz läuft nach kurzer "Akklimatisierung" weiter (was übrigens mit dem Befehl ALTER SYSTEM ARCHIVE LOG CURRENT; erheblich beschleunigt werden kann).

 

Doch was sich zunächst als Problemlösung darstellt, wird später, beim Anlegen des täglichen Backups, zum Desaster: zwar werden die Datendateien richtig gesichert – die zugehörigen ARCHIVELOGS jedoch nicht. Bei einem Onlinebackup ist das genauso, als ob man kein Backup hätte. Das "gute Gefühl", das ein Backup vermittelt, ist damit dahin.

 

Die ARCHIVELOGS sind zwar physisch weg, sie sind jedoch logisch immer noch in Controlfile und – wenn genutzt – im Recovery Catalog eingetragen. Damit versucht der Recovery Manager natürlich, bei einem Backup der Logs, diese zu sichern. Da die Dateien jedoch nicht vorhanden sind, läuft der RMAN auf einen Fehler – und bricht an dieser Stelle ab. Zunächst muss also das SOLL (imaginär vorhandene LOGS) an das IST (tatsächlich vorhandene LOGS) angepasst werden. Hierzu wird am RMAN der Befehl CROSSCHECK genutzt, welcher eine Prüfung der vorhandenen Informationen mit dem tatsächlichen Vorhandensein vornimmt:

 

RMAN> crosscheck archivelog all;

 

Das Ergebnis bringt nun eine Reihe nicht vorhandener Archivelogs (mit der Meldung: validation failed for archived log). Diese  Informationen müssen entfernt werden. Hier wird der Befehl

 

RMAN> delete noprompt expired archivelog all;

 

zum Einsatz. Der Zusatz NOPROMPT bewirkt, dass die lästige Rückfrage, ob wir "wirklich löschen wollen" entfällt.

 

Das Problem ist damit gelöst. Zu beachten ist, dass jetzt ein Backup gezogen werden sollte. Ansonsten sind wir im Falle des Ausfalls auch nur einer Datendatei nicht in der Lage bis zum Fehlerzeitpunkt wiederherzustellen – immerhin sind Lücken in der Sequenzfolge der Logs vorhanden.