1

ManagedEsent ライブラリを使用して ESE データベース (.edb) を読み込もうとしています。ただし、データベースのセットアップ時にエラーが発生します。エラーは、データベースの接続時 (JetAttachDatabase() の呼び出し時) に発生しているようです。

表示されるエラー メッセージは、「ソフト リカバリはバックアップ データベースを対象としています。代わりに復元を使用する必要があります」です。

以下は私のコードです:

JET_INSTANCE instance;
JET_SESID sesid;

Microsoft.Isam.Esent.Interop.SystemParameters.DatabasePageSize = 8 * 1024;

Api.JetCreateInstance(out instance, Guid.NewGuid().ToString());
Api.JetInit(ref instance);

JET_DBID dbid;
JET_COLUMNID columnid;
JET_TABLEID tableid;
JET_COLUMNDEF columndef = new JET_COLUMNDEF();

Api.JetBeginSession(instance, out sesid, null, null);

Api.JetAttachDatabase(sesid, @"Blah.edb", AttachDatabaseGrbit.None);

Api.OpenDatabase(sesid, @"Blah.edb", out dbid, OpenDatabaseGrbit.None);

私が得ている例外は次のとおりです。

Microsoft.Isam.Esent.Interop.EsentSoftRecoveryOnBackupDatabase
Soft recovery is intended on a backup database. Restore should be used instead
at Microsoft.Isam.Esent.Interop.Api.Check(Int32 err) in e:\src\codeplex_svn\codeplex\EsentInterop\Api.cs:line 2894
at Microsoft.Isam.Esent.Interop.Api.JetAttachDatabase(JET_SESID sesid, String database, AttachDatabaseGrbit grbit) in e:\src\codeplex_svn\codeplex\EsentInterop\Api.cs:line 372

これを引き起こしている可能性のあるアイデアはありますか?添付している .edb ファイルは無効である可能性がありますか?

4

2 に答える 2

2

EsentUtl ユーティリティを実行してデータベース ファイルを修復した後、データベースにアクセスできました。

esentutl /p Blah.edb

これを実行した後、データベースをアタッチ/オープンして、データベース内のテーブルから読み取ることができます。ただし、ファイルに対して実際に修復が行われたかどうかはわかりません(たとえば、データまたは何かが欠落している可能性があるかどうかなど)。

于 2015-09-30T01:53:09.603 に答える
1

データベースはどこで入手しましたか?あなたがしたことは、完全にシャットダウンされたデータベースで機能するはずです。これらのデータベースのトランザクション ログ ファイルは必要ありません。しかし、Dirty データベースもあります (JetTerm が正常に完了しなかった場合)。それらのトランザクション ログ ファイルが必要になります。また、バックアップされたデータベースも少し異なります。これらのデータベースでは、JetRestore を呼び出す必要があります。

-マーティン

于 2015-09-28T20:51:58.197 に答える