[Zope] recover from POSKeyError after corruption by pack()ing bug
Dieter Maurer
dieter at handshake.de
Tue Jan 27 14:30:12 EST 2004
Dominik Schäfer wrote at 2004-1-26 21:44 +0100:
>I have a serious problem: I think about a week ago my database was damaged
>by this nasty pack()ing bug. Unfortunately this error was not noticeable
>until my zope restart yesterday. :-(
Hopefully, you did not pack again in the meantime.
In this case, you get at least the state from the pack in "Data.fs.old".
> ...
>Is there any possibility to recover the database
Pack has physically removed a lot of transaction and object records.
There is no way to reconstruct them from this (corrupted) file.
>or to "extract" the
>transactions of the last 8 days and to prevent the complete loss of data
>in that time? Has anybody an idea, which I could try?
This is possible but it will not be easy:
The idea is that emulate packing in some way.
Packing essentially consists of 2 phases.
In the first, the packing, phase transactions records
are copied into the pack file. During this copying,
object records for no longer reachable objects or no
longer current are dropped. If a transaction happens
to get empty, it is dropped as a whole.
This phase ends when the packing time is reached.
In the second, the copying, phase, transaction records
after the packing time are copied to the pack file.
In this process, no object records or transactions are
deleted. However, pointers are adjusted.
The idea to recover your data would be to
emulate packing by processing your "Data.fs.old"
in the packing phase and all new transaction records
in the copying phase.
This will require some tweaking as in your case, both
segments reside in different files (while usually, they come
from the same file).
>P.S. I hope I got the suitable mailing list, I was uncertain if
>zope.general or zope.zobd fits better...
zodb-dev at zope.org might have been even better...
--
Dieter
More information about the Zope
mailing list