Accueil / Blog / Métier / Archives / ZODB FileStorage CorruptedTransactionError

ZODB FileStorage CorruptedTransactionError

Par Sylvain Boureliou publié 25/03/2010
Comment remettre en état une ZODB corrompue avec le script fsrecover.py fournit directement dans le code de la ZODB.

Erreur rencontrée au démarrage de Zope

Dans mon cas le serveur Zope ne voulait plus démarrer et l'erreur suivante s'affichait dans la console (mon projet tourne dans un buildout):

[...]
/parts/zope2/lib/python/ZODB/FileStorage/FileStorage.py
", line 52, in panic
raise CorruptedTransactionError(message)
ZODB.FileStorage.FileStorage.CorruptedTransactionError: %s data record exceeds t
ransaction record at %s 

Correction de la base de données corrompue avec fsrecover.py

Il faut utiliser pour cela l'interpréteur python du projet. Ce dernier doit avoir accès à l'ensemble des modules de zope2. J'utilise pour cela l'interpréteur python zopepy généré par le buildout via la "part" suivante dans le fichier de configuration buildout.cfg:

[zopepy]
recipe = zc.recipe.egg
eggs = ${instance:eggs}
interpreter = zopepy
extra-paths = ${zope2:location}/lib/python
scripts = zopepy

 Rétablissons à présent notre base de données:

cd /var/filestorage
../../bin/zopepy ../../parts/zope2/lib/python/ZODB/fsrecover.py -v 1 Data.fs Data.fs.recover 

 Il faut être patient, le script va scanner toutes les transactions de la base, des plus anciennes aux plus récentes.

Que fait le script "fsrecover.py" ? Tout est dans le code: "Recover data from a FileStorage data file, skipping over damaged data.  Any damaged data will be lost.  This could lead to useless output if critical data is lost.".

Il ne reste plus qu'à mettre en production la base Data.fs.recover et à redémarrer le serveur Zope:

mkdir corrupted
mv Data.fs corrupted/
mv Data.fs.index corrupted/
mv Data.fs.tmp corrupted/

mv Data.fs.recover Data.fs
mv Data.fs.recover.index Data.fs.index
mv Data.fs.recover.tmp Data.fs.tmp

cd ../..
./bin/instance fg
ABONNEZ-VOUS À LA NEWSLETTER !
Voir aussi
Plone Unified Installer and ZcxOracleDA 02/12/2010

Trying to setup cx_Oracle and ZcxOracleDA on a Plone/Zope Zeo setup using the Unified Installer ...

Connecting to Oracle with SQLAchemy and very simple Plone integration 11/06/2009

SQLAlchemy (The Python SQL Toolkit and Object Relational Mapper) allow Oracle connection through ...

Using timezones in your Python scripts 29/07/2009

pytz allows accurate and cross platform timezone calculations using Python. Here is a small example ...

Create an archetype content type with Paster and ZopeSkel 29/07/2009

ZopeSkel provides a collection of skeletons for quickstarting Zope and Plone projects. These ...

Use RewriteMap to prevent proxying for some static contents 05/11/2009

Let's say we would like to prevent an application server to serve static content.