PC kaputt - kein Zugriff mehr auf DB-Dateien

Hallo

ich bin total verzweifelt! Mein Windows Vista PC ist kaputt gegangen. Ich habe die Festplatte ausgebaut und konnte die Daten auf meinem alten Windows XP SP3 PC problemlos sichern. Leider krieg ich den Zugriff auf die PostgreSQL 8.4 Daten nicht hin.

Ich habe mit pgAdmin den Dienst gestoppt. Ich habe in der 8.4er Installation den data Ordner in data_alt umbenannt und den aktuellen data Ordner in das PostgreSQL-Verzeichnis kopiert. Nun starte ich pgAdmin III v1.10.5. pgAdmin meldet folgenden Fehler wenn ich auf den Tree-Eintrag unterhalb “Server (1)” doppelklicke und das Passwort eingebe:
“Server doesn’t listen
The server doesn’t accept connections: the connection library reports
could not connect to server: Connection refused (0x0000274D/10061) Is the server running on host “127.0.0.1” and accepting TCP/IP connections on port 5432?
If you encounter this message, please check if the server you’re trying to contact is actually running PostgreSQL on the given port. Test if you have network connectivity from your client to the server host using ping or equivalent tools. Is your network / VPN / SSH tunnel / firewall configured correctly?
For security reasons, PostgreSQL does not listen on all available IP addresses on the server machine initially. In order to access the server over the network, you need to enable listening on the address first.
For PostgreSQL servers starting with version 8.0, this is controlled using the “listen_addresses” parameter in the postgresql.conf file. Here, you can enter a list of IP addresses the server should listen on, or simply use ‘*’ to listen on all available IP addresses. For earlier servers (Version 7.3 or 7.4), you’ll need to set the “tcpip_socket” parameter to ‘true’.
You can use the postgresql.conf editor that is built into pgAdmin III to edit the postgresql.conf configuration file. After changing this file, you need to restart the server process to make the setting effective.
If you double-checked your configuration but still get this error message, it’s still unlikely that you encounter a fatal PostgreSQL misbehaviour. You probably have some low level network connectivity problems (e.g. firewall configuration). Please check this thoroughly before reporting a bug to the PostgreSQL community.”

Alten data-Ordner wieder verwenden -> gleiches Problem. Obwohl PostgreSQL ja vorher mit dem alten data Ordner problemlos funktioniert hatte. Neuinstallation oder Deinstallation+Neuinstallation hat auch keine Besserung gebracht. Ich hab auch versucht den Service zu starten. Ging nicht. Ein ping auf 127.0.0.1 klappt, aber nicht gegen Port 5432. Es ist alles auf einem Rechner (Windows XP), also kein Remotezugriff. Ich habe auch mal einen neuen Non-Admin-User angelegt und diesen in den Service eingetragen -> kein Erfolg.

Fehler beim Dienst starten mittels Computerverwaltung/Dienste:
“Dienst postgresql-8.4 - PostgreSQL Server 8.4 wurde auf Lokaler Computer gestartet und dann angehalten. Einige Dienste werden automatisch angehalten, wenn sie sich im Leerlauf befindet, wie z. B. Leistungsprotokoll- und Alarmdienste. OK”

Pfad zu EXE Datei:
D:/PostgreSQL/8.4/bin/pg_ctl.exe runservice -N “postgresql-8.4” -D “D:/PostgreSQL/8.4/data” -w
Anmelden als - Dieses Konto: .\postgres

Ich habe die conf Dateien nicht manuell geändert. Bei listen_address steht z.B. ‘*’ drin.

Programmversion: postgresql-8.4.6-1-windows, viele bin Dateien sind vom 14.12.2010.

D:\PostgreSQL\8.4\bin>net user postgres
Benutzername postgres
Vollständiger Name postgres
Beschreibung PostgreSQL service account
Benutzerbeschreibung
Ländereinstellung 000 (Standardsystemvorgabe)
Konto aktiv Ja
Konto abgelaufen Nie

Letztes Setzen des Kennworts 1/29/2012 12:03 PM
Kennwort läuft ab Nie
Kennwort änderbar 1/29/2012 12:03 PM
Kennwort erforderlich Ja
Benutzer kann Kennwort ändern Nein

Erlaubte Arbeitsstationen Alle
Anmeldeskript
Benutzerprofil
Basisverzeichnis
Letzte Anmeldung 1/29/2012 1:56 PM

Erlaubte Anmeldezeiten Alle

Lokale Gruppenmitgliedschaften
Globale Gruppenmitgliedschaften *Kein
Der Befehl wurde erfolgreich ausgeführt.

Meine Dump-Sicherung ist etwa 1 Monat alt und ließ sich problemlos importieren. Es ist sehr traurig, dass ich obwohl ich alle Daten habe, diese nicht mehr verwenden kann, weil PostgreSQL rumzickt. Das erschüttert mein Vertrauen in dieses Softwareprodukt doch sehr. Ich lerne natürlich aus diesen ersten Computercrash und werde zukünftig häufiger mit pg_dump auf ein externes Laufwerk dumpen.

Wie kann ich die Datenbankdateien auslesen oder noch besser: mit pgAdmin wieder darauf Zugriff erlangen?

mfg
Marcus
(Software-Entwickler, kein DBA)

Gegen kaputte Festplatten versichert man sich mit Backups, bevor diese kapott gehen. Sorry, aber Dein Fehler.

Wenn die DB sauber runtergefahren war und du den kompletten Ordner mit allen relevanten Daten in einem anderen Rechner MIT DER SELBEN PG-VERSION startest, dann funktiniert auch das. Aber: die DB muß zum Zeitpunkt des Crasches down gewesen sein. Ansonsten hast Du inkonsistente Daten. Noch ein paar Anmerkungen:

  • es ist völlig egal, was Du mit PGAdmin machst, Du must PostgreSQL zum laufen bekommen. PGAdmin ist nur ein Client.
  • ein PING auf 127.0.0.1 sollte IMMER gehen, ein Ping auf einen Port geht allerdings gar nicht
  • um Dich a bissl aufzuheitern sein Dir in diesem Zusammenhang Der Hip-Hop Hacker - Lustigestories.de empfohlen…
  • du solltest schauen, ob sich PG starten läßt, und schauen welche Fehler da kommen
  • du solltest prüfen, ob die Dateieigentümer korrekt sind nach Deiner Kopieraktion

Und in Zukunft pg_dump / pg_dumpall nach Anleitung von PostgreSQL: Documentation: Manuals: Backup and Restore benutzen. Regelmäßig.


Andreas

Nach meiner Erfahrung sind falsche Berechtigungen auf das Datenverzeichnis unter Windows in den meisten Fällen die Ursache für Probleme (startet nicht usw).

Um die Sache genauer zu erklären: Der Windows Benutzer “postgres” muss komplette Schreib/Leserechte auf dem Postgres Daten-Verzeichnis (D:/PostgreSQL/8.4/data in Deinem Fall) und alle Unterverzeichnissen haben. Am besten ist es wenn der postgres Benutzer auch der Eigentümer ist wie akretschmer geschrieben hat.

Zusammenhang Der Hip-Hop Hacker - Lustigestories.de empfohlen

Das halte ich für eine “Urban Legend”.
Diese angeblich wahre Story habe ich schon mehrfach - auch auf Englisch - im Netz gesehen. Lustig ist sie aber trotzdem :wink:

Die Festplatte ist ja nicht kaputt und die Dateien sind intakt. Ob die DB runtergefahren war, kann ich nicht sagen.

Ich schau jetzt mal nach den Dateirechten…

Eine gute Methode sowas zu analysieren ist Postgres nicht als Service zu starten sondern “normale” über die Kommandzeile. Leider werden nicht immer alle Fehlermeldungen beim Start eines Service sauber gelogged.

In Deinem Fall also mit folgendem Befehl:

pg_ctl.exe -D "D:/PostgreSQL/8.4/data" -w start

Dann siehst Du evtl. Fehlermeldungen direkt auf der Konsole.

Ich habe einen Non-Admin User “donald” angelegt und per RUNAS eine Dos-Box für den geöffnet. Donald hat Vollzugriff für den gesamten Datenordner mittels cacls Befehl erhalten. Ich habe unter Windows XP SP3 Home Edition keine Möglichkeit gefunden den Dateieigentümer zu ändern. Postgres Server starten klappt damit auch nicht. Ich habe die Berechtigung für den Service auf donald geändert, und auch auf “Lokales System” eingestellt. Bringt beides nichts. Z.B. kam beim Starten dann die sinngemäße Meldung “kein Fehlertext / Fehlertext nicht verfügbar”.

Tools wie pg_dump fragen ob der Server auf Port 5432 laufen würde.

pg_ctl.exe -D “D:/PostgreSQL/8.4/data” -w start
meldet in der User-donald -Dos-Box “konnte Server nicht starten”. Das gleiche in der Dos-Box von Admin-User marcus.

Ja, okay.

Wenn Du auf Dateiebene die Dateien wegkopierst, während die DB läuft, sind diese inkonsistent.

Andreas

Das sollte eigentlich reichen, auch wenn es nicht ideal ist.

Ich habe unter Windows XP SP3 Home Edition keine Möglichkeit gefunden den Dateieigentümer zu ändern.

Ist ein bisschen dämlich mit der kastrierten Home-Version:How to take ownership of a file or a folder in Windows XP

auch Postgres Server starten klappt damit auch nicht. Ich habe die Berechtigung für den Service auf donald geändert

Du musst nicht die Berechtigung ändern, sondern den Benutzer unter dem Postgres gestartet wird. Leider bin ich zu doof um hier einen Screenshot anzuhängen aber das stellt man auf dem 2. Reiter der Service Definition ein unter “Anmelden”. Wenn Du das gemeint hast, dann ignorier diese Bemerkung.

Steht denn in den PostgreSQL logs was drin?
Oder im Event Log von Windows?

Der Tipp war Gold wert! Man schaut doch immer viel zu spät in die Logs. Bei PostgreSQL kannte ich die gar nicht. In dem Ordner sind noch alle Logfiles drin. Ich hab nun Zugriff. später mehr

:smiley:

In den PostgreSQL Logdateien stand:

2012-01-29 17:29:55 CETLOG: ungültige IP-Adresse »::1«: Unknown host
2012-01-29 17:29:55 CETZUSAMMENHANG: Zeile 72 in Konfigurationsdatei »d:/PostgreSQL/8.4/data/pg_hba.conf«
2012-01-29 17:29:55 CETFATAL: konnte pg_hba.conf nicht laden

pg_hba.conf sah (ohne Kommentarheader) so aus:

TYPE DATABASE USER CIDR-ADDRESS METHOD

IPv4 local connections:

host all all 127.0.0.1/32 md5

IPv6 local connections:

host all all ::1/128 md5
Durch Löschen der Zeile mit ::1 ließ sich pg_ctl flux starten. pgAdmin hatte nun wieder Zugriff auf die Tabellen und ich konnte pg_dump ausführen. Ich habe die Daten nun in meine neue PostgreSQL 9.1er Datenbank importiert. Die Daten sind vollständig. :smiley:
Danke für die Hilfe.



Das erschüttert mein Vertrauen in dieses Softwareprodukt doch sehr.

Ich hoffe Dein Vertrauen ist wieder hergestellt (allerdings sollte es Dein Vertrauen in Dich nicht zu sehr erschüttern :slight_smile: sowas passiert jedem mal)

Ja, Vertrauen ist wieder da.

Ich muss mich mal mehr mit PostgreSQL beschäftigen. Hab schon länger vor mir das PostgreSQL Buch (von Open Source Press?) zu kaufen.

Muss ich den Thread auf solved setzen? Wie?

Ich warte mal das im Februar erscheinende PostgreSQL 9 Buch vom Hanser Verlag (Autor: Lutz Fröhlich) ab…