postgresql startet nicht mehr nach Crash

Hallo,

ich habe folgendes Problem:

Nach einem Absturz (Stromausfall) von unserem Windows 2003 Server R2 kann der Postgres Dienst nicht mehr gestartet werden. Leider hab ich kein Backup der Datenbank zur Hand :-(, aber ich würde die Daten ungern verlieren.

Folgendes hab ich bisher probiert:

Die Verzeichnisstruktur von PostgreSQL gespeichert.
Postgresql deinstalliert und neuinstalliert.
Das alte base verzeichnis unter /data in das neu installierte kopiert. Der Postgresql Prozess startet dann (nach der Installation) problemlos, aber ich hab über PgAdmin keinen Zugriff auf meine alten Datenbanken, bzw. diese werden erst gar nicht angezeigt. Als nächstes Verzeichnis hab ich /data/global kopiert. Danach lässt sich der Postmaster wieder nicht starten und ich muss PostgreSQL deinstallieren und erneut installieren…

Gibt es irgend eine Möglichkeit die alte Datenbank wiederherzustellen? Die Daten sind ja irgendwie vorhanden im base Verzeichnis… Hat jemand ne Idee was ich noch tun könnte, oder gibts ein Tool das weiterhelfen könnte?

Vielen Dank schonmal für Eure Antworten

Gruß Michael

Warum geht den Leuten erst hinterher ein Licht auf, das man zwar Backup nie machen möchte, aber Restore ganz dringend braucht?

Nun, die erste Hilfe wäre, mal einen Blick in das Logfile zu werfen, was dort an Fehlermeldungen produziert wird.

Danke für deine Antwort!

Die letzten Einträge im Logfile (jene vom Crash) lauten:

2007-04-18 13:16:35 LOG: autovacuum: processing database “psyGlobalize”

2007-04-18 13:17:35 LOG: autovacuum: processing database “psyDatabase”

2007-04-18 13:18:35 LOG: autovacuum: processing database “psyCoreDb”

2007-04-18 13:19:35 LOG: autovacuum: processing database “psyCebit”

2007-04-18 13:20:35 LOG: autovacuum: processing database “postgres”

2007-04-18 13:21:35 LOG: autovacuum: processing database “psyCommon”

2007-04-18 13:22:35 LOG: autovacuum: processing database “psyGlobalize”

2007-04-18 13:23:27 LOG: could not receive data from client: Es konnte keine Verbindung hergestellt werden, da der Zielcomputer die Verbindung verweigerte.

2007-04-18 13:23:27 LOG: unexpected EOF on client connection

2007-04-18 13:23:27 LOG: could not receive data from client: Es konnte keine Verbindung hergestellt werden, da der Zielcomputer die Verbindung verweigerte.

2007-04-18 13:23:27 LOG: unexpected EOF on client connection

2007-04-18 13:23:31 LOG: received fast shutdown request

2007-04-18 13:23:31 LOG: shutting down

2007-04-18 13:23:31 LOG: database system is shut down

2007-04-18 13:23:32 LOG: logger shutting down


Dann hab ich postgres neu installiert.
Im nächsten Schritt das alte /data/base Verzeichnis über das neue kopiert.

Jetzt erhalte ich folgende Einträge:

2007-04-20 09:01:18 LOG: database system was shut down at 2007-04-20 09:01:17 Mitteleuropäische Sommerzeit
2007-04-20 09:01:18 LOG: checkpoint record is at 0/39BDC0
2007-04-20 09:01:18 LOG: redo record is at 0/39BDC0; undo record is at 0/0; shutdown TRUE
2007-04-20 09:01:18 LOG: next transaction ID: 616; next OID: 16403
2007-04-20 09:01:18 LOG: next MultiXactId: 1; next MultiXactOffset: 0
2007-04-20 09:01:18 LOG: database system is ready
2007-04-20 09:01:18 LOG: transaction ID wrap limit is 2147484148, limited by database “postgres”
2007-04-20 09:01:18 FATAL: could not open file “base/10793/PG_VERSION”: Permission denied
2007-04-20 09:01:21 FATAL: could not open file “base/10793/PG_VERSION”: Permission denied
2007-04-20 09:02:21 FATAL: could not open file “base/1/PG_VERSION”: Permission denied
2007-04-20 09:03:21 FATAL: could not open file “base/10793/PG_VERSION”: Permission denied
2007-04-20 09:04:21 FATAL: could not open file “base/1/PG_VERSION”: Permission denied

Hab trust für localhost in der pg_hba.conf definiert und für alle Verzeichnisse in data/base die Zugriffsrechte für den postgres user gesetzt.

Gruß
Michael

Du installierst ganz normal dein PostgreSQL 8.2, danach kopierst du das ganze Data Verzeichnis von deiner alten Datenbank auf die neue PostgreSQL 8.2 data.

DANACH ist es ganz wichtig, dass Du auch dem Benutzer “Postgres” schreib und lese Rechte per Windows gibst. Am besten du löscht den Eintrag unter c:\Programme\Postgresql 8.2\data und setzt den Besitzer Postgres rekrusiv auf das DATA Verzeichnis.

Danach sollte PostgreSQL ganz normal starten.
Schau die auch mal die Eventlogs an. Da stehen auch Dienst Fehlermeldungen.

2007-04-20 09:02:21 FATAL: could not open file “base/1/PG_VERSION”: Permission denied

Permission denied bedeutet, dass er kein lese und schreibrecht auf die Datei/Ordner hat. Sprich mit er meine ich Postgres

Du hast die Daten als root/admin kopiert, oder? Bevor du die Datenbank wieder darauf loslassen kannst, musst du ihr ermöglichen, diese Dateien beschreiben zu können.