アプリでESE(JetBlue)を使用していますが、JetAttachDatabaseが呼び出されると、JET_errDatabaseDirtyShutdownが返されます。私は自分のアプリで何をすべきですか?私の望みは、満たされていない取引を削除することです
2 に答える
2
ログの回復は、JetInitの呼び出しによって自動的に実行されます。これにより、コミットされていないトランザクションが自動的にロールバックされます。JetInitが機能するためには、ログファイルを見つける必要があるため、この場合、おそらく次のいずれかがあります。
- ログファイルを削除しました。そうしないでください。
- ログファイルのパスが正しく設定されていません。ESEがログを見つけられるように、初期化するときは常に同じログファイルパスを設定してください。
- データベースを移動しました。ログにはデータベースへのハードコードされたパスが含まれているため、データベースを移動するとリカバリが中断されます。これに対処するために、代替リカバリパスシステムパラメータをデータベースを含むディレクトリに設定できます。
于 2010-03-03T06:36:11.243 に答える
1
JetCreateInstance()の後およびJetInit()の前に以下を追加することにより、「ダーティシャットダウン」のクリアを自動的に試行するようにアプリケーションを構成できます。はい、これらの順序は重要です。
Api.JetSetSystemParameter(instance, JET_SESID.Nil, Server2003Param.AlternateDatabaseRecoveryPath, 0, Path.GetDirectoryName(databasePath));
(上記のサンプルはC#ですが、要点はわかります...)
最後のパラメータは、修復されたデータベースを表示する場所であるため、ダーティデータベースファイルと同じディレクトリである可能性があります。
于 2016-11-20T16:56:47.820 に答える