0

ケースかな。データベース (Oracle および Mssql) を使用するプロジェクトがあります。私のプロジェクトには、トランザクションを管理するフレームワークがあります。スレッドでは、データベース接続を開き、トランザクションを開始します (トランザクションでは、多くの更新クエリと挿入クエリがあります)。コードが実行されている間、何らかの理由で接続が閉じられます。try-catch ブロックがあるため、例外をキャッチしてトランザクションをロールバックします。しかし; 何らかの理由で接続が閉じられた場合、データベースでロールバッククエリを実行するにはどうすればよいですか? どうすればこの状況に対処できますか? 新しい接続を開いてロールバックすると、機能しますか?

ありがとう。

4

2 に答える 2

1

知っておくべき用語があります-ACID準拠

  • Atomicityは、全か無かの命題です。
  • 一貫性は、トランザクションがデータベースを途中で終了した状態のままにしないことを保証します。
  • 分離により、トランザクションは終了するまで相互に分離されます。
  • 耐久性は、サーバーが異常終了から回復できるように、データベースが保留中の変更を追跡することを保証します。

MySQLについて

MySQLでこれを取得するには、Transaction Safe Tables(TST)を使用する必要があります。トランザクションセーフテーブルの利点:

  • より安全。MySQLがクラッシュしたり、ハードウェアの問題が発生した場合でも、自動リカバリまたはバックアップとトランザクションログのいずれかからデータを取り戻すことができます。
  • COMMITコマンドを使用すると、多くのステートメントを組み合わせて、これらすべてを一度に受け入れることができます。
  • ROLLBACKを実行して、変更を無視することができます(自動コミットモードで実行していない場合)。
  • 更新が失敗した場合、すべての変更が復元されます。

SQLServerについて

「接続が失われた場合のトランザクションの動作」MSDNフォーラムのトピックをお読みください。MS SQL Serverトランザクションの背後にあるものをよりよく理解するには、「MSSQLServerでのトランザクションのロックと期間」という優れた記事を読んでください。

于 2012-06-20T07:01:22.917 に答える
0

自動コミット機能を使用していないことを確認してください (一部の MySQL インストールではデフォルトで有効になっていると思います)。すべてのコミットを「手動で」行うと、接続が切断されるとトランザクションがコミットされず、書き込まれなくなります。

ほとんどのデータベース システムでは、ロールバックに再接続できません。

于 2012-06-20T06:54:58.373 に答える