3

アプリケーションが H2 Database で起動する前にデータベースの破損をチェックする方法はありますか? データが破損している場合、アプリケーションの起動時にバックアップ zip ファイルから自動復元を実行したいと考えています。

データベースに接続するだけでは確認できません.DBファイルが空であってもそこにあれば接続でき、デフォルトのテーブルが生成されるからです。

また、データベース内の各テーブルに 1 つの select ステートメントを作成して、その動作を確認することも考えていました。H2データベースには、データの破損をチェックする組み込みのSQL関数が見つかりませんでした。

4

1 に答える 1

2

データベースファイルが存在するかどうかを確認するには、次を使用できます。

if (new java.io.File(databaseFileName).exists()) { ... }

ファイルは存在するがデータベースが破損している場合、通常はそのファイルに接続できません(接続しようとすると例外がスローされます)。これは私がそれを検証するために知っている最速の方法です。

データベースファイルは存在するが、完全には初期化されていないという小さなリスクがあります。その場合、一部のテーブルは存在しません。すべてのテーブルが存在することを確認する標準的な方法は、を使用することDatabaseMetaData.getTablesです。

ただし、最新バージョンのH2を使用している場合は、危険な機能(トランザクションログの無効化やデータベースファイルのロックの無効化など)を使用しない限り、データベースが破損することはありません。データベースが破損した場合は、H2の使用方法に問題があるか、H2自体にバグがある可能性があります。詳細を記載したメールをH2Googleグループに送信するのが理にかなっている場合があります。

于 2013-03-19T19:39:53.810 に答える