datenrettung von clusterkopie...

hi there!

es gibt tage, an denen man sich so richtig schön in die ***** reitet. heute ist so einer :frowning:
headcrash der serverplatte. raid? fehlanzeige :frowning:

das backup glänzt dabei durch vollständigkeit bis auf die pgsql-dumps. die wurden wohl übersehen und das rächt sich jetzt bitterst…

was wir haben, ist eine KOPIE des verzeichnisses /var/lib/postgresql. allerdings im laufneden betrieb gezogen und somit alles andere als optimal.

ich habe das jetzt auf einen neuen server (gleiche pgsql-version 8.3) aufgespielt und habe nach viel hin- und her den pg-daemon wieder ans laufen bekommen.
allerdings erscheint die datenbank, wenn ich mit pgadmin darauf zugreife leer.

gibt es eine möglichkeit, die daten auf irgendeine art und weise zu retten? kann man IRGENDWAS machen ausser “bei null anfangen”?

Die DB startet? Mit oder ohne Fehler? Was steht im Log? Sie sucht auch dort nach den Daten? Fragen über Fragen …


Andreas

ja, sie startet und ich kann mich via pgadmin verbinden. dann kommt allerdings der fehler “kann logdatei nciht öffnen” gefolgtr von einem sql-fehler, dass feld einer (nicht existierenden) tabelle nicht existieren würde. diese meldungen kommen zweimal. dann stehe ich vor der leeren datenbank :frowning:

die logdatei vermerkt dazu:

2009-06-23 20:11:43 CEST ERROR: column op.oprlsortop does not exist at character 773
2009-06-23 20:11:43 CEST STATEMENT: SELECT op.oid, op.oprname, pg_get_userbyid(op.oprowner) as opowner, op.oprkind, op.oprcanhash,
op.oprleft, op.oprright, lt.typname as lefttype, rt.typname as righttype, et.typname as resulttype,
co.oprname as compop, ne.oprname as negop, lso.oprname as leftsortop, rso.oprname as rightsortop,
lco.oprname as lscmpop, gco.oprname as gtcmpop,
op.oprcode as operproc, op.oprjoin as joinproc, op.oprrest as restrproc, description
FROM pg_operator op
LEFT OUTER JOIN pg_type lt ON lt.oid=op.oprleft
LEFT OUTER JOIN pg_type rt ON rt.oid=op.oprright
JOIN pg_type et on et.oid=op.oprresult
LEFT OUTER JOIN pg_operator co ON co.oid=op.oprcom
LEFT OUTER JOIN pg_operator ne ON ne.oid=op.oprnegate
LEFT OUTER JOIN pg_operator lso ON lso.oid=op.oprlsortop
LEFT OUTER JOIN pg_operator rso ON rso.oid=op.oprrsortop
LEFT OUTER JOIN pg_operator lco ON lco.oid=op.oprltcmpop
LEFT OUTER JOIN pg_operator gco ON gco.oid=op.oprgtcmpop
LEFT OUTER JOIN pg_description des ON des.objoid=op.oid
WHERE op.oprnamespace = 2200: > :astonished: > id
ORDER BY op.oprname
2009-06-23 20:11:48 CEST ERROR: column “opcamid” does not exist at character 170
2009-06-23 20:11:48 CEST STATEMENT: SELECT op.oid, op., pg_get_userbyid(op.opcowner) as opowner, it.typname as intypename, dt.typname as keytypename, amname
FROM pg_opclass op
JOIN pg_am am ON am.oid=opcamid
JOIN pg_type it ON it.oid=opcintype
LEFT OUTER JOIN pg_type dt ON dt.oid=opckeytype
WHERE opcnamespace = 2200: > :astonished: > id
ORDER BY opcname
2009-06-23 20:34:44 CEST ERROR: column op.oprlsortop does not exist at character 773
2009-06-23 20:34:44 CEST STATEMENT: SELECT op.oid, op.oprname, pg_get_userbyid(op.oprowner) as opowner, op.oprkind, op.oprcanhash,
op.oprleft, op.oprright, lt.typname as lefttype, rt.typname as righttype, et.typname as resulttype,
co.oprname as compop, ne.oprname as negop, lso.oprname as leftsortop, rso.oprname as rightsortop,
lco.oprname as lscmpop, gco.oprname as gtcmpop,
op.oprcode as operproc, op.oprjoin as joinproc, op.oprrest as restrproc, description
FROM pg_operator op
LEFT OUTER JOIN pg_type lt ON lt.oid=op.oprleft
LEFT OUTER JOIN pg_type rt ON rt.oid=op.oprright
JOIN pg_type et on et.oid=op.oprresult
LEFT OUTER JOIN pg_operator co ON co.oid=op.oprcom
LEFT OUTER JOIN pg_operator ne ON ne.oid=op.oprnegate
LEFT OUTER JOIN pg_operator lso ON lso.oid=op.oprlsortop
LEFT OUTER JOIN pg_operator rso ON rso.oid=op.oprrsortop
LEFT OUTER JOIN pg_operator lco ON lco.oid=op.oprltcmpop
LEFT OUTER JOIN pg_operator gco ON gco.oid=op.oprgtcmpop
LEFT OUTER JOIN pg_description des ON des.objoid=op.oid
WHERE op.oprnamespace = 2200: > :astonished: > id
ORDER BY op.oprname
2009-06-23 20:34:46 CEST ERROR: column “opcamid” does not exist at character 170
2009-06-23 20:34:46 CEST STATEMENT: SELECT op.oid, op.
, pg_get_userbyid(op.opcowner) as opowner, it.typname as intypename, dt.typname as keytypename, amname
FROM pg_opclass op
JOIN pg_am am ON am.oid=opcamid
JOIN pg_type it ON it.oid=opcintype
LEFT OUTER JOIN pg_type dt ON dt.oid=opckeytype
WHERE opcnamespace = 2200: > :astonished: > id
ORDER BY opcname
2009-06-23 20:56:46 CEST ERROR: column op.oprlsortop does not exist at character 773
2009-06-23 20:56:46 CEST STATEMENT: SELECT op.oid, op.oprname, pg_get_userbyid(op.oprowner) as opowner, op.oprkind, op.oprcanhash,
op.oprleft, op.oprright, lt.typname as lefttype, rt.typname as righttype, et.typname as resulttype,
co.oprname as compop, ne.oprname as negop, lso.oprname as leftsortop, rso.oprname as rightsortop,
lco.oprname as lscmpop, gco.oprname as gtcmpop,
op.oprcode as operproc, op.oprjoin as joinproc, op.oprrest as restrproc, description
FROM pg_operator op
LEFT OUTER JOIN pg_type lt ON lt.oid=op.oprleft
LEFT OUTER JOIN pg_type rt ON rt.oid=op.oprright
JOIN pg_type et on et.oid=op.oprresult
LEFT OUTER JOIN pg_operator co ON co.oid=op.oprcom
LEFT OUTER JOIN pg_operator ne ON ne.oid=op.oprnegate
LEFT OUTER JOIN pg_operator lso ON lso.oid=op.oprlsortop
LEFT OUTER JOIN pg_operator rso ON rso.oid=op.oprrsortop
LEFT OUTER JOIN pg_operator lco ON lco.oid=op.oprltcmpop
LEFT OUTER JOIN pg_operator gco ON gco.oid=op.oprgtcmpop
LEFT OUTER JOIN pg_description des ON des.objoid=op.oid
WHERE op.oprnamespace = 2200: > :astonished: > id
ORDER BY op.oprname
2009-06-23 20:57:25 CEST ERROR: column “opcamid” does not exist at character 170
2009-06-23 20:57:25 CEST STATEMENT: SELECT op.oid, op.*, pg_get_userbyid(op.opcowner) as opowner, it.typname as intypename, dt.typname as keytypename, amname
FROM pg_opclass op
JOIN pg_am am ON am.oid=opcamid
JOIN pg_type it ON it.oid=opcintype
LEFT OUTER JOIN pg_type dt ON dt.oid=opckeytype
WHERE opcnamespace = 2200: > :astonished: > id
ORDER BY opcname

Dann wirfst du jetzt erst mal pgadmin weg und siehst zu, dass du das psql der Datenbank findest.

Wenn die Datenbank selbst startet, ist das schon mal ein halbwegs gutes Zeichen. Ich hoffe, du hast die Datenbank auf einer Kopie des Datenverzeichnisses gestartet?


Und danach gehst du irgendwo in eine Schulung und lernst, wie man vernünftig Backups zieht. Das klappt nämlich auch mit einer Kopie des Datenverzeichnisses, dafür muss man bloss ein, zwei Schritte einfügen.