プログラマでありたい

おっさんになっても、プログラマでありつづけたい

SubVersionのリポジトリが壊れたら?

SVNのリポジトリでBerkeley DBを使っていると、よく壊れます。
基本的にsvnadmin recoverで回復するのですが、たまに致命的に壊れます。

Repository lock acquired.
Please wait; recovering the repository may take some time...
svn: DB_RUNRECOVERY: Fatal error, run database recovery
svn: bdb: DB_ENV->log_flush: LSN of 99/206498 past current end-of-log of 99/184150
svn: bdb: Database environment corrupt; the wrong log files may have been removed or incompatible database files imported from another environment 

この場合は、以下の通りでなおります。

cd /home/svn/repos/db
rm log.* __db.*
for i in *s; do mv ${i} ${i}-old && db_dump ${i}-old | db_load ${i}; done
svnadmin recover /home/svn/repos

根本的には、Berkeley DBを使わない方がよいですね。