- blogs:
- cles::blog
2021/02/07

壊れた H2 DB のファイルを修復するには

突然、Gitbuketが JDBC エラーを吐くようになってしまって参りました。
ログを調べて見ると H2 DB に関する見たことがないログを吐いています。
Row "####" not found と言っていますが、これはデータベースファイルが不整合を起こしているようです。
Caused by: org.h2.message.DbException: Row "2515" not found in primary index "PUBLIC.COLLABORATOR_DATA" [90143-199]
at org.h2.message.DbException.get(DbException.java:205)
at org.h2.mvstore.db.MVPrimaryIndex.getRow(MVPrimaryIndex.java:274)
at org.h2.mvstore.db.MVTable.getRow(MVTable.java:338)
・・・・・・
しかたがないので、データベースをリカバリしていきます。
H2 DB には Using the Recover Tool というプログラムが用意されていて、不整合を起こしているデータベースファイルからデータをサルベージすることができます。
サルベージされたデータは SQL としてダンプされているので、あとはこれを元にデータベースを復元してやれば OK。
具体的な手順は H2 DB をダウンロードし、カレントディレクトリにデータベースファイル( data.mv.db )がある状態で以下のコマンドを実行します。
java -cp h2*.jar org.h2.tools.Recover
java -cp h2*.jar org.h2.tools.RunScript -url jdbc:h2:./new -user sa -password sa -script ./data.h2.sql -driver org.h2.Driver -showResults
うまくいけばカレントディレクトリに new.mv.db が生成されているはずなので、あとはこれを元の data.mv.db に上書きしてやれば完了です。
† 参考
トラックバックについて
Trackback URL:
お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/12279
Trackbacks
このエントリにトラックバックはありません
Comments
愛のあるツッコミをお気軽にどうぞ。[policy]
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
コメントはありません
Comments Form
コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。
OpenID を使ってログインすることができます。
サイト内検索
検索ワードランキング
へぇが多いエントリ
- 居酒屋 八(ひらく) (3)
- iPhone の設定を開くと「不正... (1)
- 退去通知もネットで可能な時代に (1)
- ケーブルカーのケーブルが切... (1)
- Visual Studio 2017/2019 で ... (1)
閲覧数が多いエントリ
1 . Solr-rubyで複数のドキュメントを一括Post(32916)
2 . Windows 10 で勝手にログアウトされないようにする(26776)
3 . Word で数式がグレーアウトされていて挿入できないときは(24664)
4 . リモートデスクトップで Alt + PrtSc と同じことをするには(20939)
5 . Visual Studio 2017/2019 で scanf() がエラー(C4996)になるときは(20394)
2 . Windows 10 で勝手にログアウトされないようにする(26776)
3 . Word で数式がグレーアウトされていて挿入できないときは(24664)
4 . リモートデスクトップで Alt + PrtSc と同じことをするには(20939)
5 . Visual Studio 2017/2019 で scanf() がエラー(C4996)になるときは(20394)
cles::blogについて
Referrers