2009-04-10 8 views
0

私たちはRetailPOS .net(windows)アプリケーションを開発しています。突然の停電のために.netアプリケーションでデータが失われないようにするにはどうすればよいですか?

お客様の中には、「電源が突然切れたときに、現在のデータがアプリケーションで処理されるのはどうなりますか?」、「アプリケーションは保存されていないデータを回復できますか?

この機能を.netアプリケーションにどのように組み込むことができますか?

いくつか手伝ってもらえますか?これを行うには何が必要ですか?

答えて

4

UPS(無interuptable電源)に見て、まず

第二に、永続的なトランザクションを作成するに見て、あなたがそれを言うまでコミット早期かつ頻繁に保存しませんが、取引。これはTSQLの典型的なトランザクションを少し超えています。

0

PowerFailureExceptionクラスがこれを解決します。実際にはUPSで電力を維持するだけです。他の唯一のオプションは、実際にはデータベーストランザクションのアトミック性を維持することです。

1

電源が切れている(ノートパソコンの電源が入っていない状態でバッテリーを取り外したような)場合は、毎回ディスクに書き込む以外のことはあまりありません。ステップ。の。 。方法。 (パフォーマンス・ヒットについて話をする)また、前回の作業の途中でバックアップを開始したときにアプリケーションに通知するように記録されていることを確認してください。続行するか、操作を再試行してください。

電源切断の場合、電源ボタンを押してコンピュータをシャットダウン/スリープ/休止状態にした後、SystemEvents.PowerModeChangedイベントをリッスンし、それに応じて動作します。

最後に、データベースに途中で書き込まれたデータが壊れている場合は、データベース書き込みがアトミックであることを確認してください(すべての変更が発生したか、受け入れられたか、いずれもありません)。

0

あなたが本当に望むのは、ディスク上のアトミックトランザクションです。これらを実行するには多くの方法がありますが、既存のデータベース製品を使用している場合は、しばしば実行されます。

独自のデータベースまたはファイル形式をロールした場合は、ファイル形式に応じていくつかの作業が必要になります。

1

受信した現在の情報をファイルシステムに追加することができます。パフォーマンスヒットになりますが、キャプチャされている最後のアイテムに戻ることができます。

アプリケーションが検出を開始すると、保留中のファイルがあるかどうかを検出し、回復するオプションを指定します。ファイルに保存されたデータを適切に読み込みます。

すべての情報を取得したら、支払い時に発生するプロセスを実行するときに、プロセスの重要な変更を必ずアトミックに記録してください。外部システムを使用している場合は、操作を開始する時点とすぐに戻った時点を記録します。上記の場合、失敗する可能性のある時間枠は常にありますが、できるだけ短くしておき、回復プロセスに十分な情報が必要です。最悪の場合、システムが自動的に回復できない場合は、プロセス内のどこで停止したかを判断するのに十分な情報が必要です。

0

アプリケーションにSQLiteを使用することを検討してください。

彼らはwhen to use pageにいくつかの素晴らしい情報を持っています。

目立ついくつかのポイントがあります:アプリケーションのコンテンツは、発生時に失われた仕事何がないように

  • コンテンツが継続的かつアトミックに更新され改訂されるよう

    • 更新がアトミックに起こります停電またはクラッシュ。

    私はこれまでのSQLite ....私は力が一日を通して頻繁に出て行く第三世界の国で使用される実装するつもりですアプリケーションのための同様のオプションを探しています良い選択肢として際立っているようだ。

    しかし、1日の終わりに、あなたの選択は個々の状況と要件によって異なります。

  • 関連する問題