0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

H2 データベースのリカバリー手順

Posted at

H2 データベースのリカバリー手順

  1. エラーメッセージの確認
    H2 はエラーメッセージに具体的な内容を出力します。例えば、次のようなエラーが発生している場合があります。
General error: "java.lang.RuntimeException: file corrupted in chunk xxxxxx, expected yyyyy but got zzzzz"

この場合、特定の チャンク (chunk) に破損が発生していることを示しています。


  1. バックアップがある場合の復旧

(1) 最新のバックアップからリストア

H2 では .mv.db または .script のバックアップを取得している場合、それを復元するのが最も安全な方法です。

mv mydb.mv.db mydb_corrupt.mv.db
cp mydb_backup.mv.db mydb.mv.db

これでバックアップから復元できます。


  1. バックアップがない場合のリカバリー
    バックアップがない場合、以下の方法を試してください。

(1) H2 の RECOVER モードを使用

H2 には "Recover" モード があり、データベースを修復できる可能性があります。

java -cp h2*.jar org.h2.tools.Recover -dir ./recover -db mydb

このコマンドは ./recover ディレクトリに mydb.h2.sql を出力します。

新しいデータベースを作成する手順:

java -cp h2*.jar org.h2.tools.RunScript -url jdbc:h2:./newdb -script ./recover/mydb.h2.sql

この手順で、新しいデータベース newdb にデータを復元できます。


(2) H2 の SCRIPT ツールを使用

データベースのスクリプトエクスポートを試みる方法もあります。

java -cp h2*.jar org.h2.tools.Script -url jdbc:h2:file:./mydb -script backup.sql

これにより、backup.sql にデータをエクスポートできます。

エクスポートできた場合、次のように新しいデータベースへインポートします。

java -cp h2*.jar org.h2.tools.RunScript -url jdbc:h2:file:./newdb -script backup.sql

  1. データベースの強制リカバリ
    もし RecoverScript で復旧できない場合、FORCE_REPAIR を試すこともできます。
SET FORCE_REPAIR 1;
SHUTDOWN IMMEDIATELY;

その後、H2 データベースを再起動してみてください。


  1. データベースを開く際のオプション
    データベースを開く際に "IFEXISTS=TRUE""RECOVER=1" のオプションを追加すると、破損データのリカバリを試みることができます。
java -cp h2*.jar org.h2.tools.Shell -url jdbc:h2:file:./mydb;RECOVER=1

  1. データベースの破損原因を調査
    リカバリーが成功したら、破損の原因を特定して、再発防止策を考えましょう。

(1) 異常終了や強制シャットダウン

  • プロセスのクラッシュ、OS の強制終了などが原因になることが多い
  • SHUTDOWN COMPACT を定期的に実行し、クリーンな終了を行う

(2) H2 バージョンの不整合

  • データベースを古いバージョンで開いたり、新しいバージョンで開いたりすると破損することがある
  • 同じバージョンの H2 で動作させることを推奨

(3) ディスクの問題

  • SSD や HDD に物理的な障害が発生している場合、ファイルが破損する可能性がある
  • dmesg コマンドや chkdsk / fsck でディスクの状態を確認

  1. まとめ
    | 手順 | 方法 |
    |------|------|
    | 1 | エラーメッセージを確認 |
    | 2 | バックアップがある場合は復旧 |
    | 3 | Recover コマンドでリカバリー |
    | 4 | Script ツールで SQL を抽出 |
    | 5 | FORCE_REPAIR を試す |
    | 6 | RECOVER=1 を指定して開く |
    | 7 | 破損の原因を特定し、再発防止策を検討 |

これらの方法を試して、H2 データベースの復旧を行ってみてください!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?