it-swarm.com.de

postgresql error PANIC: Ein gültiger Prüfpunktdatensatz konnte nicht gefunden werden

Wenn ich den Postgres-Server (v9.0.1) hochlade, kommt es zu einer Panik, die den Start verhindert:

PANIC: Es konnte kein gültiger Prüfpunktdatensatz gefunden werden

Wie kann ich das beheben?

46
nathan_scott

Es wird nach einem Prüfpunktdatensatz im Transaktionsprotokoll gesucht, der wahrscheinlich nicht vorhanden oder beschädigt ist. Sie können feststellen, ob dies der Fall ist, indem Sie Folgendes ausführen:

# Postgres < 10.0
pg_resetxlog DATADIR

# Postgres >= 10.0
pg_resetwal DATADIR

Wenn das Transaktionslog beschädigt ist, sehen Sie eine Meldung wie:

Der Datenbankserver wurde nicht ordnungsgemäß heruntergefahren. Durch das Zurücksetzen des Transaktionsprotokolls können Daten verloren gehen. Wenn Sie trotzdem fortfahren möchten, verwenden Sie -f, um das Zurücksetzen zu erzwingen.

Sie können dann den Anweisungen folgen und mit -f um das Update zu erzwingen:

# Postgres < 10.0
pg_resetxlog -f DATADIR 

# Postgres >= 10.0
pg_resetwal -f DATADIR

Das sollte das Transaktionslog zurücksetzen, es könnte jedoch Ihre Datenbank in einem unbestimmten Zustand belassen, wie in der PostgreSQL-Dokumentation auf pg_resetxlog :

Wenn sich pg_resetxlog darüber beschwert, dass keine gültigen Daten für pg_control ermittelt werden können, können Sie das Fortfahren erzwingen, indem Sie -f (Kraft) Schalter. In diesem Fall werden die fehlenden Daten durch plausible Werte ersetzt. Es ist zu erwarten, dass die meisten Felder übereinstimmen. Für die Felder "Nächste OID", "Nächste Transaktions-ID" und "Epoche", "Nächste Multitransaktions-ID" und "Offset" sowie "WAL-Startadresse" ist jedoch möglicherweise manuelle Unterstützung erforderlich. Diese Felder können mit den unten beschriebenen Schaltern eingestellt werden. Wenn Sie für alle diese Felder keine korrekten Werte ermitteln können, wird -f kann weiterhin verwendet werden, aber die wiederhergestellte Datenbank muss mit noch mehr Argwohn als sonst behandelt werden: Ein sofortiger Speicherauszug und ein erneutes Laden sind unabdingbar. Führen Sie vor dem Sichern keine datenverändernden Vorgänge in der Datenbank aus, da dies die Beschädigung wahrscheinlich verschlimmern wird.

81

Ich lasse 9.1.7 laufen und finde, dass das Folgende erfolgreich lief:

/usr/lib/postgresql/9.1/bin/pg_resetxlog -f /var/lib/postgresql/9.1/main

Ihr letztes Argument an die pg_resetxlog Befehl sollte der Ort auf der Festplatte sein, an dem postgres Ihre Datenbankdaten speichert.

15
limlam

As hier angegeben pg_resetxlog sollte nicht ausgeführt werden. Die Antworten, die sich darauf beziehen, sind schlechte Ratschläge. Unter der Annahme, dass der Fehler in einem Kontext der Kopie/Replikation-Instanz aufgetreten ist, bietet der Link eine prägnantere Möglichkeit zum Kopieren/Replizieren mit pg_basebackup

8
Jerome

Archivieren Sie kontinuierlich? Wenn Sie zu diesem Zeitpunkt eine Sicherung durchführen, empfiehlt es sich möglicherweise, backup_label zu entfernen. pg_resetxlog ist eine schwere Sache.

3
fdr

genau wie im Protokoll steht: Konnte keinen gültigen Prüfpunktdatensatz finden. Postgres kann eine WAL im Verzeichnis $ PGDATA/pg_xlog/nicht richtig finden. Versuchen Sie, pg_resetxlog zu verwenden

1
sgzhan