Обсуждение: corrupt DB recovery

Поиск
Список
Период
Сортировка

corrupt DB recovery

От
Drew Whittle
Дата:
Hi Folks,

One of our production db's went down the other day, I have restored it
from backup to another server and now I am attempting to recover as much
of the data that was entered since the last backup.

Anyway, if I attempt to connect to the DB using psql I get the old
missing pg_clog entry error, in an attempt to fix that I created a 256k
0 filled file of the correct name.

The next attempt to connect via psql gets me a "no pg_class entry for
pg_proc" error.

If I start the db up in standalone mode the above error comes up and the
db immediately shuts down again.

I have attempted to scan across the data files for this db with
pg_filedump and it is not reporting any corrupted blocks. (but I'm not
sure I was doing it correctly)

I have two other db's that are 100% identical in everything but name and
data. (ie same structure etc), is it possible to use one of that data
files in them to over write the buggered file and fix the pg_proc error?
(and if so, is there an easy way to figure out which one, ie is pg_class
always in the 1249 data file?)

Any other suggestions that might get the data back or should I just
forget it and tell them to key it again?

Thx,

Drew


Re: corrupt DB recovery

От
Tom Lane
Дата:
Drew Whittle <drew@albatross.co.nz> writes:
> I have two other db's that are 100% identical in everything but name and
> data. (ie same structure etc), is it possible to use one of that data
> files in them to over write the buggered file and fix the pg_proc error?

You could try that, but unless the db's also have identical history (in
the sense of the same set of transaction numbers that committed) it's
unlikely to work.  I think your problem is not that pg_class is buggered
per se, so much as that you did not have correct pg_clog data to match it.
The data files and the log files are an interlocking whole, you can't
just plug in one part at random.

> Any other suggestions that might get the data back or should I just
> forget it and tell them to key it again?

If you did extract something from this mess, how much could you trust
it?  Not a lot, because the bad-clog problem will affect visibility of
rows in the user tables too.

I'm afraid you're screwed :-(.  Maybe you could learn something about
proper backup procedures though.  The backup you have obviously didn't
work well --- how did you take it exactly?

            regards, tom lane

Re: corrupt DB recovery

От
Drew Whittle
Дата:
On Thu, 2004-08-12 at 16:21, Tom Lane wrote:
>
> You could try that, but unless the db's also have identical history (in
> the sense of the same set of transaction numbers that committed) it's
> unlikely to work.  I think your problem is not that pg_class is buggered
> per se, so much as that you did not have correct pg_clog data to match it.
> The data files and the log files are an interlocking whole, you can't
> just plug in one part at random.

I know your the expert and everything, but we will have to see if I can
get the data back or not. (I like a good challenge!)

A bit more research has given me some of the info I need and I now have
the buggered db up and running (although currently in a failing state -
but I'm fairly confident that I can fix that.)


> > Any other suggestions that might get the data back or should I just
> > forget it and tell them to key it again?
>
> If you did extract something from this mess, how much could you trust
> it?  Not a lot, because the bad-clog problem will affect visibility of
> rows in the user tables too.
>

Only if it was a bad-clog problem. Due to the nature of that data it is
fairly easy to tell any corrupt items.

> I'm afraid you're screwed :-(.  Maybe you could learn something about
> proper backup procedures though.  The backup you have obviously didn't
> work well --- how did you take it exactly?
>

Actually the backup went fine, restored fine to the alternate machine,
I'm attempting to get the data back (if any) that was input between the
backup time and the crash time.

Thanks for you past and present comments (earlier posts by you to the
list have helped me with this problem)

Thx,

Drew