1

最近、この質問は、トランザクションが一般的なコンテキストで何であるかの定義について投稿されました。この質問に対する一般的な答えは、トランザクションはアトミックな作業単位でなければならないというものでした。

私の質問はこの原子性に関連しています(私は思う)SQLストアドプロシージャでROLLBACKへの明示的な呼び出しをよく目にします。

ロールバックが明示的に要求されることは、一般的にトランザクション処理システムの一般的な要件ですか?

コミット時にエラーが発生した場合、ロールバックは自動的に発生しますか?

4

2 に答える 2

3

TPシステムでは、以下に基づいてロールバックが発生する可能性があります。

  • ROLLBACKなどの呼び出しなどの明示的な要求
  • キャッチされなかった例外またはエラー。これらには次のものが含まれます。
    • 参加者との通信の喪失(分散トランザクション)
    • 無効または範囲外の値またはパラメーター
    • たとえば、ロックを取得できないことによるタイムアウト、またはユーザーの遅延。
  • 2段階のコミット分散トランザクションで、参加者の1人がコミットに投票できなかった場合

「コミットするとき」と言うようにロールバックが発生する必要はありません。つまり、「コミットしようとするとき」を意味すると思います。トランザクションは、開始後いつでもロールバックできます。

于 2009-06-10T11:00:00.677 に答える
0

場合によっては、トリガーまたは制約違反が原因でロールバックが自動的に発生します。他の場合(これまで見てきたように)、ストアドプロシージャ自体がロールバックを実行します。エイデンは、自動コミットが変化するのは正しいです。

于 2009-06-10T10:59:45.013 に答える