1

ページサイズに問題があるため、esentデータベース(Windows.edb)を開くときに問題が発生しました。私のシステムのWindows.edbのページサイズは32Kです。JET_paramDatabasePageSizeを介してこれを設定すると、JetInitはエラー-1213を返します(データベースのページサイズがエンジンと一致しません)。Laurion Burchallは、データベースへの読み取り専用アクセスのみが必要になったら、JET_paramRecoveryをオフにすることを提案しました。それで私の問題は解決しました。

今まで。データベースを完全にシャットダウンしていません。JET_paramRecovery = Onを使用すると、JetInitが自動的にリカバリを実行し、データベースを読み取らせると思います。しかし、それを試してみると、古い-1213エラーが発生します。

これで、ESENTUTLを使用してファイルを修正できますが、アプリのダミーユーザーは修正できません。リカバリをオンにして、任意のDatabasePageSizeを定義できる方法はありますか?データベースの場所にログファイルはありません(そして、ログパスを同じディレクトリに設定して、他の場所に書き込まれないようにします)。

これは、私のマシンのエンジンがページサイズまたはデータベースをサポートしていないことを意味しますか?または、別のマジックスイッチを設定することで問題を解決できますか?

4

2 に答える 2

1

別のアプリケーションのデータベースでリカバリを実行するのは難しいです。ESENTは組み込みエンジンであり、各アプリケーションは独自の設定を持つことができます。リカバリを実行する前に、次のことを知っておく必要があります。

  1. ログファイルの場所(JET_paramLogFilePath)
  2. ログファイルのサイズ(JET_paramLogFileSize)
  3. データベースページサイズ(JET_paramDatabasePageSize)
  4. ログファイルのベース名(JET_paramBaseName)

これらすべてのパラメータを正しく設定すると、リカバリは正しく機能します。これを適切に行わないと、他のアプリケーションでデータベースの回復に問題が発生する可能性があります。

于 2011-02-18T07:07:58.000 に答える
0

正常にシャットダウンされなかったEDBデータベースを「修正」する簡単な(しかしトリッキーな)方法があります。ヘッダーのオフセット52に状態フラグがあります。これは4バイト整数であり、3に設定する必要があります(正常に閉じられていない場合、検出される値はおそらく2です)。

おそらく、データベースヘッダーのコピーを含む2番目のデータベースページでこのエントリを繰り返す必要があります。そのページは、単にデータベースのページサイズ(通常は4096、8192など)であることがわかります。

これは本当にハックなので、自分の責任で使用する必要があります。

于 2011-09-13T08:25:45.137 に答える