トランザクション

恥をかいたついでに、トランザクションについて復習。

ACID 特性

トランザクション処理が満たさなければいけない4つの特性。

  • 原子性(Atomicity)
    トランザクション内の全ての処理が実行されるか、実行されないかのどちらかでなければならない。
  • 一貫性(Consistency)
    トランザクションの開始時と終了時でデータの整合性を保たなければならない。
  • 分離性(Isolation)
    … 複数のトランザクションが同時に実行される場合、それぞれ独立して処理されなければならない。
  • 耐久性(Durability)
    トランザクション処理が成功した場合、その結果は保存されなければならない。

分離レベル

  • Read Uncomitted
    … コミット前のデータが読み込まれてしまう。
  • Read Comitted
    … 同じデータを複数回読み込んだ場合、異なるデータが返ることがある。
  • Repeatable Read
    … 別トランザクションが追加したデータが読めてしまう。
  • Serializable
    … ACID 特性がすべて保障される。

OracleOracle 以外の DBMS との違いですが、Oracle が Read Comitted と Serializable しかサポートしないというのはあまり重要とは思っていなくて、分離レベルを実現するために、Oracle 以外が共有ロックを使用するのに対して、Oracleロールバックセグメント内の文あるいはトランザクション開始時のデータを使用しているという点。共有ロックを使用しない分、Oracle の方が同時実行性は高いと言えます。
それ以上でも、それ以下でもない。この一番最後の点をなぜかカン違いしていた模様...(^^;)